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

  • 悄悄告诉你 百度贴吧推广引流的五大吸金秘诀(悄悄告诉你在线试听)

    悄悄告诉你 百度贴吧推广引流的五大吸金秘诀(悄悄告诉你在线试听)

  • 微信朋友圈显示位置怎么设置(微信朋友圈显示地址怎么设置)

    微信朋友圈显示位置怎么设置(微信朋友圈显示地址怎么设置)

  • 荣耀手表magic2对比华为gt2(荣耀magicwatch2和荣耀手表2区别)

    荣耀手表magic2对比华为gt2(荣耀magicwatch2和荣耀手表2区别)

  • qq可以查到对方位置吗(qq可以查到对方ip地址吗)

    qq可以查到对方位置吗(qq可以查到对方ip地址吗)

  • 闲鱼玩家有流量扶持吗(闲鱼玩家流量卡)

    闲鱼玩家有流量扶持吗(闲鱼玩家流量卡)

  • 苹果手机能加内存吗(苹果手机能加内存容量吗)

    苹果手机能加内存吗(苹果手机能加内存容量吗)

  • type mismatch啥意思(type specifier mismatch)

    type mismatch啥意思(type specifier mismatch)

  • 户户通绿灯不亮无信号(户户通绿灯不亮无信号怎么调星)

    户户通绿灯不亮无信号(户户通绿灯不亮无信号怎么调星)

  • 手机网络正常却不能用(手机网络正常却打不开B站)

    手机网络正常却不能用(手机网络正常却打不开B站)

  • 华为手机怎么没有应用市场(华为手机怎么没有返回键)

    华为手机怎么没有应用市场(华为手机怎么没有返回键)

  • 三星s20屏幕分辨率是多少(三星s20手机屏幕分辨率)

    三星s20屏幕分辨率是多少(三星s20手机屏幕分辨率)

  • 信息网主要划分为(信息网主要划分为什么)

    信息网主要划分为(信息网主要划分为什么)

  • 怎样知道对方退出微信(怎样知道对方退没退企业微信)

    怎样知道对方退出微信(怎样知道对方退没退企业微信)

  • iphone11怎么关闭所有应用(iphone11怎么关闭静音模式)

    iphone11怎么关闭所有应用(iphone11怎么关闭静音模式)

  • 小米mix2s支持5a快充吗(小米mix2s支持磁吸充电吗)

    小米mix2s支持5a快充吗(小米mix2s支持磁吸充电吗)

  • 华为p30手电筒怎么放桌面(华为p30手电筒怎么设置一闪一闪的)

    华为p30手电筒怎么放桌面(华为p30手电筒怎么设置一闪一闪的)

  • 红米note8pro怎么唤醒小爱同学(红米note8pro怎么降级)

    红米note8pro怎么唤醒小爱同学(红米note8pro怎么降级)

  • opporeno录屏没声音(opporeno录屏没有声音)

    opporeno录屏没声音(opporeno录屏没有声音)

  • 苹果11夜间模式怎么开(苹果11夜间模式怎么开拍照)

    苹果11夜间模式怎么开(苹果11夜间模式怎么开拍照)

  • 抖音一天能改几次资料(抖音一天能改几个ip地址)

    抖音一天能改几次资料(抖音一天能改几个ip地址)

  • 相册看不到保存的图片(我的相册里面为什么没有我保存的图片)

    相册看不到保存的图片(我的相册里面为什么没有我保存的图片)

  • pr水墨画效果怎么做(pr水墨调色)

    pr水墨画效果怎么做(pr水墨调色)

  • iphone突然连不上蓝牙耳机(iphone连不上网)

    iphone突然连不上蓝牙耳机(iphone连不上网)

  • 进项税额属于什么账户
  • 资产的计税基础怎么计算
  • 单独计价作为固定资产入账的土地为什么不计提折旧
  • 无追索权保理占用谁的额度
  • 国际多式联运必须具备的基本条件是什么
  • 存货清查的结果
  • 企业所得税汇算清缴补缴税款分录
  • 提前竣工的规定是什么
  • 注册资本认缴与实缴会计如何做账
  • 保证金转租金的会计处理
  • 给客户现金回款怎么写
  • 有发票和银行单据的区别
  • 收到工程施工进度款如何记账
  • 员工借款后离职怎么办
  • 管理人员工资计入管理费用吗
  • 监控维护需要什么经营范围
  • 小规模季度不超30万需要交什么税
  • 专家评审费需要多少钱
  • 劳务派遣个税怎么扣
  • 租金收入发票税目
  • 利润表本月金额怎么算
  • 未确认融资费用的期初余额
  • 研发支出的二级科目是什么
  • 视同销售财税处理怎么做?
  • 外购无形资产如何摊销
  • 行政事业单位往来票据使用范围
  • 腾讯手游助手怎么卸载
  • 苹果手机系统更新在哪里找
  • 听证方式有几种
  • 收到收据的会计分录
  • 小企业会计准则下融资租入固定资产的核算
  • 企业预缴电费会退回吗
  • php快递查询系统
  • 在win10中如何设置在开始菜单中显示应用列表
  • 中秋节给员工购物文案
  • Linux系统中sort排序命令的使用教程
  • 滴水观音的养殖方法选好浇水
  • 预缴和清缴的会计科目
  • 外单位承担
  • f12开发者工具调试打不开
  • 董事费属于什么费用
  • 应付帐款借方余额怎么算
  • 前端 input
  • php生成随机字母数字代码
  • 微信开发怎么实现
  • defaultpool
  • php短信验证
  • php和mysql的软件怎么部署
  • 境外公司委托境内公司付款
  • 利润表三步法
  • mysql线程数配置
  • 软件研发主要研发啥软件
  • 售后服务费计提政策
  • 影响公司股利分成的因素
  • 企业的专利年费是多少
  • 企业捐赠自产产品的所得税处理
  • 个体的个人所得税怎么交税?
  • 园林绿化行业的市场需求是什么
  • 企业支付临时工劳务报酬需要取得发票吗
  • 计件工资怎么算公式
  • 市场费用科目
  • 支付收购股权款如何做账
  • 农产品怎么自产自销
  • 人力资源外包服务费计入什么科目
  • 净利润增长率的影响因素
  • 工人的工资占企业的比例
  • 投资回报怎么写
  • Windows Server 2008中安装DNS服务器详细图文教程
  • azipmd5.exe是什么
  • win7打开游戏显示已停止工作
  • win10如何彻底关掉自动锁屏
  • excel 级联
  • Python自然语言处理PDF
  • express的中间件
  • 技术总结结束语
  • javascript面向对象编程
  • jQuery判断checkbox选中状态
  • android中的常用布局有哪几种?
  • Python的collections模块中的OrderedDict有序字典
  • 发生技术入股递增怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设