Hiểu về lỗ hổng
Lỗ hổng nằm ở bộ lọc product category (danh mục sản phẩm). Khi ứng dụng web nhận input từ người dùng mà không kiểm tra kỹ, kẻ tấn công có thể chèn các câu lệnh SQL độc hại vào để thao túng câu truy vấn gốc. Kỹ thuật chúng ta sử dụng ở đây là UNION-based SQL Injection, cho phép chúng ta "nối" thêm kết quả từ một truy vấn do mình tự tạo vào kết quả gốc của ứng dụng.
Điểm đặc biệt của Oracle
Khác với MySQL hay PostgreSQL, Oracle cực kỳ "khó tính":
Luôn cần
FROM: Trong Oracle, mỗi câu lệnhSELECTbắt buộc phải có mệnh đềFROM.Bảng
dualhuyền thoại: Nếu bạn chỉ muốn kiểm tra dữ liệu thử nghiệm (ví dụSELECT 'abc') mà không muốn truy vấn từ bảng nào cụ thể, hãy dùng bảng có sẵn làdual.
Hướng dẫn giải chi tiết (Step-by-step)
Để giải quyết bài lab này, mình thực hiện qua 3 bước chính:
Bước 1: Can thiệp bằng Burp Suite
Đầu tiên, sử dụng Burp Suite để "bắt" request khi bạn chọn một danh mục sản phẩm. Chúng ta cần can thiệp vào tham số category để chèn payload.
Bước 2: Xác định số lượng cột và kiểu dữ liệu
Trước khi lấy được phiên bản DB, ta cần biết câu lệnh gốc đang trả về bao nhiêu cột và cột nào cho phép hiển thị chữ (text). Dùng payload sau để kiểm tra: '+UNION+SELECT+'abc','def'+FROM+dual--
Nếu trang web load bình thường, có nghĩa là truy vấn gốc đang sử dụng 2 cột và cả 2 đều chấp nhận kiểu dữ liệu văn bản.
Bước 3: "Moi" thông tin phiên bản
Khi đã chắc chắn về số cột, ta dùng câu lệnh chuyên dụng của Oracle để đọc thông tin từ bảng v$version: '+UNION+SELECT+BANNER,+NULL+FROM+v$version--
Tại sao dùng
NULL? Vì ta chỉ cần cột đầu tiên (BANNER) chứa thông tin phiên bản, cột thứ hai ta có thể để trống (NULL) để đảm bảo số lượng cột khớp với câu lệnh gốc.