HCTF WEB EASY-XSS 三种解题思路

据说这题困住了很多打开easy-xss的萌新们,都说好坑啊,easy-xss 不easy啊,怎么破!
那么只能说你脑洞还是开小咯~

<script src="百度jquery"></script>
<script>
var msg = '输出点1';
var id='输出点2';
(function(){
    try{
        $.get('http://xxx.xxx.xxx.xxx/xxx'+id.toString());
    }catch(err){
        document.write(msg);
    }
    var debug='输出点3';
})();
</script>

首先看三个输出点:
第一处,单引号转换成" ,不过滤\,但是/会被清空,也就是说,无法构造</script>闭合标签,也没办法闭合'
第二处,所有输入内容强制int,同样不能闭合'
第三处,虽然不过滤任何内容,但是限制最大长度为10
乍看之下,不能通过任意一处,构造XSS。但是如果能 catch(err) 从而进行 document.write ,则可以构造XSS代码。

附上三种解题思路:

  1. 官方解答[出题者的思路]
    详情看:http://nohackair.net/archives/5.fuckit,通过输出点3构造为 var debug='';var id='';
    此时在function中,var id得到提升,id为 undifined,此时进行 .toString() 会报错,从而引发document.write

  2. 超长referer导致百度jquery报错版
    有选手通过机智的fuzz,发现超长的referer会导致百度jquery加载 400错误,jquery加载错误,也就不能用$.get(),也直接引发了catch(err),最终导致了document.write。

  3. 用xss-filter杀掉jquery
    这个思路应该来自某CTF,我好像是看到过,通过url增加参数 &fuck=<script src="百度jquery"></script> chrome会自动匹配输入点和输出点,然后在渲染时候杀掉html里的jquery加载代码,也成功导致无法加载jquery,同样的引发了catch(err)