Si pensabas que me había olvidado de la parte manual sobre cómo explotar inyecciones SQL a mano, según lees esto, te estarás dando cuenta que no es así xD. De hecho, vamos con la parte número cuatro de esta "saga".
Te recuerdo que puedes leer aquí la entrada III, o si quieres comenzar de cero, puedes ver esta serie de entradas sobre el tema.
Bueno, como dije en la entrada anterior, comenzamos con la parte de inyección a ciegas y, recordemos que estamos resolviendo los labs de Portswigger que puedes ver desde aquí.
Ya en el reto, nos dice que la aplicación usa una cookie de seguimiento para el análisis y que realiza una consulta SQL que contiene el valor de la cookie enviada.
También nos indica que los resultados de la consulta SQL no se devuelven y que no se muestran mensajes de error. Pero dice que la aplicación incluye un mensaje de "Bienvenido de nuevo" en la página si la consulta devuelve filas.
Y como siempre, hay que sacar el usuario y contraseña y hacer login. Vamos a ello. Esta vez hacemos ya uso de Burp para lograr el reto.
Lo primero que vemos al parar la petición con Burp es la cookie que comenta el lab.

Si nos fijamos en la web, aparece el cartel de "Welcome back!", y si probamos a borrar la cookie, desaparece.
Comenzamos con la inyección a partir de booleanos, es decir, borramos la cookie y le ponemos el clásico:
'+or+1=1--
En este caso, los signos de + son los caracteres de espacio urlencodeados.
Vale, pues si miramos la respuesta en Burp, vemos que aparece de nuevo el mensaje de bienvenida.

Y como ya todos sabemos (o deberíamos), si le ponemos un:
'+or+1=2--
El mensaje desaparece. Por lo tanto ya sabemos que la inyección existe.
Vamos un poco más allá. Empecemos preguntando si existe el usuario administrator (que ya sabemos que si) en la tabla users, con la siguiente consulta.
'+union+select+'a'a+from+users+where+username='administrator'--

Y como podemos ver la imagen anterior, así es.
Lo que necesitamos es la contraseña de ese usuario, así que, vamos a por eso.
Ahora la inyección va dirigida a saber el número de dígitos que tiene. Como viene siendo habitual, seguro que tiene más de 12. De manera que la nueva inyección podría ser así:
'+union+select+'a'a+from+users+where+username='administrator'+and+length(password)>12--

Si le pongo lo mismo, pero cambio la longitud por 22, ya no aparece el mensaje, lo que indica que la contraseña tiene más de 12 y menos de 22. Vamos a pasarlo por el intruder para hacerlo de una vez, que aunque esto sea "manopla style", no tenemos todo el día xD.

En el intruder, el mayor que, lo cambiamos por un igual y lo configuramos de la siguiente forma:

Ahora filtramos por el resultado que queremos, que es el mensaje de bienvenido...

Y nos queda una única petición. Sí, podemos mirar por la longitud, pero imaginad que en lugar de 10 peticiones, hay 500, de esta forma es mucho más rápido.

Como vemos en la imagen siguiente, en el payload nos marca el número 20, lo que indica que la contraseña tiene esos caracteres.

A continuación le vamos a preguntar si el primer carácter de la contraseña es una 'a'. Lo hacemos así:

Ahora vamos a la parte de payloads, y lo configuramos de la siguiente manera:

En la lista, le ponemos caracteres de la 'a' a la 'z' y del '0' al '9'. De esta forma irá probando todas y nos devolverá las que en la respuesta tenga un "welcome back", aunque esta vez lo haremos con grep.

Y al terminar, ya tenemos el primer carácter de la contraseña, que es una 'k'

Ahora tendríamos que repetir esto 19 veces más para sacar todos los caracteres, modificando cada vez el payload. Como eso es una locura y nada práctico, vamos a ver otro tipo de ataque dentro del intruder, es el "cluster bomb".

Usamos ese porque ahora necesitamos 2 comodines, por lo tanto no podríamos hacerlo con el sniper de forma automática. En el payload 1 ponemos números, indicando que vaya del 1 al 20 y de 1 en 1.

En el payload 2, le decimos que use una lista como antes, de la 'a' a la 'z' y del '0' al '9'.

Y ya tendríamos los 20 caracteres de la contraseña.

Lo ordenamos un poco, y ahora ya, sacamos la contraseña. La verdad es que desconozco el método de "exportar" esto de alguna forma para evitar tener que copiar los caracteres a mano, pero seguro que hay alguna (ya preguntaré).

Una vez que nos logamos con administrator y kfdv1vygkg9t6uzqzou7 como contraseña (en mi caso, recuerda que cada vez varía), nos dice que hemos pasado un reto más.

Como esto cada vez es más complicado y más largo, solo voy a resolver uno en cada entrada.
Nos vemos en la siguiente.
0 comentarios:
Publicar un comentario