学习
实践
活动
工具
TVP
写文章
专栏首页卓文见识从Kryo反序列化到Marshalsec框架到CVE挖掘

从Kryo反序列化到Marshalsec框架到CVE挖掘

一、关于Kryo

Kryo 是一个快速序列化/反序列化工具,其使用了字节码生成机制。Kryo 序列化出来的结果,是其自定义的、独有的一种格式,不再是 JSON 或者其他现有的通用格式;而且,其序列化出来的结果是二进制的(即 byte[];而 JSON 本质上是字符串 String),序列化、反序列化时的速度也更快。

很多大型软件都使用了这个库:

其相对于其他反序列化类的特点是可以使用它来序列化或反序列化任何Java类型,而不需要实现Serializable。

二、Kryo的使用

Kryo序列化使用kryo.writeObject(output)方法,反序列化使用kryo.readObject(input)或

kryo.readClassAndObject(input),此外还支持替换策略StdInstantiatorStrategy,写个Demo:

可以看到Kryo的反序列化速度极快。

三、反序列化漏洞

能搜索到的Kryo反序列化漏洞资料较少,只有marshalsec的pdf文件这样一段介绍:

翻译过来如下, Kryo有两种反序列化漏洞:Kryo原生和替换策略StdInstantiatorStrategy,其对应的gadgets也不同,此外还存在一些finalize的附加危害(后反序列化漏洞):

四、从marshalsec到漏洞复现

这里直接拿marshalsec的代码讲解漏洞原理及利用链,可以从github上直接下载工程文件到本地编译使用:

https://github.com/mbechler/marshalsec

工程目录结构较简单,marshalsec目录下的是模拟各种反序列化包的使用场景,如Kryo.java,可见其继承MarshallerBase并实现了SpringAbstractBeanFactoryPointcutAdvisor和CommonsBeanutils,后者就是我们可使用的gadget:

这里重点在unmarshal方法里对输入in进行readClassAndObject反序列化操作,main方法执行run方法,跟进这个run方法,来到其继承的类MarshallerBase,这里对参数args进行校验,分别是我们在jar包里使用的[-a] [-v] [-t]:

指定后最终在test方法里调用特定gadget进行攻击:

而测试类最终也是走到这里,调用对应的unmarshal方法,从而完成整个调用链:

SpringAbstractBeanFactoryPointcutAdvisor为例具体攻击链如下:

关键点在于Kryo将数据反序列化为对象时,在对Map类的数据进行操作时调用了HashMap.put()方法,而后调用DefaultBeanFactoryPointcutAdvisor的equals方法,跟进getAdice中的this.beanFactory.getBean,参数为this.adviceBeanName,其值为ldap://x.x.x.x:1389/obj(攻击者可控),getBean方法接着调用this.doGetSingleton方法, doGetSingleton中调用了JndiLocatorSupport.lookup方法,最终利用JNDI进行RCE。

另外需注意的是payload中将SimpleJndiBeanFactory中的logger设置为NoOpLog而不是使用原来的SLF4JLog,是因为Kryo需要序列化的类有一个无参数的构造函数,只有NoOpLog符合这一点。

CommonsBeanutils的调用链也类似,参照Xstream的调用链。

五、防护手段

1)结合业务场景尽量使用kryo.readObject而不是kryo.readClassAndObject;

2)通用方法:反序列化类设置白名单。

六、后反序列化

这里聊一下上面提到的后反序列化,可以参考这篇:

https://www.contrastsecurity.com/security-influencers/serialization-must-die-act-1-kryo-serialization

或者这篇:

https://paper.seebug.org/1133/

研究了一下,比较有意思,之前关注点都集中在反序列化过程中的触发点而忽略了反序列化之后的攻击面,主要是tostring方法,如IDEA:

还有finalize方法,其作用一般是用来做序列化之后的资源回收,如org.jpedal.io.ObjectStore类中的finalize方法:

可见其调用了flush方法,接着根据imagesOnDiskAsBytes中包含的文件路径依次删除。 我们可以通过以下代码,强制其finalize:

从而实现删除任意文件的效果:

调用链如下:

除此之外还有关闭任意文件、内存损坏、绕过反序列化黑名单等思路,有兴趣可以继续研究。

七、扩展:CTF+CVE

1)从Kryo反序列化到TCTF:

https://github.com/Tom4t0/My-CTF-Challenges/tree/master/tctf2018_finals

2)从marshalsec到CVE:

研究一下Marshalsec各种pop链,或许可以获得一些刷CVE的新思路。

文章分享自微信公众号:
卓文见识

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:Jayway
原始发表时间:2020-04-28
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • CVE-2020-14825:Weblogic反序列化漏洞复现

    Weblogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JavaEE架构的中间件,Weblogic是用于开发、集...

    Timeline Sec
  • Hessian 反序列化及相关利用链

    前不久有一个关于Apache Dubbo Http反序列化的漏洞,本来是一个正常功能(通过正常调用抓包即可验证确实是正常功能而不是非预期的Post),通过Po...

    Seebug漏洞平台
  • RubyMiner挖矿程序24小时内影响全球30%的网络

    近日,Check Point 的安全研究人员发现了 RubyMiner 恶意软件家族,针对全球的 web 服务器发起攻击,并试图利用这些服务器挖掘门罗币。24 ...

    FB客服
  • Shiro RememberMe 漏洞检测的探索之路

    Shiro 是 Apache 旗下的一个用于权限管理的开源框架,提供开箱即用的身份验证、授权、密码套件和会话管理等功能。该框架在 2016 年报出了一个著名的漏...

    用户2202688
  • 独孤九剑-Spark面试80连击(上)

    场景描述:这是一个Spark的面试题合集。是我自己作为面试者和作为面试官都会被问到或者问到别人的问题,这个总结里面有大量参考了网上和书上各位老师、大佬的一些原文...

    王知无-import_bigdata
  • 全套实战网站漏洞检测(src无码)这是一篇正经的漏洞检测报告

    本篇文章的内容,基于一个很久之前的委托,当时因为被挂马委托了我,但是我当时因为某些事情耽误了,后来网站因为某些原因也废弃不用了,虽然不用了但是仍然挂在服...

    网e渗透安全部
  • 【BlackHat 2017 议题剖析】连接的力量:GitHub 企业版漏洞攻击链构造之旅

    作者:Orange (orange@chroot.org ) 知道创宇404实验室 独家授权翻译 原文地址:http://blog.orange.tw/201...

    Seebug漏洞平台
  • 干货 | 渗透测试全流程归纳总结

      从旁观者的角度了解整个WEB应用乃至整个目标的全貌,但是资产是收集不完的,可以边收集,边进行一定程度的测试。信息收集最小的粒度应是目录。

    HACK学习
  • CVE-2022-21703:针对 Grafana 的跨域请求伪造

    Grafana Labs提供托管 Grafana 实例,但您也可以将 Grafana 部署为自托管实例。它受欢迎的一个迹象是,Gitlab 和 SourceGr...

    Khan安全团队
  • 渗透知识总结

    web应用程序没有对输入的数据进行安全过滤,或者过滤不全面,导致攻击者通过将恶意的SQL语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击。

    LuckySec
  • BUUCTF 刷题笔记——Web 1

    打开靶机,有一个输入框,输入 1 或 2 会回显不同的内容,在地址栏可以看到数据通过 GET 方式上传。

    h-t-m
  • 大数据技术之_19_Spark学习_07_Spark 性能调优 + 数据倾斜调优 + 运行资源调优 + 程序开发调优 + Shuffle 调优 + GC 调优 + Spark 企业应用案例

      每一台 host 上面可以并行 N 个 worker,每一个 worker 下面可以并行 M 个 executor,task 们会被分配到 executo...

    黑泽君
  • 代码审计-dubbo admin <=2.6.1远程命令执行漏洞

    通过结构化的思维进行以软件程序为中心的威胁建模、枚举威胁、缓解威胁、验证来解决四个问题:具体业务是什么?哪些地方可能出现风险?如何规避解决?是否覆盖完整...

    安全乐观主义
  • BIGO 的数据管理与应用实践

    本文整理自 BIGO 在 nMeetp 上的主题分享,主要介绍 BIGO 过去一年在数据管理建设方面的理解和探索。而 BIGO 数据管理的核心重点在于元数据平台...

    NebulaGraph
  • XRAY 扫描器

    XRAY扫描器之前是一位朋友介绍给我用的,说是对挖掘漏洞有很大的帮助,后来我也认真深入做了一番了解,在网上搜集了一些学习的文章资料,主要参考学习了XRAY官方文...

    LuckySec
  • [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析

    前文详细讲解了WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。今天将结合作者的课程作业、论文和理解,以及绿...

    Eastmount
  • 美团的OCR方案介绍

    近年来,移动互联、大数据等新技术飞速发展,倒逼传统行业向智能化、移动化的方向转型。随着运营集约化、数字化的逐渐铺开,尤其是以OCR识别、数据挖掘等为代表的人工智...

    机器学习AI算法工程

扫码关注腾讯云开发者

领取腾讯云代金券