Race, DockerLabs
Herramientas y recursos
En este reto de DockerLabs practicamos.
| Tecnicas | Herramientas |
|---|---|
| scan de puertos | nmap |
| captura de peticiones | caido |
| scripting | bash |
Reconocimiento y enumeracion
Segun las indicadciones tenemos tres retos de race condition con distintas dificultades
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
Como muestra el reporte tenemos el el 22 ssh y el 5000 con un werkzeug , entramos a la web y vemos lo siguiente.
Lo primero me abro el caido para capturar el endpoint encargado de mandar la solicitud.
Vemos el endpoint y que no manda ningun json ni header , asi que me voy a la terminal y pruebo lo siguente:
1
for i in {1..50}; do (curl -s -X POST http://172.17.0.2:5000/click | jq -c '.') & done; wait
En la terminal veo
y al refrescar la web obtengo un user y pass
Seguimos el enlace y nos logueamos, me voy a ver de la peticion capturada por caido este nuevo endpoint en /level-2/redeem asi que voy a hacer lo propio añadir el endpoint los headers y los datos que espera en json.
Como decia arriba y viendo los datos en caido armo el comando igual que antes pero con los campos necesarios.
1
for i in {1..50}; do (curl -s -X POST "http://172.17.0.2:5000/level-2/redeem" -H "Authorization: Basic Y29uZGl0aW9uMTpyYWNlMQ==" -H "Content-Type: application/json" -d '{"code":"TRIAL-10"}' | jq -c '.') & done; wait
Y en la web al refrescar
tenemos los datos para el siguiente.
vamos a probar lo mismo cion solo modificar los ajustes valores al comando anterior. buscamos la peticion correspondiente en caido.
- La ruta
- El Authorization
- La data que enviamos antes era un string y ahora espera un entero.
1
for i in {1..50}; do (curl -s -X POST "http://172.17.0.2:5000/level-3/buy" -H "Authorization: Basic cmFjZTpjb25kaXRpb24=" -H "Content-Type: application/json" -d '{"amount": 1}' | jq -c '.') & done; wait
Igual que las otras dos funciono.
Con las credenciales que nos da accedemos por ssh.
Error en pruebas al lanzar comando y enviar un string cuando werkzeug espera una cadena se rompe la pateicion y devuelve lo que es el identificador de session del debugger, aunque a veces aparece sin mas en codigo de algunas web.(la verdad desconozco si sirve para algo)
Infiltracion y escalada
Sin mas demosra nos logueamos con ssh , vemos que han dejado un readme con una especie de instrucciones de lo que hace ell script y lo que podemos leer.
Si miramos en log sin hacer nada es decis sin colocar nada en el directorio de trabajo del script ~/backup_me/ , nos encontramos con esto en el tmp/backup_output.txt
Por otro lado si revisamos el codigo del exploit vemos lo de abajo que se crea un enlace simbolico
viendo lo visto voy a crear a mano un symlink hacia /etc/shadow
1
ln -s /etc/shadow shadow
De esta forma podriamos leer archivos a los cuales no tenemos acceso y conocemos su ubicacion pero de vuelta al problema el exploit hacia referencia a una ruta /root/flag.txt asi que como esta todo decido ejecutar el exploit.
Obtenemos la pass de root que estaba escondida en su home.
Hasta aqui esta maquinita que no se si la he atacado en la parte web como se esperaba.


















Comments powered by Disqus.