DockHackLab
TAG -> Dockerlabs | CTF
Como es costumbre, verificamos conectividad con la maquina usando el comando ping.
❯ ping -c 1 172.17.0.2 -R
PING 172.17.0.2 (172.17.0.2) 56(124) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.134 ms
RR: 172.17.0.1
172.17.0.2
172.17.0.2
172.17.0.1
--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.134/0.134/0.134/0.000 msNingún paquete perdido, muy bien!!!, por el TTL podemos creer que estamos frente a una maquina Linux, creamos nuestras carpetas de trabajo con mkt y hacemos un escaneo primario.
❯ PortScanner -i 172.17.0.2 -t 100 -s 1 -a V C -o recognition.txt
[+] Autor: Anonymous17
[+] Targeted: 172.17.0.2
[+] (TTL -> 64): Linux
[!] Escaneo de puertos (netcat):
[!] Puerto 22 abierto!
[!] Puerto 80 abierto!
[+] Port: 100 / 100
[+] Lista de puertos abiertos: [22, 80]
[+] Información de servicios y versiones:
[+] 22/tcp ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.4 (Ubuntu Linux; protocol 2.0)
[+] 80/tcp http Apache httpd 2.4.58 ((Ubuntu))
[+] Comprobando vulnerabilidades:
[+] SSH parece seguro contra enumeración de usuarios
[+] Tecnologías detectadas en HTTP:
http://172.17.0.2:80 [200 OK] Apache[2.4.58],
Country[RESERVED][ZZ],
HTTPServer[Ubuntu Linux][Apache/2.4.58 (Ubuntu)],
IP[172.17.0.2],
Title[Apache2 Ubuntu Default Page: It works],
[*] Evidencia guardada en recognition.txtPor ahora vemos 2 puertos abiertos el 22y el 80, procedemos a hacer un escaneo con nmap de posibles vulnerabilidades.
Nuestro primer escaneo con nmap no muestra nada inusual.
Con nuestro segundo escaneo mas de lo mismo, solo nos aseguro que es una maquina Linux, si vamos a la pagina web, nos muestra la pagina de instalación de Apache.
Si hacemos fuzzing encontraremos una pagina llamada hackademy para subir archivos, si usamos Wappalyzer nos dice que la pagina web maneja php, así que intentamos subir un archivo php malicioso con nombre cmd.php, y la pagina nos responde con "El archivo cmd.php ha sido subido y alterado xxx_tuarchivo , localizalo y actua."
El contenido de cmd.php es:
Por lo cual procederemos a buscar este archivo modificado haciendo fuzzing, cabe destacar que primero lo intente con el directory-list-2.3-medium.txt pero luego noto que el la pagina nos dice que modifico el archivo y solo muestra 3 x antes del nombre de nuestro archivo, lo que podemos hacer es usar crunch para generar una lista de palabras con 3 caracteres, primero solo de letras y veremos que pasa.
Como resultado nos devuelve una lista de 19683 palabras de 3 caracteres, procedemos a hacer el fuzzing.
Encuentro mi archivo que responde con 500 por que necesita un parámetro para dar 200, le han agregado klp al principio, si ingreso en la URL: http://172.17.0.2/hackademy/klp_cmd.php?cmd=id el servidor me responde con: uid=33(www-data) gid=33(www-data) groups=33(www-data), en este punto puedo tirar un comando me que devuelva una reverse shell.
URL encodeamos la reverse shell y nos ponemos en escucha para ver que pasa.
Después de darle tratamiento a la TTY, vemos que estamos dentro de la maquina, solo nos queda la escalada de privilegios.
Tratamiento de la TTY:
Por ultimo sabiendo las dimensiones y si queremos una terminal de colores, podemos ejecutar el siguiente comando en la maquina victima.
Para la escalada viendo lo básico encontramos.
Usando sudo -l vemos que el usuario firsthacking tiene permisos de ejecutar nano como root, así que procedemos a usar searchbins para ver como aprovecharnos del binario.
Lo que aremos es irnos a /tmp y ejecutar nano como el usuario firsthacking.
Entramos en nano presionamos Ctrl + R, Ctrl + X pegamos el comando reset; sh 1>&0 2>&0, esperamos unos segundos, escribimos bash y ahora somos el usuario firsthacking, hacemos Ctrl + L para limpiar la pantalla y volvemos a ejecutar sudo -l.
Vemos que tenemos permiso de ejecutar docker como root sin contraseña, así que vemos con searchbins como aprovecharnos de esto.
Lo que hace este comando es montar todos los directorios de la maquina victima, en una imagen de docker, una de las mas comunes y livianas, es alpine aunque si vemos que imágenes existen el la maquina victima vemos un mensaje.
Ademas de este mensaje tambien vemos que el demonio de docker no esta corriendo.
Si nos vamos a nuestra home vemos lo siguiente.
Ahora vemos por que al ejecutar docker nos salia ese mensaje, ya que dentro del .bashrc tenemos una función que nos manda ese mensaje.
En este punto puede ser que tengamos que emplear Port knocking.
Lo que aremos es ir a nuestra terminal y ejecutar el siguiente comando:
Verificamos si de verdad se activo el docker.
Genial, ahora si podemos empezar a escalar privilegios con docker.
Aunque ya somos root, estamos dentro del contenedor donde montamos el sistema de la maquina victima, si ejecutamos hostname -I vemos que no es la ip de la maquina victima.
Lo que aremos es convertir la bash en SUID para poder ejecutarlo con máximos privilegios.
Salimos del contenedor y estando en la maquina victima, ejecutamos bash -p y seremos root, con esto podemos dar por terminada esta maquina.
Last updated