CTF 8dot8 y Medium
Mude el contenido del blog a medium. Una mierda tumblr 😹. Esta shit tiene hasta emoticons 🤙. Al grano. Estuve participando con la crew y nos fue bacán. Acá el writeup del WEB02.
Te presentan un login con un imagen que indica como se realiza el inicio de sesión. En la imagen, un bloqueo según una expresión regular: si el nombre de usuario contiene espacios, “union”, “or”,”and” manda un “Oops” 🥀.
Cuando realizabas un login con comillitas, MySQL lloraba 😢 tirando errores ❌ que indicaban una mala sintaxis 🐛. Ya concluiamos que sólo la variable del username tendría que ser la inyectable puesto que password se le aplicaba md5, por lo tanto no tenía sentido que fuese hax0reable.
Luego de cuestionar hasta la documentación 😂, encontramos un blind reemplazando:|| en vez de OR, /**/ en vez de espacios, con la intención de evadir ese preg_match 🔪.
Encontramos un punto de comparación para una sentancia correcta:
Y para una comparación incorrecta:
Y lo otro fue una despejada a lo Kalule Melendez, se identificó el largo de la columna que ya conocemos (name), y luego, letra x letra identificamos el nombre del primer usuario.
Y luego con substring y calculando el ascii de estas 6 letras:
El usuario era “Ademir” 🇧🇷. Luego se podía aplicar la misma lógica para la columna password, pero la palabra password, lleva OR, así que mal 💩. Luego de darle vuelta a como bypassear ese “ignore case” del preg_rematch, dejé corriendo un ataque de fuerza bruta con el top 10.000 de passwords más conocidas.
Al cuarto intento, se mostró un largo en la respuesta del bruteforce distinto al resto. Intentamos iniciar sesión con Ademir/1234 y tiro la flag.