OverTheWire - Natas 13 -> 14 (sin navegador)
November 2022
Información
Las contraseñas cambian cada cierto tiempo, existe la posibilidad de que esta contraseña ya no sea válida
Username: natas14
Password: qPazSJBmrmU7UQJv17MHk1PGC4DxZMEP
URL: http://natas14.natas.labs.overthewire.org
Solución
Abrimos Postman, pegamos la URL e ingresamos nuestras credenciales.
Al enviar la petición vemos en la respuesta un formulario y un link al código fuente de la aplicación.
Agregamos la ruta del archivo a la URL y enviamos la petición, al recibir la respuesta vemos un montón de letras que se hacen difícil de leer, hacemos click en la pestaña Preview para ver todo de una manera más cómoda.
Leyendo un poco el funcionamiento del sistema de inicio de sesión observamos que se realiza una Query SQL. El problema con esta query es el hecho de que agrega directamente nuestro input a la query con .
, no se realiza ningún tipo de filtro y por lo tanto podemos romper la query y baipasear el inicio de sesión.
Otra cosa interesante que vemos es este if, nos dice que si agregamos el parámetro debug
con el método GET podremos ver cómo se ejecuta la query en el servidor.
vamos a la pestaña Params y agregamos debug, username y password.
Observamos cómo se ejecuta la query en el servidor.
Probamos agregando una comilla doble a ver si se rompe la query.
# Datos
username = admin"
password = 123
# Query resultante
SELECT * from users where username="admin" " and password="123"
La respuesta nos confirma que rompimos la query.
Si comentamos todo lo que sigue ya no deberíamos tener errores.
# Datos
username = admin" -- -
password = 123
# Query resultante
SELECT * from users where username="admin"
Y la respuesta no nos indica errores pero aún no tenemos acceso a la contraseña. Esto es porque para poder iniciar sesión la query debe resultar True y si existiera un usuario admin probablemente la query resulte True pero no es el caso.
Podriamos probar con distintos nombres de usuario, pero lo más seguro es que no exista ningún usuario en la base de datos de la aplicación.
Lo que podemos hacer es forzar a que la query resulte en True. Si agregamos OR 1=1
la query resultará True porque 1=1
siempre será verdadero.
# Datos
username = admin" OR 1=1-- -
password = 123
# Query resultante
SELECT * from users where username="natas14" OR 1=1
Contraseña
TTkaI7AWG4iDERztBcEyKV7kRXH1EZRB