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=";

 

<svg><script>alert&#40;1)</script>
  svg向量里面的script将其作为xml解析
  &#40; &lpar; &#x28;即被解析为(
 
callback函数里的值如果无法控制 可以尝试在后面再加一个callback 试试变量覆盖
 

 

posted @ 2018-03-23 15:48  slpawn  阅读(453)  评论(0编辑  收藏  举报