Demo Bypass Login dengan SQL Injection - Sabilla Ardani Putri

Demo Bypass Login dengan SQL Injection

Install XAMPP / Laragon (bebas).


Buka phpMyAdmin, lalu buat database dan tabel:

CREATE DATABASE demo_db;


USE demo_db; CREATE TABLE users


(id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50NOT NULL, password VARCHAR(50NOT NULL )


INSERT INTO users (username, password) VALUES ('admin''adminpass'), ('user''userpass')

    Buat Form Login

    File: login.html

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

    Skrip Login yang Rentan (Untuk Demo)

    File: login.php

    <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "demo_db"; // Koneksi ke database $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Koneksi gagal: " . $conn->connect_error); } // Ambil input user $user = $_POST['username']; $pass = $_POST['password']; // QUERY RENTAN 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(); ?>

    Demonstrasi SQL Injection

    Buka login.html di browser dan masukkan:

    • Username: ' OR '1'='1

    • Password: ' OR '1'='1

    Hasilnya? Login berhasil! tanpa perlu tahu password asli. Karena query SQL menjadi:

    SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'

    Query ini selalu TRUE, sehingga akses diberikan ke penyerang.

    Mencegah SQL Injection (Solusi Aman)

    Ubah login.php menjadi seperti berikut menggunakan Prepared Statements (mysqli):

    Versi Aman dari login.php:

    <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "demo_db"; // Koneksi ke database $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Koneksi gagal: " . $conn->connect_error); } // Ambil input user $user = $_POST['username']; $pass = $_POST['password']; // Gunakan Prepared Statement $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $user, $pass); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { echo "Login berhasil!"; } else { echo "Login gagal!"; } $stmt->close(); $conn->close(); ?>

    Kenapa aman?

    Karena bind_param() akan mengamankan input user dan tidak mengizinkan sintaks SQL tambahan. Jadi, percobaan SQL Injection akan gagal.

    Dampak Serangan SQL Injection

    Jika sebuah website tidak aman dari SQL Injection, maka:

    • Penyerang bisa login tanpa akun resmi.

    • Bisa mengakses dan mencuri data penting (seperti username, password, email, dll).

    • Bisa mengubah atau menghapus data dari database.

    • Bahkan bisa menyebabkan kerusakan total pada sistem.

    Contoh nyata: Banyak kasus pencurian data besar berasal dari SQL Injection.

    Kesimpulan



    SQL Injection       Teknik hacking dengan menyisipkan kode SQL di input pengguna
    Contoh Serangan    OR '1'='1 yang membuat query selalu TRUE
    Dampak            Akses ilegal, pencurian data, perubahan data, bahkan kehancuran sistem
    Solusi        Gunakan Prepared Statement (mysqli atau PDO)

     

    Komentar

    Postingan populer dari blog ini

    Local File Inclusion (LFI) & Remote File Inclusion (RFI) - Sabilla Ardani Putri

    TIDAK TERPAKAI - Footprinting dan Reconnaissance menggunakan Whois, Web History, Google Dork, GHDB

    Manajemen Data Master - Sabilla Ardani Putri