大蚂蚁 (BigAnt) 即时通讯系统 updateLoginName SQL注入漏洞


漏洞简介

杭州九麒科技大蚂蚁 (BigAnt) 即时通讯系统是一款企业级IM通信管理系统,提供多种功能支持。该系统的 \Api\Controller\UserController::updateLoginName 接口存在SQL注入漏洞,攻击者可通过在 updateLoginName 功能的相关参数中插入恶意构造的 SQL 查询语句,实现对后端数据库的非法操作,可能导致敏感信息泄露、数据篡改、绕过身份验证,甚至在特定配置下实现任意命令执行或获取系统控制权限。

影响版本

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"

漏洞分析

系统是基于thinkphp 3.2架构,大部分采用数组形式的参数传递不存在sql注入

在 ThinkPHP 3.2 中:

  • ->where(array条件) 使用数组方式传参是安全的(框架会自动参数绑定/转义)
  • ->where("字符串拼接") 使用字符串拼接外部输入是危险的
  • ->query($sql) / ->execute($sql) 直接执行原生 SQL,如果拼接了用户输入则存在注入风险
  • I() 函数虽有基本过滤,但不能完全防止 SQL注入(特别是在字符串拼接场景下)

但是部分控制器的部分方法如UserController.class.php下的updateLoginName()方法中

public function updateLoginName()
{
        $userId = $this->q('user_id',1);
        $newLogin = $this->q('user_login',1);

        //查看user_login是否存在
        $loginMap = [];
        $loginMap['user_id'] = array('neq',$userId);
        $loginMap['user_login'] = $newLogin;
        $hasLogin = $this->model->field('user_id')->where($loginMap)->select();
        if (!empty($hasLogin)) {
                $this->responseFail(ERR_OP_ERR,L('_USER_UPDATE_ERROR_')) ;
        }

        //查看user_login是否未变更
        $oldLogin = $this->model->where('user_id = '.$userId)->getField('user_login');
        if ($oldLogin == $newLogin) {
                $this->responseSuccess(L('_EDIT_SUCCESS_'));
        }

$userId来自用户请求参数 $this->q('user_id',1);,直接拼接到 where('user_id = '.$userId)->getField('user_login')字符串中,攻击者可通过构造恶意 user_id参数注入SQL payload造成SQL注入。

漏洞复现

认证码参考大蚂蚁 (BigAnt) 即时通讯系统 moveDept SQL注入漏洞 的权限分析部分

POST /api/user/updateLoginName HTTP/1.1
Host: bigant.mrxn.net
Content-Type: application/x-www-form-urlencoded

authen=cc7e6a614831d1c6b351a5f12678ed4b94cf98b2a52b1050d6c19433fdeff37d&uid=1&user_login=1&user_id=SQLI_POC

成功利用报错注入获取到数据库用户信息。


手机扫码阅读

深信服运维安全管理系统 change_net 远程命令执行漏洞

九佳易管理系统 PrivilegedCodeDestroy.asmx SQL注入漏洞

评 论