SQL merupakan singkatan dari Structured Query Language, adalah bahasa standar untuk mengakses dan memanipulasi database. SQL digunakan untuk mengelola sistem database seperti SQL server, Oracle, atau MySQL. Penggunaan SQL secara umum hampir serupa di semua sistem database, namun ada detail perbedaan tertentu yang khusus untuk setiap sistem.

Baca Juga :
Query SQL Terasa Lama? Implementasikan Index pada Database Anda!

Sekilas mengenai SQL Injection

SQL Injection adalah teknik yang menyalahgunakan celah keamanan yang ada pada lapisan basis data sebuah aplikasi. Celah ini terjadi ketika input dari pengguna tidak disaring secara benar, contohnya adalah kolom username yang seharusnya hanya diisi dengan huruf atau angka tapi malah diisi dengan karakter lain (seperti: – = ’) sehingga penyerang menggunakan celah tersebut dengan cara memasukan query dari SQL.

SQL Injection selalu menjadi teknik penyerangan terfavorit sebagian besar hacker dari tahun ke tahun, disamping karena semakin sulitnya hacker melakukan serangan melalui jaringan yang disebabkan oleh semakin canggihnya perangkat-perangkat pertahanan dari target (contoh: firewall, IDS, UTM, dll), SQL Injection juga sangat mudah dilakukan karena masih banyak web programmer yang masih kurang “aware” terhadapnya.

Sumber: http://www.hackmageddon.com/

Beberapa Tipe dari Serangan SQL Injection

Ada beberapa tipe umum dari SQL Injection, meskipun efek dari SQL Injection bervariasi berdasarkan aplikasi yang ditargetkan:

Otentikasi Bypass

Serangan ini memungkinkan penyerang untuk masuk ke dalam aplikasi dengan hak akses administratif, tanpa menggunakan username dan password yang valid.

Pencurian Informasi

Serangan ini memungkinkan penyerang untuk mendapatkan, baik secara langsung maupun tidak langsung informasi-informasi sensitif di dalam database.

Compromised Integritas Data

Serangan ini melibatkan perubahan isi database, seorang penyerang bisa menggunakan serangan ini untuk deface halaman web atau memasukkan konten berbahaya ke dalam halaman web.

Compromised Ketersediaan Data

Serangan ini memungkinkan penyerang untuk menghapus informasi dengan maksud untuk merusak atau menghapus log atau audit informasi dalam database.

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=’Ronaldo’ AND Password= ‘Butterfly’
Otentikasi yang dilakukan attacker:
SELECT count (*) FROM Users WHERE Username=’qwert’ or 1=1 -- ’ AND Password= ‘zxcvb’
Input yang masuk ke database seharusnya berisikan username (Ronaldo) dan password (Butterfly). Input yang dimasukkan attacker “qwert” 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.

Baca Juga :
Sesi Q&A tentang MySQL bersama Rois Korniawan

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!”)

Mempelajari SQL sangat penting untuk melakukan serangan SQL Injection, namun ada cukup banyak juga tools serangan otomatis untuk melakukan SQL Injection.

Baca Juga :
Tertarik Mengambil Training & Sertifikasi SQL Fundamentals? Yuk Pelajari Dahulu Apa Saja Materinya!

Sebagai web programmer kita harus mempelajari bagaimana cara melakukan secure programming, tidak hanya dalam web programming tetapi juga dalam berbagai bahasa programming lainnya.

PT. Inovasi Informatika Indonesia (i3) merupakan authorized partner EC-Council yang menyediakan berbagai jenis kelas training dan sertifikasi di bidang keamanan (security), mulai dari tingkat fundamental sampai tingkat advance.

Pembelajaran lebih lanjut mengenai SQL Injection bisa Anda dapatkan di kelas Certified Ethical Hacker (CEH) yang diadakan oleh EC-Council. Bagi Anda yang ingin mempelajari lebih lanjut tentang Secure Programming maka EC-Council juga menyediakan training EC-Council Certified Secure Programmer (ECSP) yang memiliki pilihan kelas, .Net atau Java.

Untuk info lebih lengkap mengenai training yang tersedia di i3, Anda dapat menghubungi langsung tim sales kami melalui halaman Contact Us.