最近某次挖洞的过程中遇到一个非常有意思的xss,记录一下与大家分享,全文已脱敏
存在xss的可疑点
测试时某被动扫描器打到了一个疑似xss的点
随手掏万能验证payloadconsole.log(111)
,但是.被转换成了_,空格也被转换成了_
空格通过注释/**/解决问题,但最大的问题还是在于.被拦截了
各种编码尝试一波,无果,开始尝试诸如alert,prompt,confirm,eval都以被拦截告终
又尝试了一波,fuzz各种字符,关键词,看看有没有被置换为空的,依旧失败告终
走出去
看着自己珍藏的payload,既然script标签里面拦截的这么死,换个思路,可不可以闭合标签,出去试试
曾梦想仗剑走天涯,但是出门就被现实打了回来
</script>
可以用于闭合上一个script
,但是<script>
被拦截,无法去闭合尾巴的</script>
但是,使用<sript>
去闭合的时候,chrome浏览器会做一个修正,自动闭合(原理不知,等一个评论区大师傅)
good,成功出来
再之后,尝试<object data=data:text/html;base64,
这种bs64结构的payload
然后被拦截html后面接;,
再尝试data:image/svg+xml;base64,
,依旧被xml;
格式所拦截
不行了,弃了弃了,太难了
走回来
找了个大师傅问问看有没有啥思路,大师傅上来就一句,“你闭合script出去干嘛”
我解释道:“里面被拦截了”
“我不信”
“嘿,我试给你看”
“!!!”
······
神奇的事情出现了,闭合了script之后,前半截的script内不再被waf拦截,所有的函数都被释放了,除了.
但是有了eval害怕啥,成功拿到cookies
最终payload
%22%3a%22%22}%3beval(%22\u0063\u006f\u006e\u0073\u006f\u006c\u0065\u002e\u006c\u006f\u0067\u0028\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002e\u0063\u006f\u006f\u006b\u0069\u0065\u0029%22)%3b%3C/script%3E%3Cobject/**/data%3E%3C/object%3E%3Csript%3Evar/**/b%3d{
%229533
此文又名《一顿操作猛如虎,一看赏金十块五》