告别脚本小子系列丨JAVA安全(6)——反序列化利用链(上)

0x01 前言

我们通常把反序列化漏洞和反序列化利用链分开来看,有反序列化漏洞不一定有反序列化利用链(经常用shiro反序列化工具的人一定遇到过一种场景就是找到了key,但是找不到gadget,这也就是在这种场景下没有可利用的反序列化利用链)。如果我们向某个漏洞提交平台提交一个反序列化漏洞,但是不给反序列化利用链,那么平台大概率是不会接受这种漏洞的。

反序列化利用链是整个反序列化利用过程中最关键的一环,通常反序列化利用链需要借助常用的第三方jar包,其中最有名的就是CommonCollections利用链(简称CC链)。

1

告别脚本小子系列丨JAVA安全(1)——JAVA本地调试和远程调试技巧

2

告别脚本小子系列丨JAVA安全(2)——JAVA反编译技巧

3

告别脚本小子系列丨JAVA安全(3)——JAVA反射机制

4

告别脚本小子系列丨JAVA安全(4)——ClassLoader机制与冰蝎Webshell分析

5

告别脚本小子系列丨JAVA安全(5)——序列化与反序列化

**0x02 ** 反序列化环境准备

为了更方便初学者来学习反序列化利用链,我们首先要准备当前需要的实验环境。学习反序列化利用链最好的办法是参考ysoserial(https://github.com/frohoff/ysoserial),ysoserial是一个开源的集成化反序列化利用链工具,可以快速生成反序列化利用链payload。

如果是不追求细节的小伙伴,可以直接按照参照ysoserial使用文档来生成payload,如下图所示。本文的主要目的是教会小伙伴们告别脚本小子,所以就不直接使用编译好的jar包,但是我们后面很多利用代码会参考ysoserial中的代码,ysoserial中关于反序列化利用链的代码都在ysoserial.payloads包中。我们的目的是不通过ysoserial框架,自己实现相应的反序列化利用链。我们搭建反序列化测试的基础环境,新建maven项目,添加项目依赖的jar包。为了模拟序列化和反序列化的过程,编写两个公用的静态方法,这两个方法将在后面的反序列化利用链中被多次使用。其中searialize方法的作用是把对象obj序列化之后保存到文件filename中,unserialize方法的作用是把文件filename中的数据读出来反序列化为对象。通过读写文件来模拟序列化和反序列化的过程是最直观的实现方式,但是在实际环境中,我们遇到的都是基于POST输入的字符输入流来进行反序列化,如下图所示。本地读写文件的反序列化和基于POST输入字符的反序列化是完全没有区别的,所以我们后面在研究反序列化利用链的时候都是通过本地文件读写的方式来实现,而不会准备专门的WEB漏洞环境。

某系统反序列化漏洞实例

0x03 反序列化利用链

0x3.1 URLDNS利用链<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值