

Wordpress 插件 woocommerce 插件 SQL 注入漏洞分析
source link: https://paper.seebug.org/2023/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者:墨云科技VLab Team
原文链接:https://mp.weixin.qq.com/s/mlLVIVM4bpQbOV8dVXaJSA

漏洞简述
WooCommerce 一款基于 WordPress 的开源电子商务插件。时至今日已变成全球最流行的电商系统,它是为使用WordPress的小型或大型在线商人而设计的。该插件于2011年9月27日发布,以其易于安装和定制以及免费的基础产品而迅速流行。WooCommerce在WordPress拥有5百万+的用户量。
漏洞分析
根据官方发布的安全更新通告来看,该漏洞影响了大概90多个版本的插件,然后去官方源码库查看代码提交记录,发现在
woocommerce/tags/5.3.1/packages/woocommerce-blocks/src/StoreApi/Utilities/ProductQueryFilters.php
存在sql注入点,在修复后,会调用
wc_sanitize_taxonomy_name
esc_sql
来防止注入。

根据该文件的路径去反向推一下访问地址,首先全局搜索该逻辑所在的函数名
get_attribute_counts
在哪里进行了调用。

然后打开该文件
wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/Routes/ProductCollectionData.php
发现当前文件中有
get_path()
方法,其所对应的就是接口的访问路径,然后拼接到url中即可,最终该文件的访问地址为:
http://wp.local:8888/wp-json/wc/store/products/collection-data
接着继续找漏洞调用点
get_attribute_counts
在哪里进行了调用,发现在
get_route_response
中对该漏洞函数进行了调用。

根据阅读代码发现,需要给定相对应的请求参数
calculate_attribute_counts
才会进入该判断,根据在
get_collection_params
calculate_attribute_counts
参数的定义,可以直接反推出来访问的地址:

可以看到其接收的参数类型为数组类型,直接在上面反推出来的当前文件访问地址后面加数组访问参数即可给
$request['calculate_attribute_counts']
http://wp.local:8888/wp-json/wc/store/products/collection-data?calculate_attribute_counts[][taxonomy]=product_type
接下来就是构造poc了,在对官方修复的文件中的86行进行深入分析,
wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/Utilities/ProductQueryFilters.php
对其调用的
wc_sanitize_taxonomy_name
函数进行查找,全局搜索发现存在的位置为:
wp-content/plugins/woocommerce/includes/wc-formatting-functions.php
其内容为:
/**
* Sanitize taxonomy names. Slug format (no spaces, lowercase).
* Urldecode is used to reverse munging of UTF8 characters.
*
* @param string $taxonomy Taxonomy name.
* @return string
*/
function wc_sanitize_taxonomy_name( $taxonomy ) {
return apply_filters( 'sanitize_taxonomy_name', urldecode( sanitize_title( urldecode( $taxonomy ) ) ), $taxonomy );
}
可以看到其返回的结果的核心是调用
sanitize_title
方法,该方法在官方解释如下,

在返回结果后,并未对结果进行二次处理,在下面直接调用sql语句拼接了进去,

发现其最终导致的问题点,其根本原因是自行封装的函数只调用了
sanitize_title
函数,该函数虽然能过滤一些字符,但是对于最终查询sql语句之前却未调用
esc_sql
函数,从而导致SQL注入。

时间线
- 2021年7月13日WooCommerce接收到漏洞报送
- 2021年7月14日WooCommerce修复该漏洞
- 2021年7月15日WooCommerce官方发布文章通告
- 2021年7月15日VLab实验室监测到漏洞通告
- 2021年7月16日VLab实验室完成该漏洞复现
影响版本
- WooCommerce(3.3-5.5.0)
- WooCommerce Blocks(2.5-5.5.0)
修复建议
登录WordPress后台,将相关插件更新至最新版。
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/2023/
</section
Recommend
-
13
SQL注入漏洞是如何被利用的古时的风筝公众号「古时的风筝」标题有点臭不要脸,有标题党...
-
16
sqli-labs SQL注入漏洞通关记录sqli-labs 是一个专业的SQL注入练习平台下载地址:
-
11
WordPress使用woocommerce插件付款失败是怎么回事 2021-11-1213:30:37评论3130字 我们在使用WordPress程序的时候,有部...
-
10
wordpress如何快速配置woocommerce电商插件 2021-11-291...
-
13
WordPress网站使用WooCommerce插件签约支付宝收款方法教程 ...
-
13
1. 漏洞描述 漏洞编号: SSV-92929 漏洞简述: phpcms v9.6.0 sys_auth在解密参数后未进行适当校验造成sql injection。 ...
-
10
ThinkPHP 5.1.x SQL注入漏洞分析 alphalab 2018-10-01 08:00:20 784231 4
-
6
作者:墨云科技VLab Team 原文链接:https://mp.weixin.qq.com/s/2DqN3EsHqG24AjMy8scecA
-
10
官方源码下载(wordpress 5.7.0) 环境: wampserver + php 8.0.26 + mysql 8.0.31 + apache 2.4.54.2
-
9
作者: wh0am1i@知道创宇404实验室 日期:2023年6月29日 0x01 GeoServer & GeoTools GeoServer 是一个用 Java 编写的开源软件服务器,允许用户共享和编辑地理空间数据,GeoServer 基于 Sprin...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK