Comandi importanti di SQLMap

Lo strumento SQLMap può essere trovato nella cassetta degli attrezzi di ogni penetration tester. È uno degli strumenti più popolari e potenti quando si tratta di sfruttare la vulnerabilità di SQL injection, che è in cima alla lista OWASP delle Top 10 Vulnerabilità. Dalla conferma della vulnerabilità dell’iniezione SQL all’estrazione del nome del database, delle tabelle, delle colonne e all’ottenimento di un sistema completo, può essere utilizzato per molteplici scopi.

In questo articolo, vedremo diversi tipi di comandi SQLMap che possono tornare utili durante lo sfruttamento di diversi scenari di iniezione SQL.

SQLMap può essere scaricato dai seguenti link:

Windows

Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Per scopi demo, sto usando questa macchina da Vulnhub.

Guardiamo l’uso di base dello strumento SQLMap su richieste GET e POST.

sqlmap -u http://site-to-test.com/test.php?id=1 -p id

sqlmap -u http://site-to-test.com/test.php?id=1*

-u: URL da analizzare

-p: parametro da analizzare

*: Parametro da scansionare (se lo switch -p non è fornito)

Richiesta POST

Possiamo fornire i dati passati nel corpo della richiesta POST da scansionare con lo strumento SQLMap.

sqlmap -u http://site-to-test.com/admin/index.php -data=”user=admin&password=admin” -p user

-data = dati POST

Un altro modo è copiare la richiesta Burp in un file e passarla a SQLMap.

sqlmap -r <path to the request file>

Andiamo un po’ avanti per capire altre opzioni fornite dallo strumento SQLMap.

Scansione delle pagine di login POST

Le pagine di login post sono autorizzate dall’intestazione cookie, che viene passata nell’intestazione HTTP di una richiesta GET/POST. Per scansionare le pagine di post login, dobbiamo fornire il cookie valido a SQLMap.

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=”cookie value”

/admin/index.php?id=1 è una pagina di post login.

Similmente, molte delle pagine sono protette dall’intestazione User-Agent o Referrer. Lo stesso può essere incluso nel comando:

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php

Inoltre, possiamo randomizzare l’header user-agent usando l’opzione -random-agent.

CRAWL

Crawl è un’opzione importante che permette allo strumento SQLMap di scansionare il sito web, partendo dalla posizione principale. La profondità di scansione può essere definita nel comando

sqlmap -u http://192.168.202.160/ -crawl=1

-crawl: Definisce una profondità per il crawl. (Esempio: definire 2 permetterà allo strumento di strisciare fino a due directory)

Se vogliamo escludere qualsiasi pagina dallo scopo del crawler possiamo definire con -crawl-exclude. Questa è un’opzione utile quando stiamo scansionando una pagina di login post.

sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=”valore del cookie” -crawl-exclude=”logout”

Questo comando scansionerà il sito web fino a tre directory ed escluderà qualsiasi URL dove è presente la parola chiave “logout”.

Come potete vedere qui sotto, SQLMap ha scansionato il sito web ma ha escluso l’URL di logout.

Eseguiamo lo stesso comando senza l’opzione -crawl-exclude:

Come si vede qui sotto quando -crawl-exclude non è definito, SQLMap ha scansionato l’URL di logout. Questo permetterebbe di invalidare la sessione esistente (a causa del logout) e non completare la scansione.

SQLMap attraverso il proxy

Possiamo definire i dettagli di un proxy da dove facciamo passare la richiesta. Se vogliamo passare la richiesta attraverso uno strumento proxy come Burp, avviate Burp Suite e configuratelo per essere eseguito su localhost sulla porta 8080. Ora usate il seguente comando SQLMap:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″

Ora, pensate a uno scenario in cui le parole chiave sqlinjection come OrderBy e Union sono nella lista nera del server. Possiamo aggirare questo tipo di implementazioni usando la tecnica del camel casing. Useremo SQLMap per inviare il traffico a Burp e useremo la funzione “match and replace” di Burp per aggirare la restrizione di cui sopra.

La funzione Match and Replace può essere trovata sotto la scheda “Options”, sotto la scheda “Proxy” di Burp.

Questo controllerà se la richiesta ha una parola chiave come “union”. Se sì, sostituirla con “UnIoN.”

In uno scenario in cui l’applicazione è accessibile solo attraverso un server proxy, lo stesso può essere definito usando il seguente comando:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″ -proxy-cred=username:password

Batch

Il comando batch è usato per sessioni non interattive. Quando stiamo cercando di scansionare qualcosa, SQLMap può chiederci di fornire degli input durante la scansione: per esempio, mentre si usa la funzione crawl, lo strumento chiede all’utente se vuole scansionare l’URL identificato. Quando -batch è definito nel comando, lo strumento usa un valore predefinito per procedere senza chiedere all’utente.

Form

Un URL di pagina con un campo form (ad esempio la pagina di login) può essere fornito insieme all’opzione -form per analizzare la pagina e guidare l’utente a testare i campi identificati.

Ora le pagine con un gran numero di campi modulo possono essere testate efficacemente usando l’opzione -form e -batch insieme. Questo analizzerà la pagina e controllerà i campi del modulo e fornirà automaticamente l’input per conto dell’utente.

Se l’intera applicazione deve essere analizzata, si può usare l’opzione crawl insieme a form e switch.

Threads

L’opzione threads permette all’utente di definire il numero di richieste concorrenti da inviare allo strumento SQLMap. Questo ridurrebbe il tempo complessivo dei test. Questo non dovrebbe essere tenuto ad un valore più alto, poiché potrebbe avere un impatto sulla precisione del risultato.

Risk e Level

Risk permette il tipo di payloads usato dallo strumento. Per impostazione predefinita, utilizza il valore 1 e può essere configurato fino al livello 3. Il livello 3, essendo il massimo, include alcune pesanti query SQL.

Il livello definisce il numero di controlli/payload da eseguire. Il valore varia da 1 a 5. 5, essendo il massimo, include un gran numero di payload nella scansione.

Si raccomanda di aumentare il rischio e il livello se SQLMap non è in grado di rilevare l’iniezione nelle impostazioni predefinite.

Verbose

Nel caso in cui vogliamo vedere il payload inviato dallo strumento, possiamo usare l’opzione verbose. I valori vanno da 1 a 6.

Database Enumeration

Come sappiamo SQLMap è principalmente usato per lo sfruttamento di SQL injection, vediamo alcuni dei comandi per enumerare il database attraverso un’applicazione vulnerabile a SQL injection.

1. -dbs: Questa opzione è usata per enumerare il database.

2. Ora abbiamo il nome del database. Per estrarre la tabella del database “photoblog”, esegui il seguente comando:

3. Per estrarre i dettagli delle colonne dalla tabella “utenti”, esegui il seguente comando:

4. Per scaricare i dati della tabella “utenti”, usa il comando -dump:

5. Per identificare l’utente attuale del database:

6. Per identificare il nome attuale del database:

7. Per identificare i privilegi, i ruoli, e se l’attuale utente del DB è l’amministratore del DB:

Bypassing WAF Using Tamper Script

Molte volte, ci imbattiamo in uno scenario dove l’applicazione è tenuta dietro il web application firewall (WAF). Per controllare se il sito è protetto dal WAF, possiamo usare le seguenti opzioni:

-identificare-waf

Una volta identificato il WAF, possiamo usare lo script tamper per attaccare le applicazioni protette dal WAF. Lo script tamper può modificare la richiesta per sfuggire al rilevamento del WAF. Gli script si trovano sotto la directory /usr/share/sqlmap/tamper/.

Eseguire i comandi di sistema

Possiamo eseguire i comandi di livello OS/sistema se l’utente corrente del database ha i diritti di DBA. Possiamo usare le seguenti opzioni:

Per un server Linux:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell

Per un server Windows:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>

Esecuzione di query SQL

Possiamo eseguire l’istruzione SQL sul database eseguendo i seguenti comandi:

sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell

Altre opzioni

Alcune altre opzioni includono:

1. Scansione di una pagina protetta da autenticazione HTTP come Basic, NTLM e Digest:

sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred “admin:admin”

2. Scansione di una pagina protetta da un’autenticazione basata su chiave

sqlmap -u http://example.com/admin.aspx -auth-file=<path to PEM certificate or private key file>

3. Per randomizzare gli IP attaccanti (questo può aiutare in casi come il rilevamento WAF, o quando nascondere la fonte dell’attacco aumenterebbe la difficoltà di rintracciare l’IP).

Per usare la rete anonima Tor di default:

sqlmap -u http://example.com/admin.aspx -tor

Per definire una porta Tor:

sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxy port>

4. Se è richiesto un ritardo tra ogni richiesta HTTP:

sqlmap -u http://example.com/admin.aspx -delay=1 #1 secondo di ritardo

5. Se una pagina è protetta da un token CSRF, possiamo includere lo stesso nel comando:

sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>

Second-Order SQL injection: In questo tipo di iniezione SQL, il payload SQL viene memorizzato nel database e recuperato in seguito quando si accede a una pagina diversa. Forniamo un URL, che sarà richiesto dallo strumento SQLMap dopo ogni iniezione. Possiamo istruire lo strumento SQLMap a testare questa iniezione utilizzando i seguenti comandi:

sqlmap -r /root/Desktop/Burp.txt -second-order “http://target/vulnerbalepage.php”

Il file Burp.txt contiene la richiesta su cui deve essere eseguita l’iniezione.

-secondo ordine “URL” contiene l’URL a cui SQLMap accederà dopo ogni iniezione.

Conclusione

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.