问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Apache Commons Collections1 反序列化命令执行漏洞

发布网友 发布时间:2022-09-19 13:15

我来回答

1个回答

热心网友 时间:2023-10-28 02:12

   当服务器收到序列化对象数据后,会调用对象类的readobject()方法进行反序列化,这里我们构造的恶意序列化对象使用的是AnnotationInvocationHandler类的实例化对象。所以当服务器收到这个对象时会去调用该类的readobject()方法进行反序列化,下面我们跟着上面的触发流程进行一步步触发分析。

结论:在漏洞触发的第一步中,在反序列化我们向服务器发送的恶意序列化AnnotationInvocationHandler对象时会触发对构造该类对象时传入的Map类型对象的第一个键值对的value进行修改。

   当通过迭代器对象对TransformedMap类型的value值进行修改时会调用AbstractInputCheckedMapDecorator(TransformedMap类的父类并实现了 Map.Entry接口)中的内部类MapEntry的setValue()方法,debug运行可以看到this.parent变量值是TransformedMap对象的第一个键值对。

结论:在漏洞触发的第二步中,触发了TransformedMap的checkSetValue()方法

   可以看到ChainedTransformer对象的transform()方法的功能是将传入的对象交给对象中的this.iTransformers变量引用的对象的transform()方法进行处理。this.iTransformers变量引用的对象从53行可知是对象实例化时传入的,从poc的25行可知我们实例化时传入一个Transformer[]的数组。

结论:在漏洞触发的第三步中,TransformedMap.checkSetValue()触发ChainedTransformer.transform()方法。ChainedTransformer.transform()方法将传入的对象经过ChainedTransformer对象中的各个Transformer类型的实例对象调用实例化对象的transform()方法处理。

   由poc 20-25行可知ChainedTransformer对象中的Transformer类型的实例对象分别是ConstantTransformer、InvokerTransformer,首先触发ConstantTransformer对象的transform()方法,可以看出ConstantTransformer对象的transform()方法的功能是将传入的对象转换成实例化ConstantTransformer对象时传入的对象,由poc的21行可知实例化ConstantTransformer对象时传入的对象为java.lang.Runtime.class,因此经过ConstantTransformer.transform()后传入的参数变成了类对象java.lang.Runtime.class,再经过InvokerTransformer.transform()处理。

   从59-61行可以看出InvokerTransformer.transform()功能是通过反射得到传入对象中方法名为this.iMethodName参数类型为this.iParamTypes的方法,并执行该方法传入的方法参数为this.iArgs。而this.iMethodName、this.iParamTypes、this.iArgs三个参数都是我们在实例化InvokerTransformer对象时自定义的,这导致可以进行任意命令执行。

第一次执行InvokerTransformer.transform()方法后

第二次执行InvokerTransformer.transform()方法后

第三次执行InvokerTransformer.transform()方法

结论:在漏洞触发的第四步中,传入的对象经过1次ConstantTransformer.transform()与3次InvokerTransformer.transform()转换触发exec()任意命令执行。

ps:jdk版本需要1.7

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 xmldecoder反序列化漏洞分析 未成年进看守所有案底吗 金娃娃开完花可以剪了叶子还能活吗? 煎豆腐怎么做最好吃 卵巢巧克力囊肿能治吗最佳治疗方法 巧克力囊肿有什么治疗方法? 下载了水滴笔刷,怎样调色让它看起来真实一点 求这个水珠做法步骤,谢谢用PS 未成年刑事案件会留有案底吗? 超凡战纪藏宝箱怎么放 雕像 超凡战纪宠物技能异能系宠物鹦鹉带什么技能好 超凡战纪56副本里的冰魂和炎魂怎么弄 超凡战纪什么职业厉害的最新相关信息 超凡战纪的神兽是怎么获得的? 超凡战纪带宝宝打fb 宝宝有经验吗 江南三大名楼指的是哪三大名楼? 神田雪平锅的443铁素不绣钢是什么材质 秋葵鸡蛋摊饼的做法,秋葵鸡蛋摊饼怎么做好吃 做法,秋葵鸡蛋饼怎么做好吃,秋葵鸡蛋饼的家常做法 高颜值的秋葵蛋卷,是怎样的一道美食? 兰考县的长途区号是多少? 兰考三义寨李沟搬迁吗 开胃蒸凤爪的家常做法大全怎么做好 拼多多免费发红包在哪 蒸凤爪的做法,爪紧吃 精装房刷漆需要铲掉原来的吗 精装修的房子到底要不要重新装修? 如果是精装修的房子刷过白色漆,自己入住还需要刷乳胶漆吗? 豉汁蒸凤爪如何做好吃 豉汁蒸凤爪最正宗的做法 河南省兰考县城关乡波士顿邮编是多少 重新补办了护照那原来丢的护照怎么办 广式豉油蒸凤爪的做法步骤图,怎么做好吃 豆豉蒸凤爪的做法步骤图,豆豉蒸凤爪怎么做 魔兽世界里猫德穿什么甲,拿什么武器,堆什么属性? 魔兽怀旧服:DPS野性德鲁伊PVE大型百科 魔兽世界猫德装备 3.35猫德 装备选择 请问一下椒香蒸鱼做法图解 请问椒香蒸鱼做法图解 睡在世界各地的人