WordPressMailMint插件SQL注入

admin 2026-02-04 01:31:02 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: WordPress插件MailMint在1.18.6版本前存在SQL注入漏洞CVE-2025-58604。漏洞源于Import.php文件中未使用$wpdb->prepare()直接拼接用户输入,攻击者可利用RESTAPI接口的selectedCourses参数执行恶意SQL语句窃取用户数据。建议及时更新插件并使用预处理语句修复代码。 综合评分: 88 文章分类: 漏洞分析,代码审计,WEB安全,漏洞POC


Patch Diff}}

工作原理

该漏洞位于 Import 类内部的 get_wp_users_by_learndash_with_limit_offset($courses, $number = 5, $offset = 0) 函数中。 要追踪其使用情况,请在插件目录中搜索关键字 get_wp_users_by_learndash_with_limit_offset。

{{< figure src="search_import.png" caption="搜索导入" alt="Search Import" >}}

该函数在以下位置被调用:

·retrieve_contacts_associated_with_learndash()

·perform_learndash_user_import()

这些函数属于 /app/API/Actions/管理员/Contact/ContactImportAction.php 文件中的 ContactImportAction 类。

接下来,搜索 retrieve_contacts_associated_with_learndash 发现它在另一个方法中被使用:

{{< figure src="search_1.png" caption="搜索 1" alt="Search 1" >}}

此函数由位于 /app/API/Controllers/管理员/Contact/ContactImportController.php 文件中的 ContactImportController 类内的 map_contacts_with_learndash() 调用。

进一步追踪 map_contacts_with_learndash 显示它被注册为一个 REST API 回调函数:

{{< figure src="search_2.png" caption="搜索 2" alt="Search 2" >}}

类 ContactImportRoute extends AdminRoute {     public 函数 register_routes() {         register_rest_route(             $this->namespace, // mrm/v1             $this->rest_base .’/learndash/map’, // contacts/import/learndash/map/             数组(                 数组(                     ‘methods’             => WP_REST_Server::CREATABLE, // POST                     ‘回调函数’            => 数组( $this->controller, ‘map_contacts_with_learndash’ ),                     ‘permission_callback’ => PermissionManager::current_user_can(‘mint_manage_contacts’), // 管理员                     ‘args’                => 数组(                         ‘selectedCourses’ => 数组(                             ‘description’                      => __( ‘The selected courses from which to import contacts.’, ‘mrm’ ),                             ‘required’                          => true,                             ‘type’              => ‘数组’,                             ‘sanitize_callback’ => ‘rest_sanitize_array’,                             )                         ), // 数组 + required                 ),             )         );         // other logic     }     // other logic }

调用流程:

1.向 /wp-JSON/mrm/v1/contacts/import/learndash/map 发送一个 POST 请求,并携带必需的参数 selectedCourses。

2.回调函数 map_contacts_with_learndash(WP_REST_Request $请求) 接收该请求。

o$请求 对象被转换为数组 $params。

3.该回调函数随后调用 retrieve_contacts_associated_with_learndash($params)。

4.该函数最终调用 get_wp_users_by_learndash_with_limit_offset($courses, $number = 5, $offset = 0),其中:

o$courses = $params[‘selectedCourses’]

o$keys 是一个由 $courses 中所有 value 字段构建的数组,像 course_{COURSE_ID}_access_from 那样拼接。

o在插入到 SQL 查询之前,$keys 数组使用 implode() 合并成一个字符串。

5.执行查询并返回一个包含 formatted_users 和 total_users 的 JSON 响应。

漏洞利用

分析代码后,可以清楚地看到 selectedCourses 参数在被注入到存在漏洞的 SQL 查询之前经历了多次转换——但攻击者仍然控制着 value 键。

使用 BurpSuite 的 POST 请求:

可以使用单个键轻松控制最终的 SQL 查询。

{{< figure src="request_success.png" caption="获取所有用户信息" alt="Get all user info" >}}

生成的查询如下所示:

SELECT user_id FROM wp_usermeta WHERE meta_key IN (‘course_abc’) OR1=1– _access_from’) GROUP BY user_id LIMIT 5 OFFSET 0

·’) 转义了 IN 子句

·1=1 始终为真 → 返回 wp_usermeta 中的所有用户 ID

函数的其余部分检索所有返回用户的元数据:

$formatted_users=array_map(     函数 ($user) {         $user->usermeta =array_map(             函数 ($user_data) {                 returnreset($user_data);             },             get_user_meta($user->ID)         );         return$user;     },     $contacts );

结论

WordPress Mail Mint 插件(版本 1.18.6 之前)中的 CVE-2025-58604 漏洞源于执行 SQL 查询时未使用 $wpdb->prepare()。 相反,用户输入被直接拼接到 SQL 语句中——导致了典型的 SQL注入 漏洞。

补丁现在使用 $wpdb->prepare() 来安全地构建 SQL 查询,从而缓解了此问题。

关键要点:

·与 WordPress 数据库交互时,始终使用 $wpdb->prepare() 来防止 SQL注入。

·定期更新您的插件并进行安全审查,以避免被利用。

加内部交流群:

#


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:天启攻防实验室 匆匆过客 匆匆过客《WordPress Mail Mint 插件 SQL注入》

评论:0   参与:  0