Chuyển đến nội dung chính
  1. Nghiên cứu & Ghi chép kỹ thuật/

SQL Injection - SQL injection khai thác UNION

·488 từ·3 phút
Nguyễn Hoàng Thanh Phong
Tác giả
Nguyễn Hoàng Thanh Phong
Sinh viên năm cuối ngành An toàn thông tin tại Đại học FPT. Chuyên nghiên cứu khai thác lỗ hổng bảo mật Web, kiến trúc bảo mật AWS và các công cụ tự động hóa
Web Security Iaw301 - Bài viết này là một phần của loạt bài.
Phần 9: Bài viết này

Vấn đáp
#

  1. Union-Based SQL Injection là gì? Khác gì với các loại SQLi khác?
  • Union-Based SQL Injection là kiểu tấn công SQL Injection trong đó kẻ tấn công dùng toán tử UNION để nối thêm một hoặc nhiều câu lệnh SELECT độc hại vào câu truy vấn gốc của ứng dụng. Kiểu này hiệu quả khi ứng dụng hiển thị kết quả truy vấn SQL trong response, vì dữ liệu lấy thêm từ bảng khác có thể xuất hiện trực tiếp trên trang web.
  • Nó khác với các loại SQLi khác ở điểm: Union-Based SQLi tập trung vào việc lấy dữ liệu trực tiếp qua kết quả trả về, còn Blind SQLi thường phải suy luận dựa trên phản hồi đúng/sai hoặc thời gian phản hồi vì response không hiển thị trực tiếp dữ liệu truy vấn.
  1. Hãy giải thích vai trò của toán tử SQL UNION trong kiểu tấn công này, cũng như cách nó có thể được sử dụng để trích xuất dữ liệu từ cơ sở dữ liệu mà thông thường không thể truy cập được thông qua chức năng hợp lệ của một ứng dụng web.
  • Toán tử UNION cho phép ghép kết quả của một câu SELECT khác vào kết quả của câu truy vấn ban đầu. Ví dụ, nếu ứng dụng đang truy vấn danh sách sản phẩm, attacker có thể chèn thêm UNION SELECT để lấy dữ liệu từ bảng khác như users.
  • Nói dễ hiểu: ứng dụng vốn chỉ định hiển thị dữ liệu sản phẩm, nhưng nếu có lỗi SQL Injection, attacker có thể dùng UNION để “mượn chỗ hiển thị đó” và ép ứng dụng trả về dữ liệu không được thiết kế để truy cập, chẳng hạn usernamepassword từ bảng người dùng. Để làm được, attacker thường phải xác định đúng số lượng cột và kiểu dữ liệu tương thích với câu truy vấn gốc.

Tấn công SQL injection UNION, xác định số lượng cột được trả về bởi truy vấn.
#

  1. Bài lab này yêu cầu chúng ta phải thực hiện tấn công SQL injection để xác định số lượng cột trả về bằng cách thêm một hàng chứa các giá trị NULL. Để bắt đầu bài lab, chúng ta sẽ truy cập vào trang chủ của bài lab.
Homepage
  1. Trước tiên, chúng ta sẽ không biết tham số nào tồn tại lỗ hổng. Do đó, chúng ta sẽ thử từng tham số, bắt đầu bằng tham số category trên endpoint /filter để xem trạng thái trang web như thế nào.
Internal Error
  1. Chỉ cần thêm một dấu nháy đơn vào giá trị của tham số category, trang web đã trả về lỗi 500. Vậy thử thêm OR '1'='1 xem có quay trở lại trạng thái ban đầu không.
SQL Injection at filter parameter
  1. Có tồn tại lỗ hổng SQL Injection tại tham số filter, giờ chúng ta chỉ cần chèn thêm payload ' union select null,null,null-- - là thành công.
Success
Web Security Iaw301 - Bài viết này là một phần của loạt bài.
Phần 9: Bài viết này