这篇文章主要讲解的是关于Java反序列化以及针对Java的Burp攻击插件(Java Serial Killer)。如果你想要下载这个插件,请直接忽略这篇文章,然后直接访问该项目的Github页面进行下载安装即可。
近期,研究人员发现了大量的Java反序列化攻击。这项技术给广大渗透测试人员提供了更多的可能性,他们可以利用这种技术来获取与Java应用程序进行通信的底层系统访问权。我们对大量应用程序进行了分析和研究,并且发现:假设程序在通信处理时所采用的协议为HTTP协议,那么我们只需要在应用程序和通信服务器之间建立一条代理链接,就可以直接查看到序列化的HTTP请求信息与HTTP响应信息。在这篇文章中,我们只是假设程序使用的是HTTP协议,除此之外,我们还将会使用到Burp。
Burp代理
在我们的分析过程中,我们使用Burp来代理HTTP请求,在HTTP请求信息的body还中包含有序列化的Java对象,具体信息如下图所示:
在我们的分析过程中,我们得到了一个序列化的Java对象,这个名为“State”的对象由两个字符串组成:capitol(上图中的这个单词拼写错了)和nicknames(代号)。从这里开始,我们就可以对这一请求信息进行分析和操作了。
生成序列化对象
网络上有几款能够生成序列化Java对象的工具,这些工具能够利用软件漏洞来进行攻击。我个人非常喜欢的一款软件是由Chris Frohoff所开发出ysoserial(点击这里访问该项目的Github页面)。除此之外,这款工具还自带有payload生成器。
现在,我们可以以Payload的形式来运行jar文件,并且通过执行特定的指令来生成序列化对象。请确保将你获取到的输出信息保存至一个新建文件中:
java -jar ./ysoserial-0.0.4-all.jar CommonsCollections1 'ping netspi.com' > payload
然后,我们就可以选中文件内容,然后点击鼠标右键,从弹出的菜单中选择“(Paste form file)复制”,这样就可以将序列化的输出信息拷贝至Burp之中了:
在进行了上述操作之后,我们将得到如下图所示的结果:
利用Burp生成序列化对象
Ysoserial的功能非常强大,但是如果工具支持我进行自定义设置的话,那么我肯定会这样做。我所指的自定义设置是:我不喜欢在命令行与Burp之间来回地切换,所以我开发出了一个Burp插件-Java Serial Killer,这款插件可以帮助我对输出对象进行序列化处理。从本质上来看,这款插件实际上就是Repeater标签所实现功能(Ysoserial使用这个组件来生成Payload)的修改版。
在使用这个插件时,我们只需要在窗口中选中POST请求信息,然后点击鼠标右键,选择“Send to Java Serial Killer”选项即可。
点击上述选项之后,Burp中将会出现一个新的标签。在这个标签中,我们可以看到其内容与Raw标签中所显示的请求信息是一样的,只是我们需要在另一个窗口中来对信息进行处理。
在Java Serial Killer标签页中可以看到很多功能按钮,这些功能包括发送请求信息,序列化body数据,选择payload类型,以及执行特定指令等等。
比如说,我们想使用支持CommonsCollections1的payload来ping netspi.com,因为我们知道目标站点运行了Commons-Collections 3.1。我们只需要在下拉菜单中设置payload,然后在命令栏中输入我们所要执行的命令,最后按下“Serialize(序列化)”按钮即可。点击界面中的那个问号按钮,系统将会显示payload的类型,如果你还想获取更多的详细信息,系统还会给你显示当前目标软件的版本信息。
现在,在请求信息中的序列化对象之中,就包含有我们需要执行的命令了。在点击了“Go”按钮之后,软件会将请求信息发送至目标系统之中,然后还会在右侧的信息栏中显示该请求所对应的响应信息。如果你使用的是Repeater,你也可以按照这样的方式发送请求信息。如果你想要使用其他类型的Payload,你只需要选择一个新的Payload,然后再次点击“Serialize”按钮即可。
由于Chris Frohoff目前正在为ysoserial添加更多类型的Payload,所以我也准备对Java Serial Killer进行相应的更新。
结论
我已经将这款插件提交给了Burp应用商店,我希望相关技术人员能够尽快允许这款插件上架。但是,如果你想要现在就尝试使用这款插件的话,你可以直接从本项目的Github主页中获取。但是请注意,在使用这款插件之前,请确保你的计算机中安装了Java 8。
发表评论
您还未登录,请先登录。
登录