Weblogic 常见漏洞分析

WebLogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

WebLogic常用端口7001/7002,常见漏洞有弱口令导致上传任意war包、SSRF漏洞和反序列化漏洞。我们对以下漏洞做了详细的分析:

  • 弱口令
  • ssrf CVE-2014-4210
  • 反序列化 CVE-2015-4852
  • WLS 组件远程代码执行 CVE-2017-10271
  • 反序列化 CVE-2018-2628
  • 反序列化 CVE-2018-2894

弱口令导致webshell

WebLogic Server 版本: 10.3.6.0
Java版本:1.6

后台ip:7001/console, 弱口令为weblogic / Oracle@123

weak-passwd

在此版本中,如果存在任意文件下载漏洞,可获取弱AES加密的密钥,从而获得密码。在这里,vulhub提供了一个任意文件下载的漏洞,在/hello/file.jsp?path=xxx这里

利用的原理是这样,weblogic密码使用对称加密,密钥存储于/security/SerializedSystemIni.dat,而加密后的密钥存储于/config/config.xml所以通过任意文件下载,可以解密密码。

key encrypted-passwd

最后解密得到Oracle@123

上传webshell

由于可以进入后台管理,则可以安装任意web应用,这里我建了webapp,然后把内容替换成jsp一句话木马,传上去可以看到:

png

SSRF CVE-2014-4210

影响版本:10.0.2、10.3.6

这个漏洞存在于weblogic 内置自带的uddiexplorer中,是用于web service查询与定位的。

Universal Description, Discovery and Integration (UDDI) is a platform-independent, Extensible Markup Language protocol that includes a (XML-based) registry by which businesses worldwide can list themselves on the Internet, and a mechanism to register and locate web service applications. UDDI is an open industry initiative, sponsored by the Organization for the Advancement of Structured Information Standards (OASIS), for enabling businesses to publish service listings and discover each other, and to define how the services or software applications interact over the Internet.

通过访问http://192.168.218.128:7001/uddiexplorer/SearchPublicRegistries.jsp可以看到有一个搜索界面,其中的operator字段存在SSRF漏洞:

ssrf

修改端口和IP可以用来内网扫描。

之后涉及的漏洞都跟 java 反序列化有关,关于java序列化相关内容,可以看我的这篇文章Java 序列化与反序列化 & 反序列化漏洞相关。PHP的反序列化及漏洞在PHP反序列化相关漏洞总结阐述过,原理与java一致,推荐两个进行对比,可以发现设计的思路都是一致的。

反序列化 CVE-2015-4852

当年apache commons collections出来的时候,横扫了各种java web容器,weblogic也不例外,关于漏洞的原理,可以参考我的上篇文章,做了极致详细的分析Java 序列化与反序列化 & Apache Commons Collections反序列化漏洞

根据之前的分析可以知道,我们利用的条件有2个:

  1. 使用了apache commons collections 3.2.1以下版本
  2. 有地方接收反序列化对象

发现在weblogic一些版本中,可以通过T3协议向7001端口发送数据,会包含反序列化内容,从而可以被我们利用。这里我们使用官方的POC,(也可直接将之前文章的payload复制)

我们发送t3数据如下:

t3

之后我们发送我们的payload

p1

我们可以看到,其命令为ping 192.168.253.130:

ping

最终监测发现命令执行成功:
response