Este es otro reto de los medio-fáciles, pues también valía sólo 100 puntos.
El enunciado decía:
So apparently robots, despite their lack of hormones, still have an underlying desire to mate. We stumbled upon a robot dating site, RoboDate. Hack it for us!
La URL del reto es: http://23.20.214.191/59ec1e5173d9cb794f1c29bc333f7327/ y tras acceder, si editamos el código fuente aparecía:
<!-- <form action="/59ec1e5173d9cb794f1c29bc333f7327/login.py" method="POST"> <lable for="username">Username:</label> <input id="username" name="username" placeholder="Username"> <label for="status">Dating status:</label> <input id="status" name="status" placeholder="Single"> <input value="Login" type="submit"> </form> -->
Con lo cual, intentamos cargar la página de login pasando como parámetro los campos username y status:
http://23.20.214.191/59ec1e5173d9cb794f1c29bc333f7327/login.py?username=pepe&status=1
Esto nos redirigía a otra página:
http://23.20.214.191/59ec1e5173d9cb794f1c29bc333f7327/frontpage.py?token=13074cdda7654e75690573228d2cf91881f471a2ebc0c16c27250089e088a19c
De nuevo, editando el código fuente veíamos algo así:
<!-- debug info: user_data = pepe|1|user key = Only admins can see the key. -->
Tras varias pruebas intentando crear un tercer parámetro que indicara que somos admin, y de probar diferentes inyecciones, tratamos de inyectar un pipe:
http://23.20.214.191/59ec1e5173d9cb794f1c29bc333f7327/login.py?username=pepe&status=1|admin
Pero el resultado era:
<!-- debug info: user_data = pepe|1\|admin|user key = Only admins can see the key. -->
Lo curioso era que si cargabas la dirección del token directamente, también te mostraba esos resultados y, es imposible que dado un token así pueda obtener el username y el status que corresponde. Así que probamos a modificar los valores del token y, efectivamente, según lo que cambiáramos, podíamos alterar los datos.
Lo primero que se nos ocurrió fue cambiar la palabra user por admin:
Los valores a cambiar:
5155572fa13744________0831012355dfdae874c27fdcea73913a7731e6c1fc
Resultado:
5155572fa1374497319ce20831012355dfdae874c27fdcea73913a7731e6c1fc
Y así obteníamos: admi … pero no hubo forma de conseguir la n
<!-- debug info: user_data = pepe|1|admi key = Only admins can see the key. -->
De manera que probamos con root, que tiene la misma longitud que user:
5155572fa13744843a9eff0831012355dfdae874c27fdcea73913a7731e6c1fc
Pero tampoco hubo suerte.
<!-- debug info: user_data = pepe|1|root key = Only admins can see the key. -->
Y tras pensar un poco, recordamos que si poníamos status=1|admin nos generaba un escape en el pipe, pero luego podríamos probar a modificar el token para anular ese escape:
Metemos como parametro: status=1|admin
083a7fb3b87a71290e663aca723f092cd4c4177c898ff2eeb609c5bc74d2dd7be63b18216638f5262602b04d99e636a5
<!-- debug info: user_data = pepe|1\|admin|user key = Only admins can see the key. -->
Y modificando el token quitamos la \
083a7fb3b87a70290e663aca723f092cd4c4177c898ff2eeb609c5bc74d2dd7be63b18216638f5262602b04d99e636a5
<!-- debug info: user_data = pepe|1]|admin|user key = 2012-04-25_14:46:24.29582+05:27@2012%127.0.0.2_IS_BEST_KEY -->
Everyone loves what you guys are usually up too. This type of clever work and coverage! Keep up the very good works guys I’ve included you guys to our blogroll.