💉SQLMap - HTTP Request
SQLMap tiene numerosas opciones y flags que se pueden utilizar para configurar correctamente la solicitud (HTTP) antes de su uso.
En muchos casos, errores simples como olvidar proporcionar valores de cookies adecuados, complicar demasiado la configuración con una línea de comando larga o una declaración incorrecta de datos POST formateados impedirán la detección y explotación correctas de la posible vulnerabilidad de SQLi.
Comandos de curl
Una de las mejores y más sencillas formas de configurar correctamente una solicitud SQLMap contra el objetivo específico (es decir, una solicitud web con parámetros dentro) es utilizar la función Copy as cURL dentro del panel Red (Monitor) dentro de las herramientas para desarrolladores de Chrome, Edge o Firefox:

Al pegar el contenido del portapapeles ( Ctrl-V) en la línea de comando y cambiar el comando original curl a sqlmap, podemos usar SQLMap con el mismo comando:
Al proporcionar datos para realizar pruebas a SQLMap, debe haber un valor de parámetro que pueda evaluarse para detectar vulnerabilidades de SQLi u opciones/interruptores especializados para la búsqueda automática de parámetros (por ejemplo --craw, , --forms o -g).
Solicitudes GET/POST
En el escenario más común, los parámetros GET se proporcionan con el uso de la opción -u/ --url, como en el ejemplo anterior. En cuanto a los datos de prueba , se puede utilizar el indicador POST, de la siguiente manera: --data
Ejecución de SQLMap en una solicitud HTTP
En tales casos, se probarán los parámetros POST y uid para detectar vulnerabilidades de SQLi. Por ejemplo, si tenemos una indicación clara de que el parámetro es propenso a una vulnerabilidad de SQLi, podríamos limitar las pruebas a solo este parámetro utilizando . De lo contrario, podríamos marcarlo dentro de los datos proporcionados con el uso de un marcador especial de la siguiente manera: nameuid-p uid*
Solicitudes HTTP completas
Si necesitamos especificar una solicitud HTTP compleja con muchos valores de encabezado diferentes y un cuerpo POST alargado, podemos usar el indicador -r. Con esta opción, SQLMap recibe el "archivo de solicitud", que contiene toda la solicitud HTTP dentro de un único archivo de texto. En un escenario común, dicha solicitud HTTP se puede capturar desde una aplicación proxy especializada (por ejemplo, Burp) y escribir en el archivo de solicitud, de la siguiente manera:

Un ejemplo de una solicitud HTTP capturada con Burp se vería así:
Podemos copiar manualmente la solicitud HTTP desde dentro Burp y escribirla en un archivo, o podemos hacer click derecho en la solicitud en Burp y elegir Copy to file. Otra forma de capturar la solicitud HTTP completa sería mediante el navegador, como se mencionó anteriormente en la sección, y elegir la opción Copy> Copy Request Headers, y luego pegar la solicitud en un archivo.
Para ejecutar SQLMap con un archivo de solicitud HTTP, utilizamos el indicador -r, de la siguiente manera:
Solicitudes SQLMap personalizadas
Si quisiéramos crear solicitudes complicadas manualmente, existen numerosos modificadores y opciones para ajustar SQLMap.
Por ejemplo, si existe el requisito de especificar el valor de la cookie (de sesión), PHPSESSID=ab4530f4a7d10448457fa8b0eadac29c con la opción --cookie se utilizaría de la siguiente manera:
El mismo efecto se puede lograr con el uso de la opción -H/--header:
Podemos aplicar lo mismo a opciones como --host, --referer, y -A/--user-agent, que se utilizan para especificar los mismos valores de encabezados HTTP.
Además, hay un interruptor --random-agent diseñado para seleccionar aleatoriamente un valor User-agent de encabezado de la base de datos incluida de valores de navegador habituales. Este es un interruptor importante que hay que recordar, ya que cada vez más soluciones de protección descartan automáticamente todo el tráfico HTTP que contenga el valor User-agent de SQLMap predeterminado reconocible (por ejemplo, User-agent: sqlmap/1.4.9.12#dev (http://sqlmap.org)). Alternativamente, el interruptor --mobile se puede utilizar para imitar el teléfono inteligente utilizando ese mismo valor de encabezado.
Si bien SQLMap, de manera predeterminada, solo se dirige a los parámetros HTTP, es posible probar los encabezados para detectar la vulnerabilidad de SQLi. La forma más fácil es especificar la marca de inyección "personalizada" después del valor del encabezado (por ejemplo, --cookie="id=1*"). El mismo principio se aplica a cualquier otra parte de la solicitud.
Además, si quisiéramos especificar un método HTTP alternativo, distinto de GETy POST(por ejemplo, PUT), podemos utilizar la opción --method, de la siguiente manera:
Solicitudes HTTP personalizadas
Además del estilo POST de cuerpo de datos de formulario más común (por ejemplo, id=1), SQLMap también admite solicitudes HTTP con formato JSON (por ejemplo {"id":1}, ) y XML (por ejemplo, ).<element><id>1</id></element>
El soporte para estos formatos se implementa de manera "relajada"; por lo tanto, no hay restricciones estrictas sobre cómo se almacenan los valores de los parámetros en el interior. En caso de que el cuerpo POST sea relativamente simple y corto, la opción --data será suficiente.
Sin embargo, en el caso de un cuerpo POST complejo o largo, podemos volver a utilizar la opción -r:
Ejercicio

Pregunta 1
¿Cuál es el contenido de la tabla flag2? (Case #2)

Capturamos la petición con Burpsuite, Click derecho > Copy to file.
Enumerar los nombres de las tablas:

Obtener las columnas de la tabla flag2:

Consulta de la columna content:

Pregunta 2
¿Cuál es el contenido de la tabla flag3? (Case #3)

Vamos a usar otra técnica para hacer un dump de la base de datos, y indicarle el parámetro inyectable 'id=1*':
Nota: Importante introducir el asterisco para indicarle el parámetro inyectable
Fijaros que locura, que SQLmap nos hace un dump de los hashes de todos los usuarios de la base de datos, las contraseñas en plano crackeadas, emails, teléfonos, direcciones... y al final encontramos la flag! 🏆
Pregunta 3
¿Cuál es el contenido de la tabla flag4? (Case #4)

Capturamos la petición HTTP con BurpSuite:
Última actualización
¿Te fue útil?
