Bypass Login dengan SQL Injection
merupakan teknik memanipulasi input pada halaman login sebuah aplikasi web menggunakan SQL Injection untuk mendapatkan akses tanpa validasi yang benar. Ini merupakan praktik ilegal dan tidak etis serta dapat menyebabkan kerentanan keamanan yang serius pada sistem yang diserang.
Persiapan
1. Setup Web Server dan Database: Anda memerlukan server lokal seperti XAMPP atau Laragon
untuk menjalankan aplikasi web dan database MySQL.
2. Database Setup:
- Buat database bernama ‘demo_db’.
- Buat tabel `users` dengan kolom `id`, `username`, dan `password` atau dengan command berikut:
CREATE DATABASE demo_db;
USE demo_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
INSERT INTO users (username, password) VALUES ('admin', 'adminpass');
INSERT INTO users (username, password) VALUES ('user', 'userpass');
Langkah-Langkah Demo 1. Buat Formulir Login
Buat file `login.html` untuk menampilkan formulir login sederhana.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login Page</title>
</head>
<body>
<h2>Login</h2>
<form action="login.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
2. Buat Skrip Login yang Rentan
Buat file `login.php` yang mengandung kerentanan SQL Injection.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "demo_db";
// Membuat koneksi ke database
$conn = new mysqli($servername, $username, $password, $dbname);
// Mengecek koneksi
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
// Mengambil input dari formulir
$user = $_POST['username'];
$pass = $_POST['password'];
// Query yang rentan terhadap SQL Injection
$sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "Login berhasil!";
} else {
echo "Login gagal!";
}
$conn->close();
?>
3. Menunjukkan Kerentanan
Jalankan aplikasi dan buka `login.html` di browser. Masukkan input berikut untuk melakukan
serangan bypass login:
- Username: ' OR '1'='1
- Password: ' OR '1'='1
4. Hasil Eksploitasi Setelah mengklik tombol login, Anda akan melihat pesan "Login berhasil!" meskipun tidak memasukkan kredensial yang valid. Hal ini terjadi karena query SQL menjadi:
SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1' Query ini selalu benar dan mengembalikan semua baris dalam tabel `users`.
5. Bentuk mitigasi yang bisa dilakukan
Untuk menghindari serangan SQL Injection, Anda bisa menggunakan prepared statements. Berikut adalah versi yang sudah diperbaiki dari script PHP Anda menggunakan prepared statements:
Dampak dari serangan SQL Injection :
1. Akses Tidak Sah ke Data : Jika serangan berhasil, penyerang dapat memperoleh akses tidak sah ke dalam basis data aplikasi. Ini berarti mereka dapat mengambil, mengubah, atau menghapus data yang sensitif, seperti informasi pengguna, informasi keuangan, atau data lain yang disimpan dalam sistem.
2. Eksekusi Perintah SQL yang Tidak Diinginkan : Penyerang dapat mengeksekusi perintah SQL yang tidak diinginkan atau berbahaya di dalam sistem. Misalnya, mereka dapat menjalankan perintah untuk mengekspor data ke luar sistem, menjalankan perintah administratif pada server basis data, atau bahkan merusak integritas data dengan menghapus atau memodifikasi informasi.
3. Pengungkapan Informasi Rahasia : Serangan SQL Injection bisa menghasilkan pengungkapan informasi rahasia yang bisa digunakan untuk tujuan jahat lainnya. Misalnya, mengungkapkan kata sandi terenkripsi, data kartu kredit, atau informasi identitas pribadi (PII) dari pengguna.
4. Kerentanan Terhadap Serangan Lain : Serangan SQL Injection juga dapat membuka pintu bagi serangan lain yang lebih luas terhadap aplikasi atau infrastruktur yang terhubung. Penyerang yang berhasil mengeksploitasi celah SQL Injection dapat menggunakan akses ini untuk melancarkan serangan jaringan yang lebih besar atau mengambil alih kontrol sistem secara keseluruhan.
5. Kerusakan Reputasi dan Keuangan : Jika aplikasi atau perusahaan mengalami pelanggaran data yang signifikan akibat SQL Injection, ini dapat menyebabkan kerugian finansial yang besar akibat biaya investigasi, pemulihan, atau bahkan tuntutan hukum dari pihak yang terkena dampak.
6. Kehilangan Kepercayaan Pelanggan : Serangan SQL Injection dapat merusak reputasi perusahaan dalam hal keamanan data. Kehilangan kepercayaan pelanggan bisa menjadi dampak jangka panjang yang serius, karena konsumen mungkin enggan menggunakan layanan atau produk dari perusahaan yang tidak dapat melindungi data mereka.
Komentar
Posting Komentar