Che dấu cuộc tấn công bằng Encode
Giải mã theo ngữ cảnh cụ thể
Cả máy khách và máy chủ đều sủ dụng nhiều loại encode khác nhau để truyền dữ liệu giữa các hệ thống. Muốn sử dụng dữ liệu thì cần decode trước. Trình tự chính xác của bước decode phụ thuộc vào ngữ cảnh mà dữ liệu xuất hiện.
Khi xây dựng một cuộc tấn công, nên nghĩ về vị trí mà payload được tiêm, từ đó suy ra cách dầu vào được giả mã nhằm xác định các cách thay thế để biểu diễn cùng một payload.
Sự khác biệt trong giải mã
Các cuộc tấn công tiêm thường sử dụng các mẫu nhận diện như thẻ HTML, hàm JavaScript hoặc lệnh SQL. Các trang web thường cài đặt biện pháp ngăn chặn các yêu cầu có chứa các mẫu này. Tuy nhiên, nếu quá trình giải mã khi kiểm tra đầu vào khác với giải mã khi sử dụng dữ liệu, kẻ tấn công có thể lợi dụng để chèn payload thông qua mã hóa khác nhau.
Che dấu qua URL encoding
Trong URL, các ký tự đặc biệt như "&" có nghĩa riêng và được mã hóa thành ký tự "%" kèm mã hex 2 chữ số, như "Fish & Chips" thành "Fish+%26+Chips". Máy chủ sẽ giải mã URL này về dạng ban đầu. Kẻ tấn công có thể lợi dụng điều này để chèn dữ liệu độc hại mà không bị phát hiện bằng cách đưa dữ liệu được URL encoding qua URL và nó thường vẫn được back-end ứng dụng diễn giải chính xác.
Thỉnh thoảng, bạn có thể thấy rằng WAF và các chương trình tương tự không giải mã URL đúng cách khi kiểm tra đầu vào của bạn. Trong trường hợp này, bạn có thể lén đưa các payload vào ứng dụng back-end chỉ bằng cách mã hóa bất kỳ ký tự hoặc từ nào bị đưa vào danh sách đen.
Che dấu thông qua URL encoding hai lần
Một số máy chủ giải mã URL hai lần. Nếu các cơ chế bảo mật đầu vào chỉ giải mã một lần, kẻ tấn công có thể mã hóa payload hai lần để vượt qua bộ lọc.
[...]/?search=%253Cimg%2520src%253Dx%2520onerror%253Dalert(1)%253E
Che dấu thông qua HTML encoding
Trong tài liệu HTML, một số ký tự cần phải được thoát hoặc mã hóa để ngăn trình duyệt hiểu sai chúng là một phần của đánh dấu. Điều này đạt được bằng cách thay thế các ký tự vi phạm bằng một tham chiếu, ví dụ: dấu hai chấm có thể được biểu diễn bằng :
hay :
hay :
Khi trình duyệt hiển thị trang, nó sẽ giải mã các ký tự này và thực thi payload.
<img src=x onerror="alert(1)">
Số 0 đứng đầu
Khi mã hóa theo kiểu thập phân hoặc hex trong HTML, có thể thêm số 0 phía trước mã mà vẫn không ảnh hưởng đến kết quả giải mã. Một số WAF không kiểm tra kỹ điều này, cho phép payload vượt qua.
<a href="javascript:alert(1)">Click me</a>
Che dấu thông qua XML encoding
XML hỗ trợ mã hóa ký tự tương tự HTML, cho phép chèn payload vào văn bản mà không gây lỗi cú pháp. Các payload này được giải mã bởi máy chủ, hữu ích để bỏ qua WAF và các bộ lọc khác khi tấn công SQL Injection qua dữ liệu XML.
Last updated