【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现
影响版本
wordpress < 5.8.3
分析
参考:https://blog.csdn.net/qq_46717339/article/details/122431779
在 5.8.3 版本中,wordpress 已经修复了这个错误,比较[提交更改][Link 1]可以在处理变量之前clean_query
添加检查的函数中看到。$query['field']``$query['terms']
函数clean_query
是从 调用的get_sql_for_clause
。阅读该函数的代码会发现,该函数的工作是为 SQL 查询中的条件创建子句,具体来说,它的工作是处理接收到的数据,将这些数据组合成 SQL 查询中的条件。将其返回给父函数。所以我们可以控制这个函数的返回数据,也就是说我们可以控制SQL查询,进行SQL注入。
回到函数clean_query
,当这个改动没有做的时候,默认情况下$query['terms']
只会删除in的值,然后再调用到$this->transform_query( $query, 'term_taxonomy_id' );
。
为了避免下降if
,它$query['taxonomy']
需要为空或is_taxonomy_hierarchical
返回false的值。
该函数transform_query
将检查$query['field'] == $resulting_field
,如果为真,则返回并且不做进一步处理,因此如果变量$query['field']
为term_taxonomy_id
,我们可以退出函数而不更改变量值$query['terms']
。
(这里的比较是使用==
并且存在Loose比较的漏洞,在某些情况下这个错误可以用来随意创建条件句)。
函数逃逸后,返回原位的代码流会调用clean_query
函数get_sql_for_clause
,变量的值$query['terms']
会直接作为SQL查询条件,导致SQL注入。
利用链
WP_Query#__construct
WP_Query#query
WP_Query#get_posts
WP_Tax_Query#get_sql
WP_Tax_Query#get_sql_clauses
WP_Tax_Query#get_sql_for_query
WP_Tax_Query#get_sql_for_clause
主要参数$query
只需要满足以下2个条件,就可以触发SQL注入漏洞:
$query['include_children']
取值为false
(或者is_taxonomy_hierarchical($query['taxonomy'])
取值为false
);$query['field']
取值为term_taxonomy_id
虽然这是wordpress核心的bug,但是wordpress核心的复用方式并不能触发错误,在插件和主题中会自动转向错误方向。WP_Query
当你要查询数据库时,插件/主题会调用该类,从源代码中识别错误的方法是在使用时WP_Query($data)
和 $data 是可控的。
例如,new WP_Query(json_decode($_POST['query_vars']))
有效载荷将采用以下形式:
query_vars={
"tax_query":{
"0":{
"field":"term_taxonomy_id","terms":["<inject>"]}}}
query_vars={
"tax_query":{
"0":{
"taxonomy":"nav_menu","field":true,"terms":["<inject>"]}}}
环境搭建
0 本地下载wordpress 5.8.2
1 首先自己建一个数据库,供wordpress使用。
注意 自己先建一下数据库,wordpress无权建立数据库,否则会安装不成功。
2 phpstudy 把wordpress放进去就可以
3 访问http://127.0.0.1/wordpress-5-8-2/wordpress/开始安装,选择自己刚才创建的数据库即可。
4 搭建完成。登录后台的记得要注销退出,否则无法复现。
修改配置
为了看到报错信息,可以将debug打开,如果不打开只能盲注,延时或者外带
复现
检查是否修复
首先看下wp-includes/class-wp-tax-query.php 559行是否变化,我下载的5.8.2 已经修补了,需要注释掉。
然后疯狂打断点
打断点
我在默认主题的位置新添加了一个函数,并加入到action
断点如下,不会的照着打就可以了。
functions.php 640行开始
function wp_query_test(){
$c=stripslashes($_POST['data']);
$d = json_decode($c, true);
$wp=new WP_Query($d);
wp_die();
}
add_action('wp_ajax_nopriv_test','wp_query_test',1);
wp-includes/class-wp-tax-query.php
打完开始请求
构造报错请求
构造请求如图所示
构造延时请求
报错需要开启debug,但是debug默认关闭,所以盲注
构造外带请求
注意点
当登录之后,这个点就不能利用了
默认只能盲注
默认wordpress不开启debug所以不会报错回显,所以只能盲注,外带
z2o安全攻防交流群
加群不定时分享 最新漏洞复现,POC,内外网渗透测试骚操作。(~ ̄▽ ̄)~
【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现的更多相关文章
- Java框架之MybatisSQL注入漏洞
一.SQL注入漏洞基本原理 在常见的web漏洞中,SQL注入漏洞较为常见,危害也较大.攻击者一旦利用系统中存在的SQL注入漏洞来发起攻击,在条件允许的情况下,不仅可以获取整站数据,还可通过进一步的渗透 ...
- 简单分析什么是SQL注入漏洞
现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的.但是事实是这样吗?我们学这些,不仅要知其然,更要知其所以然! ...
- 什么是简单的分析SQL注入漏洞
如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的,可是有多少人知道为什么会有这种注入漏洞呢?有的会随口说着对于字符的过滤不严造成的. 可是事实是这样吗?我们学这些.不仅要知其然.更要知其所以然 ...
- WordPress Cart66 Lite插件HTML注入漏洞
漏洞名称: WordPress Cart66 Lite插件HTML注入漏洞 CNNVD编号: CNNVD-201310-525 发布时间: 2013-10-23 更新时间: 2013-10-23 危害 ...
- WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞
漏洞名称: WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞 CNNVD编号: CNNVD-201310-499 发布时间: 2013-10-23 更新时间: 20 ...
- WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞
漏洞名称: WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞 CNNVD编号: CNNVD-201309-388 发布时间: 2013-09-24 更新 ...
- WordPress A Forms插件HTML注入漏洞和跨站请求伪造漏洞
漏洞名称: WordPress A Forms插件HTML注入漏洞和跨站请求伪造漏洞 CNNVD编号: CNNVD-201308-281 发布时间: 2013-08-20 更新时间: 2013-08- ...
- 浅析PHP框架Laravel最新SQL注入漏洞
PHP知名开发框架Laravel,之前在官方博客通报了一个高危SQL注入漏洞,这里简单分析下. 首先,这个漏洞属于网站coding写法不规范,官方给了提示: 但官方还是做了修补,升级最新版本V5.8. ...
- 企业安全03Django GIS SQL注入漏洞CVE-2020-9402
Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ...
随机推荐
- 新手指南:顶象验证码如何接入微信小程序?
自2017年小程序发布以来,经过4年的快速发展,小程序已然成为企业互联网布局不可或缺的一环.无论是互联网企业还是拥抱互联网的传统企业,无论是服务导向型企业还是产品导向型企业,小程序都为用户提供了一种轻 ...
- CF106A Card Game 题解
Content 一种纸牌游戏有许多张卡牌,每张卡牌有一个套装(S,H,D和 C)和一个等级(按升序排列6,7,8,9,T, J,Q,K,A). 规定以下情况卡牌 A 才能赢卡牌 B: A 有王牌套装, ...
- 有个奇怪的问题,配置成/system/index,jsp页面时没有经过过滤器进行拦截,而配置成redirectAction时是可以直接跳转刀片loginJsp.action
有个奇怪的问题,配置成/system/index,jsp页面时没有经过过滤器进行拦截,而配置成redirectAction时是可以直接跳转刀片loginJsp.action 但是我直接访问/syste ...
- vc++ 调用winapi调节屏幕亮度(增加win7代码demo)
1.关于 代码是通过测试的,测试环境: win7 + MFC 为什么要发在这里? 区别于上一篇随笔. MD排版更顺眼 demo 会放到 这里 更正了上一篇随笔中的代码错误 2.头文件 #include ...
- 【剑指Offer】数据流中的中位数 解题报告(Python)
[剑指Offer]数据流中的中位数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- C1. 组队活动 Small(BNUOJ)
C1. 组队活动 Small Time Limit: 1000ms Memory Limit: 131072KB 64-bit integer IO format: %lld Java cl ...
- 湫湫系列故事——消灭兔子(hdu4544)
湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- 《HelloGitHub》第 69 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- 洛谷 P3431:[POI2005]AUT-The Bus(离散化+DP+树状数组)
题目描述 The streets of Byte City form a regular, chessboardlike network - they are either north-south o ...
- Codeforces 931C:Laboratory Work(构造)
C. Laboratory Work time limit per test : 1 second memory limit per test : 256 megabytes input : stan ...