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

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

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

    Manajemen Data Master - Sabilla Ardani Putri