位置: 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)(阿巴拉契亚国家步道的英文怎么说)

  • 关于网店推广你可以少走弯路(网店推广文章)

    关于网店推广你可以少走弯路(网店推广文章)

  • 华为智能门锁能语音开门吗(华为智能门锁能录入几个指纹)

    华为智能门锁能语音开门吗(华为智能门锁能录入几个指纹)

  • 微信怎么设置自动收款收红包(微信怎么设置自动收款)

    微信怎么设置自动收款收红包(微信怎么设置自动收款)

  • 小键盘开关是哪个(小键盘开关是哪个键ipad)

    小键盘开关是哪个(小键盘开关是哪个键ipad)

  • 抖音极速版不能提现(抖音极速版不能微信支付怎么回事)

    抖音极速版不能提现(抖音极速版不能微信支付怎么回事)

  • iPhone7修过基带耐用吗(苹果7基带坏了修后手机信息还在嘛)

    iPhone7修过基带耐用吗(苹果7基带坏了修后手机信息还在嘛)

  • ai场景识别什么意思(ai场景是什么意思)

    ai场景识别什么意思(ai场景是什么意思)

  • 网易云音乐可以唱歌吗(网易云音乐可以下载到本地吗)

    网易云音乐可以唱歌吗(网易云音乐可以下载到本地吗)

  • 电脑分辨率突然变大了(电脑分辨率突然降低)

    电脑分辨率突然变大了(电脑分辨率突然降低)

  • 饿了么品质联盟怎么加入(饿了么品质联盟是什么)

    饿了么品质联盟怎么加入(饿了么品质联盟是什么)

  • 硬盘有什么牌子(硬盘什么牌子性价比高)

    硬盘有什么牌子(硬盘什么牌子性价比高)

  • 移动5g频段是多少(移动5g频率范围)

    移动5g频段是多少(移动5g频率范围)

  • qq大会员包括svip和黄钻吗

    qq大会员包括svip和黄钻吗

  • 华为什么时候更新emui10(华为什么时候更新鸿蒙4.0)

    华为什么时候更新emui10(华为什么时候更新鸿蒙4.0)

  • 绿洲怎么注销账号(绿洲注销账号后点赞还有吗)

    绿洲怎么注销账号(绿洲注销账号后点赞还有吗)

  • 苹果x系列和苹果11系列区别(苹果x系列和苹果11系列哪个好)

    苹果x系列和苹果11系列区别(苹果x系列和苹果11系列哪个好)

  • 苹果6splusnfc功能在哪(苹果6splusnfc在哪里)

    苹果6splusnfc功能在哪(苹果6splusnfc在哪里)

  • miui11更新步骤(miui11怎么更新miui12)

    miui11更新步骤(miui11怎么更新miui12)

  • 一加7t是2k屏吗(一加7有2k屏吗)

    一加7t是2k屏吗(一加7有2k屏吗)

  • 平板电脑可以上微信吗(平板电脑可以上飞机随身带吗)

    平板电脑可以上微信吗(平板电脑可以上飞机随身带吗)

  • 12306网上订票候补是什么意思(12306网上订票候补票兑单截止时问是什么意思)

    12306网上订票候补是什么意思(12306网上订票候补票兑单截止时问是什么意思)

  • 美团众包拉黑怎么解封(美团众包拉黑名单了怎么办)

    美团众包拉黑怎么解封(美团众包拉黑名单了怎么办)

  • 手机自动拨打电话是咋回事(手机自动拨打电话怎么设置)

    手机自动拨打电话是咋回事(手机自动拨打电话怎么设置)

  • vivo怎么面部解锁应用(vivo手机怎样解面部识别)

    vivo怎么面部解锁应用(vivo手机怎样解面部识别)

  • vivoy93相机水印怎么设置(vivo手机相机水印)

    vivoy93相机水印怎么设置(vivo手机相机水印)

  • 桌面怎么显示时间日期(桌面怎么显示时间天气华为)

    桌面怎么显示时间日期(桌面怎么显示时间天气华为)

  • hdaudpropshortcut.exe是什么进程 作用是什么 hdaudpropshortcut进程查询

    hdaudpropshortcut.exe是什么进程 作用是什么 hdaudpropshortcut进程查询

  • 专项资金支出流程
  • 邮票可以抵个税吗
  • 个人房贷利息抵税
  • 汇算清缴的
  • 退销售货款的现金流是哪一个
  • 个人所得税经营所得申报
  • 冲减多计提的附加费
  • 纳税筹划与企业决策
  • 营业收入管理也是企业财务管理的基本内容
  • 医院收到卫生局补助会计分录怎么写
  • 收到对方开的发票怎么做账
  • 银行贷款利息是百分比还是千分比
  • 社保费用可以税前扣除吗
  • 个体户缴纳个人经营所得税分录
  • 怎么在网上申请变更姓名
  • 物业费纳税
  • 推广费是广告费和业务宣传费吗
  • 固定资产一次性折旧政策2023
  • 财税2018年39号公告残保金
  • 如何预防计算机病毒的方法
  • linux如何开启端口
  • 无法访问您可能没有权限使用资源
  • 生产税有哪些
  • 其他现代服务包括哪些税目
  • 公司购买理财产品账务处理
  • 教你如何在白桦树上采集桦树汁
  • win10更新补丁卸载不了
  • php访问统计
  • 消费税有减免政策吗
  • html页面中利用______标签可引入jquery库
  • 双线服务器
  • vue前端开发规范
  • 工业制品买卖
  • 汽车理赔款
  • 个体工商户减免个人所得税政策
  • 收到厂家赠送商品入库
  • 接受捐赠的增值税要交企业所得税吗
  • 3d representation
  • 魔改toolbox
  • YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数
  • php红包源码
  • 不得从销项税额中抵扣的是
  • python 虚拟环境
  • 汇算清缴的所得税怎么做账
  • 汇算清缴期间费用保险费是什么
  • 帝国cms使用手册
  • 进项票和销项票是什么意思
  • sql2008自动启动服务
  • 软件企业研发费用
  • 太阳能发电的开发条件
  • 结转生产成本是不是成品入库
  • 行程单入账多久钱能到账
  • 销售收入五步法
  • 政府发的奖金需要交个税吗
  • 土地转让需要批准吗
  • 盈余公积的提取基数
  • 本年利润为
  • 事业单位基建账套会计科目
  • 余利宝本金会亏吗
  • 银行期初余额录少了怎么办
  • 外出经营预缴税款表怎么填
  • 公司既没有收入怎么办
  • 物料损耗率计算例题及答案
  • 建筑工地塔吊租赁会计分录
  • mysql 备份和恢复
  • 清理c盘清理
  • win10怎么查看windows版本
  • find命令支持哪些查找方式
  • win7系统怎么启用本地连接
  • 如何制作u盘启动盘
  • 垂直翻转画布
  • 左手linux+gdb,右手unity+vs,一个bit一个bit地去调试是种什么体验
  • jQuery Easyui datagrid editor为combobox时指定数据源实例
  • [置顶]bilinovel
  • system命令行
  • 常用的批处理文件
  • 深入学习习总书记系列讲话精神
  • 怎么撤销税务三方协议
  • 安徽省工商总局
  • 个人医保缴费证明怎么打印
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设