java反序列化漏洞已经被曝出一段时间了,其强大的破坏力让我们防不胜防!有没有合理的方法扫描、解决这些漏洞呢?小编给大家带来Java反序列化终极测试工具,直接将Jboss、Websphere和weblogic的反序列化漏洞的利用集成到了一起。有需要下!
Java反序列化漏洞产生的原因
在java编写的web应用与web服务器间java通常会发送大量的序列化对象例如以下场景:
HTTP请求中的参数,cookies以及Parameters。
RMI协议,被广泛使用的RMI协议完全基于序列化
JMX 同样用于处理序列化对象
自定义协议 用来接收与发送原始的java对象
在序列化过程中会使用ObjectOutputStream类的writeObject()方法,在接收数据后一般又会采用ObjectInputStream类的readObject()方法进行反序列化读取数据。其代码示例如下:
结果如图:
上述代码中的java类ObjectInputStream在执行反序列化时并不会对自身的输入进行检查,意味着一种可能性,即恶意攻击者构建特定的输入,在ObjectInputStream类反序列化之后会产生非正常结果。而根据最新的研究,利用这一方法可以实现远程执行任意代码。
为了进一步说明,可以针对对上述代码进行了一点修改:
结果:
主要修改为自定义了一个被序列化的对象myobject,通过定义myobject实现了java序列化的接口并且定义了一种名为“readObject”的方法。通过对比上面例子的输出,可以发现反序列化的相关数值被修改了,即执行的用户自身的代码。造成结果不同的关键在于readObject方法,java在读取序列化对象的时候会先查找用户自定义的readObject是否存在,如果存在则执行用户自定义的方法。
Java反序列化终极测试工具功能介绍
1、本地命令执行并回显,无须加载外部jar包,支持纯内网环境检测。
2、支持JBoss、WebSphere和Weblogic的反序列化漏洞检测。
3、支持https数据传输。
4、支持文件目录列表。
Java反序列化终极测试工具怎么用
0X01 WebSphere的反序列化漏洞利用过程
WebSphere的反序列化漏洞发生的位置在SOAP的通信端口8880,使用的通信协议是https,发送的数据是XML格式的数据。
将我们构造的执行命令的payload通过base64编码后放在objectname节点中,通过https发送到服务器端,服务器端调用相应的执行函数,将结果发送给客户端,同样的,返回的数据也是经过base64编码的。
WebSphere的Payload和JBoss的基本一致。如下是执行命令的payload。
将命令执行结果以字符隔开,这样在客户端获取数据后,可通过split、substring等方法对命令的执行结果进行解析。解析命令的源码如下:
0X02 文件列表读取
获取文件列表的功能是通过Java的listRoot和listFiles来实现的,获取文件和目录列表的过程和命令执行大概相同。在这我就简单的描述一下过程:如果传入方法的是一个空值,那么就通过Files.listRoot获取根目录或者驱动器列表,否则,传入的值是路径的话,就通过file.listFiles方法获取目录下的所有文件和目录,将获取到的目录名放到{}中,将文件名放在[]中,这样,就方便我们在程序中对获取到的数据进行解析。
获取目录的payload代码如下:
解析的时候,先将执行结果分离出来,再对结果base64解码,再进一步区分目录和文件,分别添加到界面的目录树中。
注:设计时为了美观,使用了JavaFX来设计界面,运行时需要JDK1.8环境。
软件名称:
jdk1.7 32位下载
软件版本:
1.8.0.25 官方最新版
软件大小:
155.7M
软件语言:
中文
适用平台:
WinXP, win7, WinAll
PC官方版
安卓官方手机版
IOS官方手机版