位置: IT常识 - 正文

CVE-2016-1000027分析

编辑:rootadmin
CVE-2016-1000027分析 基础知识:

推荐整理分享CVE-2016-1000027分析,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

        要想分析首先要了解什么是Spring HTTP Invoker,HttpInvoker是基于HTTP之上提供RPC,同时又使用了Java的对象序列化机制,实现了穿透防火墙或多系统之间的通信。

        具体的实现过程很复杂,我们不用太深入的去了解,只需要知道HttpInvoker主要是使用http协议通过传输序列化数据来实现通信,一旦传输序列化数据,如果使用不当就会产生反序列化漏洞。

漏洞成因:

       漏洞版本:spring-web<6.0版本中

        漏洞发生在,HttpInvokerServiceExporter和RemoteInvocationSerializingExporter中,序列化数据未进行检测,当传输恶意序列化数据的时候,反序列化中就会执行恶意代码。

        首先查看漏洞的存在位置,这里可以看到执行的栈关系:

         调用层级如下所示,首先通过handleRequest接收发送来的数据,然后调用readRemoteInvocation,createObjectInputStream最后通过doReadRemoteInvocation的readObject实现反序列化。

httpinvoker.HttpInvokerServiceExporter.handleRequesthttpinvoker.HttpInvokerServiceExporter.readRemoteInvocationRemoteInvocationSerializingExporter.createObjectInputStreamRemoteInvocationSerializingExporter.doReadRemoteInvocationRemoteInvocationSerializingExporter.readObject

       首先看 handleRequest,可以看到此处调用将获取到的response数据传输给readRemoteInvocation方法。

         查看readRemoteInvocation方法,可以看到post数据被分别传输给了createObjectInputStream和doReadRemoteInvocation,字面意思可以看到分别为创建对象流和执行远程调用

         查看doReadRemoteInvocation方法可以看到其中执行了readObject,进行反序列化操作。

         至此我们通过对代码的分析可以发现调用关系很简单,直接将传入的数据进行反序列化执行,但是并未进行安全检测或安全限制,这样如果接口被暴露在外部,则可以通过构造恶意cc链来实现反序列化执行系统命令。

漏洞复现:项目构建:

        首先构建项目,这里我使用的是GitHub,前辈已经实现的测试代码,代码地址如下:

https://github.com/artem-smotrakov/cve-2016-1000027-poc

        这里需要注意项目首先要启动server,这里会下载需要的jar包,等下载完成后启动服务器,可以看到如下界面:

         这表示启动成功,这是可以去执行client项目中的Exploit类,这里需要注意看我们使用的ysoserial生成的调用链,查看我们的commons-collections版本,这里为3.1版本。

         根据ysoserial帮助看到我们可以使用如下调用链,例子中给的是CommonsCollections3,但是我这里存在问题,我使用的是CommonsCollections6可以成功执行

       使用如下的命令,将生成的CommonsCollections6.bin放在项目的目录中

java -jar ysoserial-all.jar CommonsCollections6 "calc" > CommonsCollections6.bin 漏洞测试:CVE-2016-1000027分析

        执行后看我们发送的数据包,使用post方式,Content-Type: application/x-java-serialized-object,数据为我们刚才生成的打开计算器命令             执行成功,可以看到成功弹出计算器

         漏洞并不复杂,主要是在反序列的过程中并未对数据进行检测和限制,如果接口开放到互联网暴露面就会被恶意利用。

漏洞修复:

        漏洞修复其实直接升级到6.0版本就可以了,但是麻烦的点在于spring-web 6.0版本变动比较大,项目中使用的jBPM 6.2.0和Hibernate 4.2不兼容Spring Framework 6 ,Spring Framework 6需要JPA 2.2或更高版本,Hibernate 4.2也是基于JPA 2.0的,与Spring Framework 6不兼容。这样的话要想修复漏洞就不能采用升级的方式,只能手工修复:

第一种方案就是添加执行限制,对序列化数据进行限制,如果存在调用恶意cc链就禁止,但是这样存在被绕过风险,并不安全第二种方案就是直接把HttpInvokerServiceExporter功能关闭,如果业务上没有使用并不会产生什么影响。

        这里就采用第二种方案,将handleRequest方法置空,关闭其回调。

修改后代码如下: 

修改前代码如下:

首先使用命令解压项目:

jar -xf spring-web-5.3.22.jar

 

使用命令生成class文件,其中jar文件中为HttpInvokerServiceExporter.java所需要依赖的jar包。

javac -cp jar/* HttpInvokerServiceExporter.java

  执行成功后,生成如下两个class文件:

 之后将两个class文件与解压后的文件进行替换,并执行下面命令打包为jar包

jar -cvfm0 spring-web-5.3.22_20230410.jar META-INF/MANIFEST.MF ./

       这就成功的打包了jar包,下面进行修复测试。

 修复测试:

        首先加载我们修改后的jar包,查看HttpInvokerServiceExporter,可以看到已经被修改

        

         在执行Exploit,可以看到无法触发漏洞,漏洞修复成功。

        

 总结:

最后做下总结:

可以看到漏洞的原理其实很简单,就是spring为了方便开发者跨系统调用数据,采用序列化的方式实现数据的通信,但是未考虑到可能存在的反序列化漏洞,在6.0版本中已经废除了HttpInvokerServiceExporter这个类,整个的调用流程并不复杂,很快就可以分析出来。漏洞的利用我们这里采用的是CC链,其实也可以采用其他链,可以根据加载的jar版本自行编写,当然最好用的还是ysoserial,另外当一个调用链不行不要放弃,多尝试几个就行。漏洞修复中能升级到最新版最好,但是当一个项目很大的时候,各个版本的依赖就是一个很麻烦的事情,多数情况下不能升级,但是漏洞还是要修复,这个时候就要手工修改源码进行修复,可以根据实际情况选择最简单的方式进行修复。
本文链接地址:https://www.jiuchutong.com/zhishi/288140.html 转载请保留说明!

上一篇:高地牛,荷兰德伦特省 (© defotoberg/Shutterstock)(苏格兰高地牛一个萌萌哒的合集)

下一篇:阿巴拉契亚国家步道,新泽西州斯托克斯州立森林 (© Frank DeBonis/Getty Images)(阿巴拉契亚国家步道的英文怎么说)

  • 手机怎么截长屏的聊天记录(三星手机怎么截长屏)

    手机怎么截长屏的聊天记录(三星手机怎么截长屏)

  • b站如何打开青少年模式(bilibili怎么开启青少年模式)

    b站如何打开青少年模式(bilibili怎么开启青少年模式)

  • airpods电流声能换吗(airpods声音电流声)

    airpods电流声能换吗(airpods声音电流声)

  • 华为手机怎样下载铃声到手机上(华为手机怎样下载app软件)

    华为手机怎样下载铃声到手机上(华为手机怎样下载app软件)

  • 6s可以升级13.5吗(6s能升级ios13)

    6s可以升级13.5吗(6s能升级ios13)

  • 抖音全屏设置在哪(抖音全屏设置在哪vivo)

    抖音全屏设置在哪(抖音全屏设置在哪vivo)

  • 手机淘宝的投诉电话号码是多少(手机淘宝的投诉电话是多少)

    手机淘宝的投诉电话号码是多少(手机淘宝的投诉电话是多少)

  • ipad待机时间多久(ipad2020待机时长)

    ipad待机时间多久(ipad2020待机时长)

  • 长按手机屏幕空白处没反应(长按手机屏幕空白处没反应是为什么)

    长按手机屏幕空白处没反应(长按手机屏幕空白处没反应是为什么)

  • 怎么关闭自己的朋友圈只看别人的(怎么关闭自己的朋友圈,但是能看到别人的)

    怎么关闭自己的朋友圈只看别人的(怎么关闭自己的朋友圈,但是能看到别人的)

  • 哪一款ipad可以打电话(哪一款ipad可以开90帧)

    哪一款ipad可以打电话(哪一款ipad可以开90帧)

  • word如何移动段落(word如何移动段落到前一段)

    word如何移动段落(word如何移动段落到前一段)

  • 联发科mt6750相当于骁龙多少(联发科mt6750好不好)

    联发科mt6750相当于骁龙多少(联发科mt6750好不好)

  • 手机qq如何查看共同好友(手机qq如何查看已删除好友的聊天记录)

    手机qq如何查看共同好友(手机qq如何查看已删除好友的聊天记录)

  • win10怎么分盘(win10怎么分盘分配空间)

    win10怎么分盘(win10怎么分盘分配空间)

  • 荣耀9x采用了什么解锁方式(荣耀9x采用了什么芯片)

    荣耀9x采用了什么解锁方式(荣耀9x采用了什么芯片)

  • vivox9splus清除数据(vivox9怎么清楚数据)

    vivox9splus清除数据(vivox9怎么清楚数据)

  • 微信朋友圈看过的图片缓存在哪里(微信朋友圈看过的视频缓存在哪里)

    微信朋友圈看过的图片缓存在哪里(微信朋友圈看过的视频缓存在哪里)

  • 微信自动进群怎么办(微信怎样取消自动进群)

    微信自动进群怎么办(微信怎样取消自动进群)

  • cad怎么删除多余线段(cad怎么删除多余的图层快捷键)

    cad怎么删除多余线段(cad怎么删除多余的图层快捷键)

  • 小米9的开发者选项在哪(小米9的开发者模式有什么用)

    小米9的开发者选项在哪(小米9的开发者模式有什么用)

  • AMD锐龙R5-1400配1050ti玩网游怎么样,会翻车吗?(amdr5 1400)

    AMD锐龙R5-1400配1050ti玩网游怎么样,会翻车吗?(amdr5 1400)

  • lvreduce命令  减少LVM逻辑卷所占空间大小(lvresize命令)

    lvreduce命令 减少LVM逻辑卷所占空间大小(lvresize命令)

  • 织梦dedecms如何禁止发布重复文章(织梦dedecms如何升级ckeditor)

    织梦dedecms如何禁止发布重复文章(织梦dedecms如何升级ckeditor)

  • 固定资产直接计入成本的规定
  • 空调安装发票税率
  • 收取租车押金怎么做会计分录
  • 食堂支付的现金怎么入账
  • 个体工商户在哪注销营业执照
  • 独立核算分公司注销与总公司账务
  • 施工企业所得税税率是多少
  • 设备发票怎么抵扣
  • 计提个税会计分录怎么理解
  • 生产企业商贸企业
  • 土地使用权摊销的会计分录
  • 固定资产进项可以抵扣的时间
  • 小规模纳税人如何纳税
  • 贸易公司出口退税流程及账务处理
  • 减免附加税还要计提吗
  • 教育附加费的计算方法
  • 退休人员再任职个人所得税
  • 税务局如何检查上传的发票
  • 开劳务分包发票需要什么条件?
  • 汽车行业销售折让
  • 月息和年息的换算公式等额本息
  • 用于研发的设备如何折旧
  • 个人所得税款项性质
  • 暂时关闭朋友圈
  • 计提社保公司承担部分的会计分录
  • 劳务公司开具劳务费发票
  • 简易征收的分录
  • win10重置后能恢复吗
  • 员工出差火车票可以抵扣进项吗
  • 外资企业采购退税流程
  • 旧设备投资的税务处理
  • Win7系统僵尸部队4存档丢失的解决方法
  • 高手成长礼包
  • 国有土地使用证到期了怎么办
  • php编程基础与案例开发
  • webssh github
  • 汽车购置税计算公式
  • 融资租赁业务增资扩股
  • gpt3 api
  • 入侵防御部署方式
  • 银行存款利息收入会计分录怎么写
  • 数量金额式账页图片
  • 用友t3固定资产清理怎么操作
  • 金税盘服务费可以跨年抵扣
  • 第9章 内存模型分析
  • 帝国cms移动端
  • mongodb怎么用
  • 调整以前年度销项税怎么填申报表
  • 详解中国女足出线形势
  • sql server 2008中的权限分为三类
  • 固定资产未入账的定性依据
  • 固定资产增加
  • 年底要结转净利润怎么算
  • 工商年报中纳税总额怎么填
  • 转让不动产怎么计算增值税
  • 房地产购买流程
  • 税控维护费跨年怎么算
  • 外币资本金入账汇率怎样选择
  • 免税 企业
  • 公司基本账户有银行卡吗
  • 计提工资的会计账务处理
  • 银行对账单上借贷方什么意思
  • window10 bitlocker
  • kvm虚拟机性能调优
  • windows10如何关闭快捷键
  • Ghost XP SP3电脑市场专业装机版 V5.5
  • winxp0000007b修复
  • windows8 defender
  • python让用户选择
  • Bullet(Cocos2dx)之凸多面体形状和组合形状
  • js仿QQ中对联系人向左滑动、滑出删除按钮的操作
  • Node.js中的什么模块是用于处理文件和目录的
  • 用于登录
  • shell 捕获输出结果
  • 并行 python
  • Python Requests安装与简单运用
  • 如何用jquery
  • 小规模纳税人可以开增值税专用发票吗
  • 就业核查怎么核查
  • 印度有加入世贸吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设