java restfulapi 返回文件base64_Java反序列化:一次构造后Ysoserial Payload

本文介绍了在安全测试中发现的一个Java反序列化漏洞,涉及RESTful API返回Base64编码的文件。文章详细讲解了利用Ysoserial构造Payload时遇到的问题,包括类版本不匹配和Zlib Deflate压缩。解决方案包括在Ysoserial中直接压缩对象,匹配SerialVersionUID以及在运行时修改SerialVersionUID。最后,文章提醒关注业务应用中Base64编码值的安全性。
摘要由CSDN通过智能技术生成

前言

在一次应用安全测试中发现了一个的Java反序列化漏洞,该漏洞最终导致未经身份验证的远程代码执行。经过实践,发现利用此漏洞并不像之前使用Ysoserial生成默认payload那样简单。

所以在本篇文章中,我将逐步介绍并修改Ysoserial的使用过程以及在其中所遇到的问题。

6fa9a1c0fd739331df0f5a57e0c0d584.png


漏洞利用点

问题一:直接的Payload无法利用

发现点是位于一个解码base64参数的地方,该参数返回了一个像blob类型的二进制数据。

d1fc7a06a3e1df097b89677c36eb18ac.png

在尝试使用了各种编码和解压缩算法的解码之后,最后发现它是一个用Zlibdeflate算法压缩后的JAVA序列化对象。

Zlib deflate压缩算法:https://blog.csdn.net/u010037928/article/details/90717474

当数据发送到后端后,负责反序列化对象的函数将首先解压缩对象,再进行反序列化。如果看到一个base64编码后的参数,解码后会返回一个blob类型的数据,那就多尝试一些常见通用的编码及解压缩算法,看会不会得到一些有用的数据。

BurpSuite有一款插件叫做Hackvertor,内置很多编码和压缩算法。

b9dd4f9307e91ed4f870cc8df139dd2f.png

Hackvertor对参数进行base64解码,然后使用deflate_decompress将其解压缩,这时会得到一个序列化后的Java对象。

399840ba990cb15c770540e669ad92b3.png

接下来尝试在发送请求之前去使用解压缩后Ysoserial的Payload,但是实践了发现毫无作用,因为就算当Payload在服务器端成功的反序列化之后,如果利用不成功,也不能执行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值