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

  • 三个细节提升电子商城网站用户体验度(如何提高电能质量指标)

    三个细节提升电子商城网站用户体验度(如何提高电能质量指标)

  • 苹果11视频聊天怎么美颜(苹果11视频聊天发黄)

    苹果11视频聊天怎么美颜(苹果11视频聊天发黄)

  • 抖音死粉怎么清理(抖音死粉要清理吗)

    抖音死粉怎么清理(抖音死粉要清理吗)

  • 微信群代办和群公告一样吗(微信里的群代办是怎么回事)

    微信群代办和群公告一样吗(微信里的群代办是怎么回事)

  • 抖音不绑定手机号可以上热门吗(抖音不绑定手机号可以登陆吗)

    抖音不绑定手机号可以上热门吗(抖音不绑定手机号可以登陆吗)

  • 手机0TG是什么意思

    手机0TG是什么意思

  • 抖音访客怎么查询(抖音访客怎么查具体时间)

    抖音访客怎么查询(抖音访客怎么查具体时间)

  • 闲鱼卖家不在如何联系(闲鱼卖家不见了怎么办)

    闲鱼卖家不在如何联系(闲鱼卖家不见了怎么办)

  • 淘宝被恶意申请仅退款怎么办(淘宝被恶意申请假冒品牌退款会有售假记录吗?)

    淘宝被恶意申请仅退款怎么办(淘宝被恶意申请假冒品牌退款会有售假记录吗?)

  • ipad3没法用微信(ipad3不能用微信)

    ipad3没法用微信(ipad3不能用微信)

  • 联想一键恢复会删除其他盘数据吗(联想一键恢复会删除桌面上的文件吗)

    联想一键恢复会删除其他盘数据吗(联想一键恢复会删除桌面上的文件吗)

  • 安卓和谷歌是什么关系(谷歌和安卓的区别)

    安卓和谷歌是什么关系(谷歌和安卓的区别)

  • 红米k30微信视频怎么美颜(红米k30微信视频美颜)

    红米k30微信视频怎么美颜(红米k30微信视频美颜)

  • 集成运算放大器输入级的特点(集成运算放大器的基本组成单元是)

    集成运算放大器输入级的特点(集成运算放大器的基本组成单元是)

  • 快手直播间被警告B类违规有什么影响吗(快手直播间警告提示)

    快手直播间被警告B类违规有什么影响吗(快手直播间警告提示)

  • 视频怎么加长腿特效(视频怎么加长腿瘦身)

    视频怎么加长腿特效(视频怎么加长腿瘦身)

  • 抖音初始密码是多少(抖音账号初始密码是多少)

    抖音初始密码是多少(抖音账号初始密码是多少)

  • 知道qq音乐怎么查qq号(qq音乐怎么通过qq号找人)

    知道qq音乐怎么查qq号(qq音乐怎么通过qq号找人)

  • 华为手机分屏怎么用(华为手机分屏怎么变成上下分屏)

    华为手机分屏怎么用(华为手机分屏怎么变成上下分屏)

  • 小米手机小爱桌面怎么关闭(小米手机桌面小爱)

    小米手机小爱桌面怎么关闭(小米手机桌面小爱)

  • appstore面容ld用不了(苹果app用面容 id)

    appstore面容ld用不了(苹果app用面容 id)

  • 陌陌和探探有什么区别(陌陌跟探探的区别)

    陌陌和探探有什么区别(陌陌跟探探的区别)

  • 电脑视频聊天没声音如何弄(电脑视频聊天没有画面只有声音怎么回事)

    电脑视频聊天没声音如何弄(电脑视频聊天没有画面只有声音怎么回事)

  • qq邮箱被拦截的邮件如何恢复(QQ邮箱被拦截的邮件)

    qq邮箱被拦截的邮件如何恢复(QQ邮箱被拦截的邮件)

  • 分享在php代码中调用帝国cms头部变量temp.header的方法(php微信分享源码)

    分享在php代码中调用帝国cms头部变量temp.header的方法(php微信分享源码)

  • 纳税检查调整的销售额确认收入吗
  • 资产负债表里的应收账款怎么取数
  • 房产税的纳税义务人是征税范围内房屋产权所有人
  • 工资绩效被扣除怎么办
  • 外购入库暂估补差单怎么去除
  • 财务会计制度名称一般是
  • 甲公司自2018年3月1日开始自行研发一款新兴产品
  • 计划成本下存货盘盈
  • 教育用地转让缴哪些税
  • 职工基本医疗保险单位交的钱去哪里了
  • 出口发票税率是怎么算的
  • 出口退税申报系统汇率修改
  • 制造费用结转生产成本金蝶怎么操作
  • 提取法定盈余公积比例
  • 固定资产并账
  • 初始数据试算表不平衡的原因
  • 违约金没有发票
  • 公司购买银行理财产品会计分录怎么写
  • 增值税10000交多少税
  • 劳务报酬2019
  • 增值税负数如何计算
  • 股权转让印花税减半征收政策
  • 商砼税收政策
  • 个人所得税工资和实际工资对不上
  • 商品进销差价如何结平
  • 红冲的普通发票要给对方吗
  • 收据和发票有什么区别?买家电
  • 生产成本和制造费用属于存货吗
  • 如何获取文件夹下所有文件
  • 要求快速启动
  • php str split
  • Win11 Build 22000.348更新补丁KB5007262预览版发布(附更新修复内容汇总)
  • 分公司改为子公司的所得税业务处理?
  • php基于SQLite实现的分页功能示例
  • 房开企业增值税扣除土地价款包括契税吗
  • 如何配置phpstudy
  • wordpress 函数
  • 餐饮管理公司开发票
  • 建筑会计和会计的区别
  • 事业单位一级项目和二级项目区别
  • 年金现值系数和复利现值系数的公式
  • 企业销售旧车如何开票
  • 尚未报送年度会计报表
  • 帝国cms移动端
  • 如何对php网站页面进行修改
  • vue was assigned to but
  • mongodb建立索引的命令
  • 固定资产清理是什么科目
  • 预付卡账务处理在注会
  • 销售费用工资是什么科目
  • 销售旧货和销售使用过的固定资产区别
  • 员工补助每月申报怎么填
  • 缴纳上月应交未交税费
  • 电脑计入固定资产了怎么抵企业所得税
  • 土地使用权的界定
  • 租金收入什么时候交房产税
  • 企业非流动资产包括
  • 软件产品增值税即征即退
  • 对于成员单位归集至集团母公司账户的资金
  • 持有至到期投资账务处理
  • 公允价值的通俗理解
  • 加班餐费报销计入什么费用
  • mysql的分区表
  • mac os x10.6
  • win8 设置打不开
  • win8应用商店废了
  • win8使用技巧 图文
  • js实现图片放大功能
  • windows定时计划
  • python程序的开发过程
  • python中用input()函数接收到的数据为
  • shell发送邮件
  • javascript用处
  • android 快速开发工具
  • 住宿发票税率1%怎么回事
  • 土地增值税清算时间要求
  • 福州电动车怎么报废处理
  • 收购晾晒烟叶,支付价款20万元,支付价外补贴2万元
  • 资源税的征税对象和纳税环节
  • 吉林省职称查询入口
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设