Loading

CVE-2022-0846 Wordpress Plugin SpeakOut Sql Injection

0x00 前言

该漏洞是一个Wordpress未授权的SQL注入漏洞,官方给出的信息是影响版本在2.14.15.1(最新版本)。

0x01 漏洞代码对比分析

可以清晰看到在includes/class.petition.php的petition类中,增加了一处判断代码,判断参数是否为整型。若为整型则直接退出。

基本漏洞点已经确定,所以只需要看该类的retrive方法在其他处的调用就行。

0x02 调用链

1、一点点前置知识

结合Wordpress插件的开发规范可知,一般由wp-admin/admin-ajax.php入口,通过action参数接收前台传入的数据。一般来说是通过add_action()函数进行绑定。

add_action('wp_ajax_xxx','xxx');

以上代码为通过http数据包传入action=xxx则调用xxx函数,调用例子如下

2、实际绑定情况

遵循这个规则找到了dk_speakout_sendmail的action存在调用petition.class->retrive()的入口。
在includes/ajax.php中可以看到,绑定dk_speakout_sendmail函数可以通过http的action参数进行调用

在dk_speakout_sendmail函数中,首先是初始化class dk_speakout_Signature,通过调用$the_signature->populate_from_post();对传入的参数进行赋值。populate_from_post方法中并没有对传入的参数坐过多处理,只是简单的赋值。这里的id参数就是我们想要传入的值,因为最终petitions_id会进行进入sql查询语句中。

petitions_id赋值完成以后,则进入dk_speakout_Petition.class->retrieve(petitions_id)

而retrieve方法则是进行sql语句拼接,且没有对传入字符串做任何处理,最终导致sql注入

3、最终利用EXP

注入参数在id处

POST /wordpress-5.5/wordpress/wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.52.17:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
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
Accept-Encoding: gzip, deflate
Referer: http://192.168.52.17:8080/wordpress-5.5/wordpress/wp-admin/plugins.php?plugin_status=all&paged=1&s
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 33
Origin: http://192.168.52.17:8080
Connection: close

*poc就不放了*

以下是sqlmap的截图

sqlmap -r 1.txt

0x03 参考

https://wordpress.org/plugins/speakout/

posted @ 2022-08-08 15:52  0x28  阅读(144)  评论(0编辑  收藏  举报