IP

Kamis, 14 Mei 2015

Dunia SQL Injection

SQL Injection merupakan teknik eksploitasi sebuah aplikasi web memakai data yang diberikan atau disisipkan dalam query SQL. Cara kerjanya dengan memasukkan query SQL atau perintah (command) sebagai input yang dimungkinkan melalui halaman web. Di mana halaman halaman web mengambil parameter dari user, lalu membuat query SQL ke dalam database. Salah satunta adalah pada halaman login user, di mana pada halaman web tersebut akan membuat query SQL ke database untuk memeriksa username dan password yang tepat.

Dengan demikian SQL Injection dapat pula dikatakan sebagai kegiatan menipu query dari database, sehingga seseorang dapat mengetahui dan mendapatkan informasi yang terdapat di sana. Menipu di sini adalah dalam bentuk suntikan, lebih tepatnya menyisipkan kode SQL tambahan ke dalam kode yang asli. Sehingga kemudian yang dieksekusi adalah perintah SQL Injection tersebut.

Sebagai contoh, coba Anda perhatikan halaman yang dipakai untuk melakukan submit data, misalnya pada halaman login. HTML kadang memakai perintah POST untuk mengirimkan parameter ke halaman ASP/PHP lainnya. Oleh sebab itulah,kita tidak dapat melihat parameter pada URL. Namun, kita masih bisa memeriksa source code HTML  dan mencari tag FORM dalam kode HTML.

Di sini saya akan membuat sebuah source code untuk melakukan login menggunakan PHP. Contoh seperti dibawah ini:

 <html>  
 <head>  
 <title>inject</title>  
 </head>  
 <body>  
 <center>  
 <h2>Login Admin</h2>  
 <br>  
 <form method="post">  
 Nama User <input type="text" name="nama">  
 <br>  
 Password <input type="password" name="password">  
 <br>  
 <input type="submit" name="submit" value="ENTER">  
 </form>  
 </center>  
 </body>  
 </html>  
 <?php  
 if ($submit or $nama) {  
 $konek=mysql_connect("localhost","root","root") or die  
 (mysql_error());  
 $db=mysql_select_db("db_adminx");  
 $sql="select count(1) as ada from tbluser where  
 nama=' " .$nama. " ' and password=md5(' "  
 .$password. " ')";  
 echo $sql. "<br>";  
 $query=mysql_query($sql) or die(mysql_error());  
 $result=mysql_fetch_array($query);  
 $jml=$result[ada];  
 mysql_close();  
 if ($jml>0) {  
 echo "Terimakasih telah memasuki halaman ini";  
 } else {  
 echo "Maaf, Username dan Password salah";  
 }  
 }  
 ?>  

Contoh source code halaman login


Dan ketikadibuka menggunakan browser, tampilannya seperti ini.

Tampilan halaman login
Sekarang, kita akan melihat source code dari halaman login yang ditampilkan pada browser tersebut.

Melihat source code halaman login
Maka, akan terlihat bahwa kode-kode untuk perintah SQL tidak ditampilkan. Begitu juga dengan kode PHP yang saya masukkan, yang muncul hanyalah kode HTML-nya saja.
Source code halaman login
Bayangkanapabila kode-kode PHP dan SQL bisa ditampilkan pada user, tentu saja semua orang bisa melihat melihat username, password database, nama database, nama tabel, dsb.

Jika kita perhatikan dengan seksama pada source code. Apa pun yang berada di antara <FORM> dan </FORM> memiliki parameter potensial yang bisa berguna untuk dieksploitasi. Ada banyak halaman web yang menerima input selain halaman login, seperti Search, Feedback, buku tamu, dsb. Namun apabila Anda tidak menemukan halaman yang menerima input, Anda bisa mencari halaman yang menggunakan ekstensi PHP, ASP, JSP, atau CGI. Khususnya untuk URL yang menerima parameter seperti:

http://namasitusweb.com/index.php?id=9

Atau:

http://namasitusweb.com/index.asp?id=99

Pada dasarnya ada beberapa type SQL Injection, yaitu:
  • Error Based SQL Injection  
       Yaitu memberi sebuah perintah ke database sehingga menampilkan pesan error.Dari pesan error tersebut diperoleh informasi yang bisa dimanfaatkan.
  • Union Based SQL Injection
       Sebuah metode perintah UNION untuk menggabungkan hasil dari dua atau lebih perintah SELECT menjadi sebuah hasil tunggal.
  • Blind SQL Injection
       Jenis ini tidak menampilkan pesan error dan tidak menampilkan data atau informasi yang ada, terkadang sedikit sulit untuk melakukan eksploitasi untuk type Blind SQL Injection, Hal ini karena prosesnya dengan memberi pertanyaan pada database berupa kondisi TRUE/FALSE dan apakah halaman yang ditampilkan benar atau tidak.

Dari sisi metode yang digunakan, pada Error Based SQL Injection dikelompokkan menjadi dua yaitu:

GET method

Inilah yang paling umum atau banyak digunakan untuk memasukkan perintah SQL Injection melalui URL sebuah situs web pada address bar, sehingga metode ini dikenal juga sebagai URL Based SQL Injection. Disebut metode GET kerena menggunakan parameter GET untuk memasukkan atau menyuntikan perintah.

POST method

Metode POST berasal dari variable yang ada pada form, contohnya seperti form login atau form pencarian. Cara untuk mengidentifikasinya juga sama, dengan memberikan karakter ' atau - atau karakter ascii yang bisa menghasilkan error. Hal ini yang sering digunakan untuk mem-bypass sebuah halaman login tanpa harus mengetahui username atau password yang digunakan.