通过先知XSS挑战学习到的点

  1. maltipart/form-data伪造通过表单中textarea构造参数
  2. 通过meta标签限制no-referer,预先用ajax或者fetch先请求,前提是ajax需要同步请求以免影响到之后的跳转
  3. 通过构造iframe的
poc.html
<iframe id=x src=redirect.php></iframe>
<script>
x.location.reload();
</script>

redirect.php
<?php
header("location: json.php");
?>

可以绕过application/x格式对xss进行执行

  1. 通过flash发送请求绕过对referer的编码
    说到这里,flash的部分版本还能控制referer的发送
  2. 端口小于80的location头不跳转,P牛的博客里也说了用CSP控制头不跳转的情况,当时没有复现成功不知为何
  3. PHP的header函数一旦遇到\0、\r、\n这三个字符,就会抛出一个错误,此时Location头便不会返回,浏览器也就不会跳转了
  4. 通过eml文件中加载iframe可以使text/plain中的html代码执行
  5. plaintext标签,可以通过控制charset字符集,fuzz同型字构造payload。之前mysql也有个同型字的绕过问题,那个的原因是Mysql字段的字符集和php mysqli客户端设置的字符集不相同。
  6. hidden input标签的利用,在type指定了之前,可以覆盖为其他的,以第一个为准,之后的话,可以accesskey交互触发或者'style='behavior:url(?)'onreadystatechange='alert(1)无交互触发
  7. DOM Clobbering,查到之后本地无法复现,后面看wp发现少了个兼容性的头!!!用于对
<script>
if(top!=self){
 location=self.location
}
</script>

的绕过

  1. img标签src中,通过控制data:image/svg+xml,插入payload
  2. 番外篇,触发点位jquery1.6的
 $(function(){
        try { $(location.hash) } catch(e) {}
    })

的相关漏洞,但是之前做了内容和限制,那就只能让第一个脚本无法加载,当时就不知道,亏落神还提醒了referer和http头长度限制。看wp是说当请求远程cdn时某个header头过长,就会拒绝请求。poc

xss21.php?a=a....(超长个a)#<img src=1 onerror=alert(0)>

总结:收益匪浅,很多平时认为没用的漏洞也能通过构造形成有威胁的漏洞
ps:找工作真的心累。


发表评论 暂无评论

*