Structured Query Language (SQL) digunakan untuk melakukan query, mengoperasikan, dan mengelola sistem database seperti SQL server, Oracle, atau MySQL. Penggunaan umum SQL konsisten di semua sistem databatase, namun ada detail perbedaan tertentu yang khusus untuk setiap sistem.

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 memasukkan 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/

Meskipun efek dari SQL Injection bervariasi berdasarkan aplikasi yang ditargetkan, namun secara umum SQL Injection bertujuan:

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.

Berikut merupakan contoh source code yang memiliki celah untuk terkena sql injection, pada bagian request.getParameter 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.

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

Inovasi Informatika Indonesia (I3) merupakan authorize 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 tentang SQL Injection dapat dipelajari di kelas Certified Ethical Hacker (CEH) yang diadakan oleh EC-Council, dan jika 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.

Info lebih lengkap tentang training yang tersedia di I-3 dapat dibaca disini atau hubungi langsung tim sales kami.