CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 百科
  3. 正文

jsonobject

2017年5月23日 751点热度 0人点赞 0条评论

jsonobject

  • 首页
  • 分类阅读
  • 文库
  • 专栏
  • 公开课
  • 商城
  • 漏洞盒子
注册 | 登录
投稿

JSONObject输出json串可引发XSS

door2guest2013-06-21共154494人围观 ,发现 13 个不明物体WEB安全
测试用的是net.sf.json.JSONObject,大家也可以去试试其他JSONObject。
JSONObject json = null;
json = new JSONObject();
json.put("code", 200);
json.put("info", "tester");
json.put("msg", "success");
System.out.println(json);
// 输出:{"code":200,"info":"tester","msg":"success"}

在这里info是一个String,所以,很多前端工程师可能会选择使用Stirng.replace方法转义or过滤特殊字符。

如果在info中注入{‘replace’:function(){alert(/xss/)}}呢?

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方法。

可以根据不同的场景把info构造成不同的对象,也可以构造成数组[function(){alert(/xss/)}] 或者 简单的函数 function(){alert(/xss/)}

NOTE:这种方式在jQuery中行不通,jQuery会对json串的格式做检查,一般的ajax,还有jsonp可能会存在这种xss问题。

door2guest1 篇文章等级: 1级
|
|
  • 上一篇:XSS解决方案系列之四:关于编码
  • 下一篇:Sqlmap注入技巧收集
发表评论

已有 12 条评论

  • hehe 2013-06-21回复1楼

    这属于json hijack吗

    亮了(1)
    • hehe 2013-06-21回复

      @hehe 我理解是转换对象的时候自定义的replace方法(xss)hijack了原有replace方法,是这个意思?

      亮了(1)
      • door2guest (1级) 2013-06-21回复

        @hehe 可以这么理解。 这里重点是可以控制输出json的结构。

        亮了(1)
  • 园长MM (1级) 2013-06-21回复2楼

    这跟用JSONOBJECT没什么关系,明显后端提供的数据有问题

    亮了(1)
    • door2guest (1级) 2013-06-22回复

      @园长MM  文章说的就是后端输出json导致的问题,可以控制info改变json的结构。

      亮了(1)
      • 园长MM (1级) 2013-06-22回复

        @door2guest  昨晚睡回复的代码没贴上,debug了下其实是直接用object put’会有问题,在转换的时候JsonObject抛了一个JsonException异常,也就是说转换后的json代码是有问题的。把实现方式改成Map<String,Object> 然后再put、然后再fromObject是没问题的。

        亮了(2)
  • 天气有点热 (1级) 2013-06-22回复3楼

    net.sf.json代码片段:

    import net.sf.json.JSONObject;

    public class Test {

    public static void main(String[] args) {

    JSONObject json = new JSONObject();

    json.put(“key”, “{‘replace’:function(){alert(/xss/)}}”);

    System.out.println(json);

    System.out.println(((JSONObject)json.get(“key”)).get(“replace”));

    }

    }

    org.json代码片段:

    import org.json.JSONException;
    import org.json.JSONObject;

    public class Test {

    public static void main(String[] args) throws JSONException {

    JSONObject json = new JSONObject();

    json.put(“key”, “{‘replace’:function(){alert(/xss/)}}”);

    System.out.println(json);

    System.out.println(((JSONObject)json.get(“key”)).get(“replace”));

    }

    }

    使用net.sf.json输出结果是:

    {"key":{"replace":function(){ alert(/xss/) }}}
    function(){ alert(/xss/) }

    [/code]

    这里net.sf.json的value实际是一个JSONObject对象,所以还可以调用注入value中JSONObject对象,这是net.sf.json正常的嵌套功能,但是它不符合js json的标准

    使用org.json输出结果是:

    [code]

    {"key":"{'replace':function(){alert(/xss/)}}"}
    Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to org.json.JSONObject
    at Test.main(Test.java:20)

    org.json是符合js json标准的,它的value就是个String,cast成JSONObject就报异常了.

    其实就是个net.sf.json的json与js json输出标准不一样造成的,从而可以控制输出端的内容,通过构造在前端做某些js函数操作时,其内容会被当成js语句块执行,就是上面的xss了

    那为什么不用org.json,要用net.sf.json了?因为net.sf.json更为强大(比如:多层嵌套(类似迭代器),javabean转换等)

    亮了(3)
    • 天气有点热 (1级) 2013-06-22回复

      @天气有点热 编辑器这么坑爹,第一个

      怎么就匹配最后一个[/code]了,不是应该匹配最近的一个

      吗?

      亮了(1)
    • door2guest (1级) 2013-06-22回复

      @天气有点热  总结的非常好

      亮了(1)
  • larry 2013-07-09回复4楼

    不错

    亮了(2)
  • error 2015-12-29回复5楼

    咦,你的输出不对呀?

    输入是:{‘replace’:function(){alert(/xss/)}} 的话,输出不是下面这样的吗?

    {"code":200,"info":"{‘replace’:function(){ alert(/xss/) }}","msg":"success"}

    为什么楼主的大括号 { 会在 双引号 " 的外面来了?
    不大明白,能解释一下吗?

    亮了(1)
  • error 2015-12-29回复6楼

    哦,看了@天气有点热 的总结。明白了。。多谢~~

    亮了(0)

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

door2guest

这家伙太懒,还未填写个人描述!

1 篇文章7 条评论

相关阅读

  • 如何绕过Edge XSS过滤器?
  • 我是如何发现一枚Cisco XSS(跨站脚本)漏洞的
  • XSS挑战第一期Writeup
  • XSS的原理分析与解剖
  • 新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS

特别推荐

关注我们 分享每日精选文章

不容错过

  • Tap Lan 实战之“伪装的路由”creturn2015-12-24
  • 动手搭建DDoS演练:揭秘在线DDoS攻击平台(下)ArthurKiller2016-07-05
  • 人大刚刚通过的《网络安全法》都有哪些看点?kuma2016-11-07
  • Python爬虫开发(五):反爬虫措施以及爬虫编写注意事项VillanCh2016-03-09

FREEBUF

  • 免责声明
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2013 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0daybank

标签: 暂无
最后更新:2017年5月23日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me