# Weblogic-CVE-2020-2551-To-Internet
### CVE-2020-2551 POC to use on the Internet
* 测试POC(可用于外网测试)
python CVE-2020-2551.py [HOST] [IP]
* 尝试修改codebase进行远程类加载(失败)
python CVE-2020-TEST.py [HOST] [IP]
# 浅谈 weblogic CVE-2020-2551 漏洞 & 外网POC构造
(首发于安全客,[原文链接](https://www.anquanke.com/post/id/206494))
### 0x00 基础概念
学习这个漏洞需要一些前置知识,比如CORBA与RMI
简单的概述一下:
CORBA是OMG制定的一套技术标准,用于分布式应用,其中用到了IDL进行跨语言支持,客户端与服务端之间用IIOP协议进行通信
RMI是另一种分布式应用技术,在JAVA中可以用JNDI进行简化应用,客户端与服务端使用JRMP协议进行通信,不过在weblogic中RMI使用的是T3协议,关于这个之前也爆出过不少[漏洞](https://blog.knownsec.com/2018/04/weblogic-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9Ecve-2018-2628%E6%BC%AB%E8%B0%88/)
[RMI-IIOP](https://docs.oracle.com/javase/8/docs/technotes/guides/rmi-iiop/tutorial.html#7738)结合了RMI与CORBA各自的优点,通过IIOP协议部署RMI应用
[官方文档](https://docs.oracle.com/javase/8/docs/technotes/guides/rmi-iiop/rmi_iiop_pg.html)也提到:
RMI server objects can use the IIOP protocol and communicate with CORBA client objects written in any language
### 0x01 RMI-IIOP
暂时不提weblogic,先关注一下如何编写一个RMI-IIOP实例:
客户端代码可以参考[Java 中 RMI、JNDI、LDAP、JRMP、JMX、JMS那些事儿(上)](https://paper.seebug.org/1091/#weblogic-rmi)中的[测试项目](https://github.com/longofo/rmi-jndi-ldap-jrmp-jmx-jms/tree/master/rmi-iiop),可以自己编译HelloClient和HelloServer,也可以用测试项目中编译好的
在命令行启动名称服务器(java自带):
```
start orbd -ORBInitialPort 1050
```
命令行开启服务端HelloServer并配置远程调试,关于如何用IDEA进行远程调试,可以参考[这里](https://www.anquanke.com/post/id/201762)开头提到的方法
```
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 HelloServer
```
当然不远程调试直接看结果也行,直接启动
```
java HelloServer
```
命令行开启客户端
```
Java HelloClient
```
此时会弹出计算器,成功远程调试的话,可以看到如下调用栈
![](https://p1.ssl.qhimg.com/t01229669c9075dbb0a.png)
EvilMessage.readObejct()中执行命令
![](https://p4.ssl.qhimg.com/t01bf4871fd59f1812f.png)
题外话:weblogic的[安装](https://badcode.cc/2018/05/20/WebLogic-%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/)与[调试](https://badcode.cc/2018/05/20/WebLogic-%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/)文章
那么weblogic中的RMI-IIOP呢?[关于 Java 中的 RMI-IIOP](https://paper.seebug.org/1105/)这篇文章中有提到关于weblogic RMI-IIOP的利用,在它的基础上进行了一些研究,[Using WebLogic’s RMI over IIOP](https://www.oreilly.com/library/view/weblogic-the-definitive/059600432X/ch04s04.html)讲到几种weblogic使用RMI-IIOP客户端的几种方式,包括:
1.独立RMI客户端(配合jndi,不使用weblogic的任何东西)
2.WebLogic客户端
3.J2EE clients
4.CORBA/IDL clients
前两种方式的区别,看来只是JNDI\_FACTORY设置上的区别
![](https://p4.ssl.qhimg.com/t01bbb532965ba915b4.png)
之前研究weblogic T3反序列化的时候,在weblogic上部署过Helloserver应用,有sayhello()方法可以利用,尝试设置两种JNDI_FACTORY调用一下,使用第二种JNDI\_FACTORY成功调用sayHello()方法
![](https://p5.ssl.qhimg.com/t01d32c56e876358e09.png)
那么修改一下weblogic T3协议的[POC](https://github.com/longofo/rmi-jndi-ldap-jrmp-jmx-jms/blob/master/weblogic-rmi-client/src/main/java/com/longofo/weblogicrmi/Payload1.java),其实只是把RMI修改为了IIOP,发现jtaTransactionManager利用链执行成功,向本地jrmplisten发出了jrmp请求
![](https://p3.ssl.qhimg.com/t018f007a1ba77e682f.png)
看一下流量,在remove()方法调用时,发送remove\__java\_lang\_Object请求,流量中有恶意数据,但没有找到aced魔术头
![](https://p5.ssl.qhimg.com/t01b67a89d59b6b6637.png)
猜测在服务端进行了特殊的解析后,再反序列化数据,看一下调用栈,可以看到后半部分的执行链跟前面原生RMI-IIOP的执行链很像,前面是从CDRInputStream.read_value()触发,这里是从weblogic中IIOPInputStream.read_value()触发,(read_value这个点,在[19年的议题](https://i.blackhat.com/eu-19/Wednesday/eu-19-An-Far-Sides-Of-Java-Remote-Protocols.pdf)上也提到了)
![](https://p5.ssl.qhimg.com/t0112ed8892670dee64.png)
这里请求会首先给clusterableServerRef.invoke()处理,根据不同的invoker调用this.invoker.invoke(),然后这里调用了Mejb_dj5nps_HomeImpl_WLSkel.invoke(),因为是“remove”,所以进入case 6分支调用IIOPInputStream.readObject(),在read_value()方法中解析IIOPInputStream数据并触发反序列化,这个就是利用remove()方法的POC
### 0x02 CVE-2020-2551
Lucifaer师傅的分析[文章](https://lucifaer.com/2020/02/25/WebLogic WLS核心组件RCE分析(CVE-2020-2551)/?from=timeline&isappinstalled=0#2-2-Weblogic解析流程)提到了用bind()方法进行利用,这个也是互联网上主流的利用方式,跟一下调用栈
![](https://p4.ssl.qhimg.com/t010c0953eedd2ce880.png)
跟前面一样,这里请求会首先给clusterableServerRef.invoke()处理,根据不同的invoker调用this.invoker.invoke(),这里调用了CobraServerRef.invoke(),然后在 \_NamingContextAnyImplBase.\_invoke()中,因为va1是“bind_any”,所以进入case 0分支,调用IIOPInputStream.read_any()方法,后面还是会调用IIOPInputStream.read_value()触发反序列,之前说在流量中没有看到aced魔术头,是因为在IIOPInputStream中有一套解析方式,IIOPInputStream的hex-value形式如下,其中包含类名和字段信息:
![](https://p3.ssl.qhimg.com/t01aff53927b8153309.png)
最终会调用恶意类的readObejct()方法
![](https://p3.ssl.qhimg.com/t014ca19d4d751f0f0b.png)
看了一下补丁,发现跟2015年T3反序列化利用的[补丁](https://www.tenable.com/security/research/tra-2016-09)的是同个位置
![](https://p3.ssl.qhimg.com/t0181a34517cc5af375.png)
[WebLogic CVE-2020-2551漏洞分析](https://paper.seebug.org/1138/)的测试中,看到CVE-2020-2551过滤的类位置也是在weblogic.iiop.Utils类中
![](https://p5.ssl.qhimg.com/t013774e3aeaf2d19a0.png)
但是在本地测试的时候,weblogic10.3.6打上2015年的补丁,并没有触发isBlacklisted()函数(但是在MsgAbbrevInputStream与InboundMsgAbbrev中都有调用isBlacklisted()进行黑名单验证,奇奇怪怪。。。)
![](https://p1.ssl.qhimg.com/t0159484bec95bae799.png)
这次CVE-2020-2551的补丁,在weblogic.iiop.Utils.LoadClass()中添加了过滤的verifyclassermitted()方法
![](https://p5.ssl.qhimg.com/t014b82504356994d71.png)
黑名单过滤了恶意类,其中包括JtaTransactionManager的父类com.bea.core.repackaged.springframework.transaction.support.AbstractPlatformTransactionManager,这个类是weblogic自带的,十分危险,在看补丁的时候就有一个想法,因为606行的验证是在LoadClass()之后,那如果在加载className的时候进行了类的加载执行恶意静态代码块不就绕过防御了吗?这个后面再说
### 0x03 模拟IIOP协议构造POC
用JAVA程序写的POC有网络问题,就直接打本地weblogic服务可以,打docker容器或者外网机器不行,提到这个问题的分析文章:
[手把手教你解决Weblogic CVE-2020-2551 POC网络问题](https://xz.aliyun.com/t/7498)
[漫谈 WebLogic-CVE-2020-2551](https://paper.seebug.org/1149/)
下面对POC进行调试,�
没有合适的资源?快使用搜索试试~ 我知道了~
Java漏洞学习笔记 反序列化漏洞.zip
共2000个文件
xml:327个
gif:194个
java:192个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 146 浏览量
2024-11-25
00:29:25
上传
评论
收藏 217.45MB ZIP 举报
温馨提示
Java学习漏洞Java漏洞学习代码及笔记项目TODO剩余代码完善漏洞使用和分析笔记准备中目前文章分析地址在每个包下package-info.javaJava反序列化Java 应用程序Java类加载shiro资本分析weblogic缓存分析快三平台jackson漏洞分析rmi、ldapspring信贷分析目前所有分析文章都在博客http://summersec.github.io后期会转到项目下,所有分析文章写完之后统一转入。项目优势1. 每一个漏洞环境都支持单独运行,方便分析2. 漏洞都有分析文章,完全可以参考文章分析进行3. 即使小白也能看懂4. 每一个部分从基础的知识学习,再到漏洞实战分析,漏洞实战分析主要以最近几年的历史漏洞。5. 由浅入深,由易到难。 项目说明项目 說明java测试 依赖文件都在lib目录下,idea开箱即用沃尔德莫 maven项目依赖需要下载,idea下载编译即可网络逻辑 maven项目,部分依赖需要下载,idea下载编译即可希罗 shiro资本 maven项目,idea下载编
资源推荐
资源详情
资源评论
收起资源包目录
Java漏洞学习笔记 反序列化漏洞.zip (2000个子文件)
$PRODUCT_WORKSPACE_FILE$ 489B
$PROJECT_FILE$ 364B
$PROJECT_FILE$ 364B
$PROJECT_FILE$ 364B
$PROJECT_FILE$ 364B
javac-1.args 10KB
javac.args 8KB
javac-1.args 8KB
javac.args 6KB
BEA-WEBLOGIC-MIB.asn1 1.75MB
WLSS-MIB.asn1 26KB
tempFile.bin 326B
out.bin 266B
SecurityProviders.book 195KB
CoreServer.book 168KB
Connector.book 135KB
App.book 110KB
Ejb.book 107KB
Webapp.book 101KB
Diagnostics.book 101KB
JdbcDataSource.book 88KB
CoreDomain.book 77KB
JmsDestinations.book 68KB
JdbcDatasources.book 63KB
WebService.book 61KB
Persistence.book 59KB
CoreCluster.book 53KB
UniformDistDestination.book 53KB
SecurityRealm.book 50KB
CoreWork.book 49KB
JmsServer.book 46KB
SAFAgent.book 44KB
Xmlregistry.book 43KB
Snmp.book 42KB
JMSSystemModules.book 28KB
JmsDistributeddestinations.book 27KB
SAFDestination.book 26KB
SnmpMonitors.book 23KB
JmsForeignjms.book 23KB
ForeignJNDI.book 20KB
JmsTemplates.book 20KB
CoreMachine.book 20KB
CoreTasks.book 20KB
JmsStores.book 19KB
CredentialProvider.book 19KB
CoreMigration.book 19KB
TokenHandler.book 18KB
JMSModules.book 18KB
Archive.book 17KB
JmsSession.book 17KB
Bridge.book 16KB
JmsConnection.book 15KB
JdbcVirtualDataSource.book 15KB
CoreClasses.book 15KB
CoreVirtualhost.book 14KB
Preferences.book 14KB
JMSMessage.book 14KB
workcontext.book 13KB
jcom.book 13KB
WebServiceSecurity.book 11KB
Mail.book 11KB
Filet3.book 10KB
PathService.book 10KB
Summary.book 10KB
SecurityUsers.book 9KB
JmsBridgedestination.book 9KB
SingletonService.book 9KB
JDBCVirtualDataSources.book 9KB
ChangeManagement.book 9KB
SnmpAttribute.book 8KB
SnmpLogfilter.book 8KB
DataSourceFactory.book 8KB
SecurityGroup.book 7KB
SnmpTraps.book 7KB
SnmpProxy.book 7KB
General.book 6KB
SCA.book 6KB
Image.book 6KB
SecurityPolicy.book 6KB
JmsSubscribers.book 6KB
RemoteSAFContext.book 5KB
ErrorHandling.book 5KB
WebService.book 5KB
JMSQuota.book 5KB
Library.book 5KB
CoreLogfilter.book 4KB
JmsUniformDistributedTopicDurableSubscribers.book 3KB
SecurityCompatibilityExtension.book 2KB
MBeanSearch.book 2KB
Jolt.book 2KB
Wtc.book 2KB
JmsConsumer.book 2KB
JmsProducer.book 2KB
HomePage.book 2KB
cacerts 10KB
enclInReftype.rel.checksum 12B
hasJavadoc.rel.checksum 12B
variableBinding.rel.checksum 12B
diagnostic_for.rel.checksum 12B
compilation_compiling_files.rel.checksum 12B
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
赵闪闪168
- 粉丝: 1654
- 资源: 5391
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享IS62WV51216很好的技术资料.zip
- Dart 的 Redis 客户端.zip
- 废物垃圾检测52-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- 技术资料分享HC05蓝牙指令集很好的技术资料.zip
- productsdemo.zip
- 技术资料分享GPS-NEO-6M-V12-SCH很好的技术资料.zip
- D 的 Redis 驱动程序.zip
- 技术资料分享GIF文件结构与解码器很好的技术资料.zip
- 技术资料分享GIF文件格式详解很好的技术资料.zip
- Cramp + Redis Pub,Sub + WebSockets.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功