xssbypass小记
简单整理下bypass的一些点
标签外
如果是标签之外 又有htmlspecialchars函数的点 就别想了
在标签外同时能xss但是有长度限制
如果是储存型可以利用多个点 然后构造<script>标签 在中间利用/**/注释掉html代码 一点一点的组合payload
除此以外<svg/onload=alert(1)>应该是比较短的payload了
标签内
标签内 有htmlspecialchars函数的点 就看属性包裹是不是用单引号 htmlspecialchars函数默认不过滤单引号
也可以考虑html的十进制编码和十六进制编码
JavaScript中
一般输出在js之中 首先就是闭合之前的单引号或者双引号
有过滤 想到大小写和编码
关于编码 这篇文章讲的比较好http://cb.drops.wiki/drops/tips-689.html
js是大小写敏感的 但是html是大小写不敏感的
例如对正则式对事件on过滤 又没有加i 是可以用On绕过
然后考虑js的八进制和十进制 还有unicode
如果过滤了() 可以用·代替 alert() 和alert``效果是一样的
如果过滤了eval() 可以用时钟函数替代 setTtimeout(),setInterval()
还有匿名函数 Function(location.hash.slice(1))(1) 然后配合锚点后的输入
如果过滤了alert ,document等敏感的字符串 可以配合锚点利用location.hash
location.hash #alert(1)
相似的<svg/onload=location=location.hash.substr(1)>#javascript:alert(1)
还有一个姿势利用注释也能完成
<svg/onload=location='javascript:/*'+location.hash> #*/alert(1)
在url中的<svg/onload=location="javascript:"+innerHTML+location.hash>" #"-alert(1)
据说也能弹 不过我没试过
有多个参数 在过滤双引号但是反斜杠存活的时候
可以利用反斜杠直接闭合中间的双引号 再注释后面的双引号
location.href="........."+"&a=1\"+"&b=xss//"+"&c=";