通达OA v11.8 后台文件包含命令执行漏洞

漏洞描述

通达OA v11.8以下存在文件上传接口,可上传 .user.ini 文件包含有PHP语句的文件导致命令执行

漏洞影响

Note

通达OA < v11.8

环境搭建

通达OA v11.6下载链接

下载完毕点击安装即可

漏洞复现

这里使用的环境为通达 v11.6版本

出现漏洞的文件为 webroot/general/hr/manage/staff_info/update.php

<?php

include_once "inc/auth.inc.php";
include_once "inc/utility_all.php";
include_once "inc/utility_file.php";
include_once "inc/utility_field.php";
include_once "inc/utility_cache.php";
include_once "general/system/log/annual_leave_log.php";
if (strstr($BYNAME, "/") || strstr($BYNAME, "\\") || strstr($BYNAME, "..")) {
    Message(_("错误"), _("OA用户名包含非法字符!"));
    exit();
}

include_once "inc/header.inc.php";
echo "\r\n<body class=\"bodycolor\">\r\n";
echo "\r\n<body class=\"bodycolor\">\r\n";
$PHOTO_NAME0 = $_FILES["ATTACHMENT"]["name"];
$ATTACHMENT = $_FILES["ATTACHMENT"]["tmp_name"];

if ($PHOTO_NAME0 != "") {
    $FULL_PATH = MYOA_ATTACH_PATH . "hrms_pic";

    if (!file_exists($FULL_PATH)) {
        @mkdir($FULL_PATH, 448);
    }

    $PHOTO_NAME = $USER_ID . substr($PHOTO_NAME0, strrpos($PHOTO_NAME0, "."));
    $FILENAME = MYOA_ATTACH_PATH . "hrms_pic/" . $PHOTO_NAME;
    td_copy($ATTACHMENT, $FILENAME);

    if (file_exists($ATTACHMENT)) {
        unlink($ATTACHMENT);
    }

    if (!file_exists($FILENAME)) {
        Message(_("附件上传失败"), _("原因:附件文件为空或文件名太长,或附件大于30兆字节,或文件路径不存在!"));
        Button_Back();
        exit();
    }
}

在这里参数 $USER_ID 是可控的,并且无过滤危险符号就拼接进去了,那我们传入 ../../../ 我们就可以任意文件上传了

由于通达OA 的文件上传限制的死死的,所以我们可以通过利用 PHP的 .user.ini 文件来包含其他文件,这里是可以用于包含PHP语句的文件的,所以我们上传文件内容为

请求包为

其中 USER_ID=../../general/reportshop/workshop/report/attachment-remark/.user 为上传路径

关于更多原理参考 http://wiki.peiqi.tech 中的另一篇 通达OA v11.8 后台文件包含存储型XSS漏洞

这里我们简单知道了上传方式,那我们就通过 .user.ini文件 包含恶意文件

现在已经成功上传了恶意文件

访问 http://xxx.xxx.xxx.xxx/general/reportshop/workshop/report/attachment-remark/form.inc.php?peiqi=ipconfig 文件包含命令执行

在 v11.6中 上传的位置并没有限定所以可以上传在方便访问的目录(不需要登录)

而 v11.8中则有目录名的限制需要目录带有 webroot 和 attachment

漏洞利用POC

Note

脚本在 v11.6 测试成功执行, 在 v11.6以上执行时 这个webshell无法执行命令

v11.7 v11.8可用蚁剑插件绕过连接webshell

Note

v11.8及以下可连接蚁剑生成的webshell控制,且生成后不需要管理员Cookie即可连接

Last updated

Was this helpful?