前言
在一次应用安全测试中发现了一个的Java反序列化漏洞,该漏洞最终导致未经身份验证的远程代码执行。经过实践,发现利用此漏洞并不像之前使用Ysoserial生成默认payload那样简单。
所以在本篇文章中,我将逐步介绍并修改Ysoserial的使用过程以及在其中所遇到的问题。
漏洞利用点
问题一:直接的Payload无法利用
发现点是位于一个解码base64参数的地方,该参数返回了一个像blob类型的二进制数据。
在尝试使用了各种编码和解压缩算法的解码之后,最后发现它是一个用Zlibdeflate算法压缩后的JAVA序列化对象。
Zlib deflate压缩算法:https://blog.csdn.net/u010037928/article/details/90717474
当数据发送到后端后,负责反序列化对象的函数将首先解压缩对象,再进行反序列化。如果看到一个base64编码后的参数,解码后会返回一个blob类型的数据,那就多尝试一些常见通用的编码及解压缩算法,看会不会得到一些有用的数据。
BurpSuite有一款插件叫做Hackvertor,内置很多编码和压缩算法。
Hackvertor对参数进行base64解码,然后使用deflate_decompress将其解压缩,这时会得到一个序列化后的Java对象。
接下来尝试在发送请求之前去使用解压缩后Ysoserial的Payload,但是实践了发现毫无作用,因为就算当Payload在服务器端成功的反序列化之后,如果利用不成功,也不能执行操作。