IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> CVE-2022-20261 Wordpress的插件SQL注入漏洞分析及修补 -> 正文阅读

[PHP知识库]CVE-2022-20261 Wordpress的插件SQL注入漏洞分析及修补

简介

wordpress是世界上使用最多的开源 CMS 之一。在允许开发者自己构建插件和主题来管理网站时,使用我们的许多便捷功能,wordpress的核心会提供插件/主题调用和使用wordpress函数的功能,如数据格式、查询数据库等许多选项在提供的众多类中,WP提供的查询DB的类中有SQL Injection错误:WP_QueryWP_Query 是 WordPress 提供的一个用于处理复杂 SQL 查询的类,在 WordPress 核心框架和插件中使用范围非常广泛,用户可以通过 WP_Query 类完成数据库查询操作,方便构建 WordPress 的输出内容。

影响版本

Wordpress <= 5.8.3

漏洞分析

查看补丁更新,地址为https://github.com/WordPress/WordPress/commit/271b1f60cd3e46548bd8aeb198eb8a923b9b3827

请添加图片描述

我们可以看到,修改的最关键的位置位于wp-includes/class-wp-tax-query.php文件当中的第599行代码,在补丁中,对$query[terms]的赋值取决于$query['field']的取值

我们查看漏洞触发点,触发点是 clean_query 函数

请添加图片描述

clean_query 函数获得$query后在559行代码中对$query[terms]进行了array_unique去重操作后,首先进行了一个if判断if (is_taxonomy_hierarchical($query['taxonomy'])&&$query['include_children']),可以通过控制 $query ['taxonomy'] 或者 $query ['include_children'] 的取值使得 if 判断不成立,这样就直接将 $query ['terms'] 带入了函数 transform_query

请添加图片描述

可以设置 $query ['field'] 的值为 term_taxonomy_id,这样函数会直接返回,也就是说可以通过控制 $query 的取值来绕过 clean_query 函数的处理。

查找调用 clean_query 函数的情况,只有位于wp-includes/class-wp-tax-query.php文件当中的第383行的get_sql_for_clause函数进行了调用
请添加图片描述

请添加图片描述

通过 clean_query 处理参数 $clause 的引用对象,然后赋值给 $terms,当存在 IN 操作时,调用函数 implode, 将数组 $terms 转换为字符串,继续往下走:将 $terms 字符串拼接进入 $where,并最终带入 SQL 查询语句。

请添加图片描述

请添加图片描述

回顾 get_sql_for_clause 函数的处理过程,可以通过构造特殊 $query,导致输入参数无过滤处理就直接带入 SQL 语句,导致出现 SQL 注入漏洞。

查找get_sql_for_clause 函数的调用链

请添加图片描述

可以构建一条从 WP_Query 构造函数出发,到达 get_sql_for_clause 函数的完整调用链条:

请添加图片描述

请添加图片描述

漏洞复现

通过前面的分析,我们知道参数query只需要满足以下2个条件,就可以触发SQL注入漏洞

  • $query ['include_children'] 取值为 false(或者 is_taxonomy_hierarchical ($query ['taxonomy']) 取值为 false);

  • $query ['field'] 取值为 term_taxonomy_id

举例网络上成功的两个案例结果:

请添加图片描述

请添加图片描述

漏洞修复

更新新版本即可

回顾前面的补丁对比,新版本 class-wp-tax-query.php 中的函数 clean_query 修改代码如下:

if ( 'slug' === $query['field'] || 'name' === $query['field'] ) {
			$query['terms'] = array_unique( (array) $query['terms'] );
		} else {
			$query['terms'] = wp_parse_id_list( $query['terms'] );
		}

通过函数 wp_parse_id_list 限制了 $query ['terms'] 数组元素类型必须是整数。

参考

https://github.com/WordPress/WordPress/commit/271b1f60cd3e46548bd8aeb198eb8a923b9b3827

https://cognn.medium.com/sql-injection-in-wordpress-core-zdi-can-15541-a451c492897

https://www.wangan.com/p/7fy7fge221c7608a

本文章仅供学习使用。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:13:32  更:2022-03-12 17:14:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:03:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码