Rabu, 26 Juni 2024

Demo Bypass

 

 Demo Bypass Login dengan SQL Injection

Bypass Login dengan SQL Injection:

SQL Injection adalah teknik serangan di mana seorang penyerang menyuntikkan kode SQL berbahaya ke dalam kueri yang dieksekusi oleh aplikasi. Salah satu contoh umum dari serangan ini adalah bypass login, di mana penyerang mencoba masuk ke sistem tanpa kredensial yang sah.

Contoh skenario bypass login dengan SQL Injection:

  1. Sebuah formulir login menerima input dari pengguna (username dan password).
  2. Aplikasi membentuk kueri SQL berdasarkan input pengguna tanpa melakukan validasi atau sanitasi yang memadai.
  3. Penyerang memasukkan string injeksi seperti admin' OR '1'='1 ke dalam field username atau password.

Misalnya, aplikasi mungkin memiliki kueri SQL seperti berikut:

SELECT * FROM users WHERE username = 'admin' AND password = 'password';

Jika input tidak divalidasi dan penyerang memasukkan admin' -- pada field username dan password pada field password, maka kueri akan menjadi:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'password';

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 mengakses informasi yang dilindungi tanpa perlu kredensial yang valid.
    • Ini bisa termasuk informasi sensitif seperti data pribadi pengguna, informasi keuangan, dll.
  2. Kerusakan dan Manipulasi Data:

    • Penyerang dapat mengubah, menghapus, atau menyisipkan data dalam database.
    • Ini bisa merusak integritas data dan menyebabkan kehilangan data penting.
  3. Pengambilalihan Kendali Sistem:

    • Dalam beberapa kasus, SQL Injection dapat digunakan untuk mendapatkan akses administratif ke sistem.
    • Penyerang bisa mendapatkan kendali penuh atas server basis data dan aplikasi.
  4. Kompromi Keamanan:

    • Penyerang dapat menggunakan informasi yang diperoleh dari serangan SQL Injection untuk melancarkan serangan lebih lanjut.
    • Ini bisa termasuk serangan phishing, malware, atau serangan berbasis jaringan lainnya.
  5. Dampak Finansial dan Reputasi:

    • Kehilangan data atau pelanggaran keamanan bisa berdampak signifikan secara finansial bagi organisasi.
    • Reputasi perusahaan juga bisa rusak, menyebabkan kehilangan kepercayaan dari pelanggan dan mitra bisnis.

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.

Tidak ada komentar:

Posting Komentar

install mutillidae

 SEKEDAP