Task 2 Web

Task 2: – Tìm hiểu chi tiết về lỗ hổng SQLI -> phân loại -> (Không bề lý thuyết nhiều quá mà chỉ nói theo ý hiểu) – Code web PHP (không cần CSS) chức năng đăng nhập đăng kí và kết nối với MySQL chứa lỗ hổng SQLI + khai thác để liệt kê được dữ liệu quan trọng trong MySQL đã dựng, áp dụng debug với x-debug để quan sát một số hàm filter như ‘mysqli_real_escape_string’ nếu có – Clear lab SQLI trên :

**https://portswigger.net/web-security/all-labs**

– Lưu ý: viết Write up đầy đủ các phần

I. Lỗ hổng SQL injection

  1. Khái niệm: Tấn công SQL injection (SQLi) là một kỹ thuật tấn công mạng nguy hiểm, chèn code nhằm khai thác lỗ hổng bảo mật trong các ứng dụng web. Lỗ hổng này cho phép kẻ tấn công gắn mã độc hại (thường là các câu lệnh SQL) làm sai lệnh đi câu truy vấn ban đầu, từ đó có thể khai thác dữ liệu từ database (cơ sở dữ liệu). Khi ứng dụng web xử lý lưu lượng truy cập này mà thiếu các biện pháp kiểm tra và lọc dữ liệu đầu vào thích hợp, mã độc hại sẽ được thực thi trực tiếp trên hệ thống cơ sở dữ liệu dẫn đến các cuộc tấn công SQL injection.
  2. Phân loại VERSION sử dụng ' UNION SELECT 'abc', 'xyz'-- nếu lỗi thì là oracle không thì là 3 cái còn lại ' UNION SELECT @@version#

-Phá bỏ tính logic của ứng dụng:

Ví dụ: khi đăng nhập với username abcdef và passwd 12345678 thì ứng dụng kiểm tra qua câu truy vấn :

SELECT * FROM users WHERE username = 'abcdef' AND password = '12345678' Nếu biết tài khoản sẽ có thể dùng để đăng nhập mà không cần mk SELECT * FROM users WHERE username = 'admin'--' AND password = '' Hoặc có thể dùng điều kiện boolean với payload : admin' OR 1=1 --

  1. Cách khai thác một lỗ hổng SQL injection
<?php
session_start();
include "MySQLinitial.php";

$name = $_POST["name"];
$password = $_POST["password"];

$sql = "SELECT * FROM users WHERE name='$name' AND password='$password'";
$result = $conn->query($sql);

if ($result === false) {
    echo "SQL error: " . $conn->error;
} elseif ($result->num_rows >= 1) {
    echo "<h2 style='color: green; text-align: center;'>Đăng nhập thành công!</h2>";
    while ($row = $result->fetch_assoc()) {
        echo "<p style='text-align: center;'>" . $row["name"] . " - " . $row["password"] . "</p>";
    }
    $_SESSION["user"] = $row;
    // Không chuyển hướng tự động, thay bằng liên kết
    echo "<p style='text-align: center;'><a href='index.php'>Tiếp tục đến trang chính</a></p>";
} else {
    echo "<h2 style='color: red; text-align: center;'>Sai tài khoản hoặc mật khẩu</h2>";
    echo "<p style='text-align: center;'><a href='login.php'>Quay lại</a></p>";
}
?>

Đây là code phòng thủ hớ hênh