Post

Race, DockerLabs

portada

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

reporte

Como muestra el reporte tenemos el el 22 ssh y el 5000 con un werkzeug , entramos a la web y vemos lo siguiente.

scope

Lo primero me abro el caido para capturar el endpoint encargado de mandar la solicitud.

peticion1

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

for

y al refrescar la web obtengo un user y pass

1ok

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.

nivel2

peticion2

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

for2

Y en la web al refrescar

2ok

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.

peticion3

  • 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.

for3

nivel3

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) error

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.

readma

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

logenblanco

Por otro lado si revisamos el codigo del exploit vemos lo de abajo que se crea un enlace simbolico

exploit

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.

rootlog

Obtenemos la pass de root que estaba escondida en su home.

root

Hasta aqui esta maquinita que no se si la he atacado en la parte web como se esperaba.

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

Comments powered by Disqus.