Progettazione… Programmazione… Soluzione…
Hacking: SQLInjection con SqlMap
Molte volte ci addentriamo nel mondo del Web, nella creazione di un proprio spazio personale che piano piano si evolve, ma non sempre adottiamo le giuste precauzioni ed i giusti accorgimenti per quanto riguarda la sicurezza. In questi casi, ci viene in aiuto sqlmap, un ottimo tool per l’analisi delle vulnerabilità presenti in molte applicazioni web che fanno uso di database SQL.

Introduzione a SQLmap
SQLmap è in grado di automatizzare il processo di analisi di vulnerabilità o exploit ai quali sono soggetti tantissimi server web. SQLmap è scritto in Python, il che lo rende indipendente dal sistema operativo utilizzato. Per funzionare, richiede solo in interprete Python in versione maggiore o uguale alla 2.5. Ho già introdotto in precedenti articoli (Hacking: SQL Injection, Difesa contro l’SQL Injection) il concetto di SQLInjection, tutti i pericoli che ne derivano e come difendersi progettando bene la propria applicazione web; ora vediamo come SQLmap riesce nell’analisi di SQLInjection in modo automatico e preciso. SQLmap implementa tre tecniche per l’analisi di vulnerabilità per l’SQL Injection:
- Inferential blind SQL injection, also known as boolean based blind SQL injection: sqlmap appends to the affected parameter in the HTTP request, a syntatically valid SQL statement string containing a SELECT sub-statement, or any other SQL statement whose the user want to retrieve the output. For each HTTP response, by making a comparison based upon HTML page content hashes, or string matches, with the original request, the tool determines the output value of the statement character by character. The bisection algorithm implemented in sqlmap to perform this technique is able to fetch each output character with at maximum seven HTTP requests. This is sqlmap default SQL injection technique.
- UNION query (inband) SQL injection, also known as full UNION query SQL injection: sqlmap appends to the affected parameter in the HTTP request, a syntatically valid SQL statement string starting with a UNION ALL SELECT. This techique is useful if the web application page passes the output of the SELECT statement to a for cycle, or similar, so that each line of the query output is printed on the page content. sqlmap is also able to exploit partial (single entry) UNION query SQL injection vulnerabilities which occur when the output of the statement is not cycled in a for construct whereas only the first entry output is displayed. This technique is much faster if the target url is affected by because in a single HTTP response it returns the whole query output or a entry per each response within the page content. This SQL injection technique is an alternative to the first one.
- Batched (stacked) queries support, also known as multiple statements support: sqlmap tests if the web application supports stacked queries then, in case it does support, it appends to the affected parameter in the HTTP request, a semi-colon (;) followed by the SQL statement to be executed. This technique is useful to run SQL statements other than SELECT like, for instance, data definition or data manipulation statements possibly leading to file system read and write access and operating system command execution depending on the underlying back-end database management system and the session user privileges.
Uso di SQLmap
SQLmap è un tool molto potente quanto sofisticato. Il suo uso non è molto semplice ed immediato, ma vediamo di imparare ad usarlo con una guida passo passo. Ricordo che è possibile trovare un manuale molto completo sul sito ufficiale del progetto. Un primo sguardo all’uso del programma, può essere ottenuto con il comando python sqlmap.py -h da digitare nel proprio Terminale in Mac OS X o in una qualsiasi console di comando di un sistema operativo Linux o Windows. Questo comando restituisce una lista molto completa e dettagliata di tutti le opzioni di uso del programma.
Un’opzione molto valida è quella di ottenere un output del programma, analizzando i vari livelli di output. I livelli di verbosity (opzione -v) disponibili sono:
python sqlmap.py -u "http://172.16.213.131/sqlmap/mysql/get_int.php?id=1" -v 1
python sqlmap.py -u "http://172.16.213.131/sqlmap/mysql/get_int.php?id=1" -v 2
python sqlmap.py -u "http://172.16.213.131/sqlmap/mysql/get_int.php?id=1" -v 3
python sqlmap.py -u "http://172.16.213.131/sqlmap/mysql/get_int.php?id=1" -v 4
python sqlmap.py -u "http://172.16.213.131/sqlmap/mysql/get_int.php?id=1" -v 5
L’opzione -u specificata nel comando precedente è obbligatoria e serve per specificare l’indirizzo da analizzare. Alternativamente, può essere usata l’opzione –url.
python sqlmap.py --url "http://172.16.213.131/sqlmap/mysql/get_int.php?id=1"
Un’altra modalità di analisi, che non includa direttamente l’indirizzo web del sito da analizzare, è quella di specificare un file contenente una richiesta HTTP valida, che quindi SQLmap effettuerà analizzando i risultati (opzione -r). In questo caso, deve esistere un file contenente la richiesta HTTP in questo modo:
HTTP/1.1 Host: 172.16.213.131
User-Agent: Mozilla/4.0
id=1
e quindi l’applicazione SQLmap dovrà essere eseguita nel modo seguente:
python sqlmap.py -r request.txt
Una funzionalità ancora più interessante, consiste nell’analizzare un intero sito web, alla ricerca di tutte le possibili vulnerabilità. Questa feature è possibile grazie all’appoggio di Google, che è in grado di restituire risultati relativi ad un singolo dominio specificando ulteriori opzioni (opzione -g del programma SQLmap). Il comando diventa quindi:
python sqlmap.py -g "site:yourdomain.com ext:php" -v 1
In questo caso SQLmap analizzerà i primi 100 risultati di Google relativi al dominio specificato, alla ricerca di risultati che contengano al loro interno richieste GET, in modo da poter verificare la presenza di possibili vulnerabilità.
SQLmap non è in grado di analizzare solo applicazioni web che fanno uso di richieste GET, ma anche quei servizi che per maggiore protezione, fanno uso di richieste POST. In questo caso entrano in gioco le opzioni –method e –data di SQLmap:
python sqlmap.py -u "http://test-site.it/test-page.php" --method POST --data "id=1"
Queste sono solo alcune situazioni di utilizzo di SQLmap, è possibile trovarne altre sul manuale ufficiale presente sul sito web del programma. Di seguito uno dei video ufficiali per l’uso del programma disponibili anch’essi sul sito web del programma:
| Stampa l'articolo | Questo articolo è stato pubblicato da nerthase il 30 marzo 2010 alle 22:19, ed è archiviato come Guide, Informatica & co, PHP & MySql, Tutto il resto. Puoi seguire i commenti a questo post attraverso RSS 2.0. Puoi pubblicare un commento o segnalare un trackback dal tuo sito. |




