【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

admin 2022年4月19日11:37:20评论316 views字数 1800阅读6分0秒阅读模式

|0x0 团队介绍

RedCodeSecurity Team安全团队 &安全实验室 以及安服团队,是由安全头部企业(奇安信、绿盟、360、深信服、启明等)、互联网头部企业、安全从业人员(渗透测试、安服、等保、重保、HW、代码审计、应急响应、安全巡检、安全产品代理等)、架构师、网络专家、运维专家、人工智能专家、大数据专家组建的一只安全队伍,核心业务涉及安服、渗透、等保、解决方案、以及企业内训、同时我们根据合作伙伴的需求、以及在职人员提升的需求推出安全相关的教育培训业务为安全厂商输送人才。


|0x1 漏洞介绍


|0x2 影响版本

wordpress < 5.8.3

|0x3 挖洞思路

在 5.8.3 版本中,wordpress 已经修复了这个错误,比较[提交更改][Link 1]可以在处理变量之前clean_query添加检查的函数中看到。$query['field']``$query['terms']

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

函数clean_query是从 调用的get_sql_for_clause。阅读该函数的代码会发现,该函数的工作是为 SQL 查询中的条件创建子句,具体来说,它的工作是处理接收到的数据,将这些数据组合成 SQL 查询中的条件。将其返回给父函数。所以我们可以控制这个函数的返回数据,也就是说我们可以控制SQL查询,进行SQL注入。

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

回到函数clean_query,当这个改动没有做的时候,默认情况下$query['terms']只会删除in的值,然后再调用到$this->transform_query( $query, 'term_taxonomy_id' );

为了避免下降if,它$query['taxonomy']需要为空或is_taxonomy_hierarchical返回false的值。

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

该函数transform_query将检查$query['field'] == $resulting_field,如果为真,则返回并且不做进一步处理,因此如果变量$query['field']term_taxonomy_id,我们可以退出函数而不更改变量值$query['terms']

(这里的比较是使用==并且存在Loose比较的漏洞,在某些情况下这个错误可以用来随意创建条件句)。

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

函数逃逸后,返回原位的代码流会调用clean_query函数get_sql_for_clause,变量的值$query['terms']会直接作为SQL查询条件,导致SQL注入。

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661



【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


|0x4 利用链


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

主要参数$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']))有效载荷将采用以下形式:

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


|0x5 注入过程

5.1 审计源码 看是否已经修复

首先看下wp-includes/class-wp-tax-query.php 559行是否变化,我下载的5.8.2 已经修补了,需要注释掉。

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


5.2 断点调试

我在默认主题的位置新添加了一个函数,并加入到action

断点如下,不会的照着打就可以了。

functions.php 640行开始
需要加下如下函数,默认主题没有触发点,其他主题应该有,想搞的懂了原理,可以自己去挖掘哟

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

wp-includes/class-wp-tax-query.php

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


5.3 构造请求

构造一个报错请求

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


构造一个外带请求

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

默认wordpress不开启debug所以不会报错回显,所以只能盲注,外带。


联系我们


我们会通过我们的微信群做公开课的分享以及产品发布。


学习交流安全技术!请大家扫码关注!如①群满 请加②群


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661


【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661








原文始发于微信公众号(小白嘿课):【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月19日11:37:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【代码审计】WordPress核心框架WP_Query SQL注入漏洞原理分析与复现 CVE-2022-21661http://cn-sec.com/archives/926227.html

发表评论

匿名网友 填写信息