Demo Bypass Login dengan SQL Injection

Demo Bypass Login dengan SQL Injection 

SQL Injection adalah teknik serangan di mana penyerang menyisipkan atau "menginjeksikan" kode SQL berbahaya ke dalam kueri SQL yang dieksekusi oleh aplikasi. Dampak dari serangan SQL Injection bisa sangat merusak dan beragam, termasuk:

  1. Kompromi Data:

    • Pencurian Data: Penyerang dapat memperoleh akses ke data sensitif seperti informasi pribadi, kredensial pengguna, nomor kartu kredit, dan data rahasia lainnya.
    • Modifikasi Data: Penyerang dapat mengubah data dalam basis data, seperti mengubah saldo akun, mengubah informasi produk, atau memanipulasi data transaksi.
  2. Penghancuran Data:

    • Penghapusan Data: Penyerang dapat menghapus data penting, menyebabkan hilangnya informasi berharga yang dapat berdampak serius pada operasi bisnis.
    • Corruption Data: Penyerang dapat merusak data, membuatnya tidak dapat digunakan atau menyebabkan ketidakkonsistenan dalam basis data.
  3. Pengambilalihan Kontrol:

    • Eksekusi Perintah Arbitrary: Penyerang dapat menyisipkan perintah SQL tambahan yang dapat dieksekusi oleh server basis data, memungkinkan mereka untuk menjalankan perintah sistem yang berbahaya.
    • Elevasi Hak Akses: Penyerang dapat meningkatkan hak akses mereka, mendapatkan kontrol administratif atas basis data atau bahkan seluruh server.
  4. Gangguan Layanan:

    • Denial of Service (DoS): Penyerang dapat menjalankan kueri yang sangat kompleks atau berulang, menyebabkan server basis data kelebihan beban dan tidak responsif, mengganggu layanan yang diberikan kepada pengguna yang sah.
  5. Dampak Finansial:

    • Kerugian Finansial: Hilangnya data penting atau downtime sistem dapat menyebabkan kerugian finansial yang signifikan bagi perusahaan.
    • Biaya Pemulihan: Perusahaan harus mengeluarkan biaya besar untuk memulihkan data yang hilang, memperbaiki kerentanan, dan meningkatkan keamanan.
  6. Dampak Reputasi:

    • Kehilangan Kepercayaan Pelanggan: Kebocoran data dan gangguan layanan dapat merusak reputasi perusahaan dan mengurangi kepercayaan pelanggan.
    • Dampak Hukum: Perusahaan dapat menghadapi tuntutan hukum atau denda dari regulator karena kegagalan melindungi data sensitif pelanggan.
Demo:
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();
   ?>

Maka Tampilannya akan seperti ini:


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:
<?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'];

// Menyiapkan statement SQL dengan parameter
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $user, $pass);

// Menjalankan statement
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login berhasil!";
} else {
    echo "Login gagal!";
}

// Menutup statement dan koneksi
$stmt->close();
$conn->close();
?>

Dalam script yang diperbaiki di atas, "prepare" dan "bind_param" digunakan untuk mempersiapkan dan mengikat parameter input pengguna ke statement SQL. Ini memastikan bahwa input pengguna tidak dapat mengubah struktur SQL dan dengan demikian mencegah serangan SQL Injection.





Dampak dari Serangan SQL Injection:

  1. Akses Tidak Sah: Penyerang dapat memperoleh akses tidak sah ke akun pengguna, termasuk akun dengan hak akses tinggi (misalnya admin).
  2. Pencurian Data: Penyerang dapat mengakses, mencuri, atau memodifikasi data sensitif yang disimpan dalam basis data.
  3. Kerusakan Data: Penyerang dapat merusak atau menghapus data, yang dapat mengakibatkan hilangnya informasi penting.
  4. Eksekusi Perintah Jarak Jauh: Dalam beberapa kasus, penyerang dapat menjalankan perintah sistem operasi pada server basis data.
  5. Kompromi Integritas dan Keandalan: Serangan SQL Injection dapat merusak integritas dan keandalan sistem serta menurunkan kepercayaan pengguna terhadap aplikasi.
  6. Kerugian Finansial: Dampak finansial yang signifikan dapat terjadi akibat hilangnya data, waktu henti sistem, dan kerugian reputasi.

Cara Menanggulangi SQL Injection:

  1. Gunakan Prepared Statements (Parameterized Queries): Prepared statements memastikan bahwa input pengguna diperlakukan sebagai data, bukan bagian dari kueri SQL. Ini adalah metode paling efektif untuk mencegah SQL Injection.
  2. Validasi dan Sanitasi Input: Lakukan validasi dan sanitasi semua input pengguna. Hanya izinkan karakter dan format yang diharapkan.
  3. Penggunaan ORM (Object-Relational Mapping): ORM seperti Hibernate atau Entity Framework dapat membantu mengabstraksi interaksi basis data dan mengurangi risiko SQL Injection.
  4. Pembatasan Hak Akses: Batasi hak akses basis data hanya untuk operasi yang diperlukan oleh aplikasi. Jangan gunakan akun basis data dengan hak administratif untuk operasi biasa.
  5. Penggunaan WAF (Web Application Firewall): WAF dapat mendeteksi dan memblokir serangan SQL Injection berdasarkan pola lalu lintas jaringan yang mencurigakan.
  6. Pemantauan dan Logging: Pantau dan log semua aktivitas basis data untuk mendeteksi anomali dan upaya serangan.
  7. Pembaruan dan Patch: Pastikan semua perangkat lunak, termasuk server basis data dan aplikasi web, selalu diperbarui dengan patch keamanan terbaru.
  8. Pendidikan dan Pelatihan: Berikan pendidikan dan pelatihan kepada pengembang tentang praktik terbaik keamanan aplikasi dan ancaman SQL Injection.

Dengan menerapkan langkah-langkah tersebut, risiko serangan SQL Injection dapat diminimalkan dan keamanan aplikasi dapat ditingkatkan.


 

Komentar

Postingan populer dari blog ini

Operator Pembanding MongoDB

BRD, Mock Up, Desain data base Sebuah Aplikasi Kasir Kafe di Salatiga

UTS