一
漏洞描述
WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。
WordPress最近爆出的漏洞都是大多数都是由于WordPress Plugin中应用插件出现的问题,在Daily Prayer Time< 2022.03.01版本中存在未授权SQL注入漏洞,在2022.03.01版本中开发者将该漏洞修复。
二
影响版本
Daily Prayer Time< 2022.03.01
三
漏洞分析
通过代码对比工具发现在新版本daily-prayer-time-for-mosques.2022.05.04中调用了Wordpress中的sanitize_text_field()
过滤函数对传入的内容进行过滤。
我们随便抓一个安装插件包就可以发现,通过WordPress安装插件功能发现在安装插件时会注册以插件名为后缀的ajax请求接口,以便后续插件功能的调用。
这里在数组中定义了很多请求参数,上述的install-plugin
就在其中
如果传入的action值在数组中,就对下面的Ajax请求接口进行注册。
如上通过代码对比我们发现get_monthly_timetable()
函数存在可控参数month
、display
,我们全局搜索get_monthly_timetable
函数,发现该函数被成功注册为ajax请求,也就意味着我们可以直接通过action调用该函数,而且在未授权的还是在未授权的状态下。
在dpt.js
中也可以明显看到请求具体参数
继续分析其调用链,在get_monthly_timetable()
函数中将参数month
传入实例化对象NEW MonthlyTimeTable()
中并触发构造方法从而进行内存空间分配,跟进MonthlyTimeTable
将month
传入getMonthlyCalendar
()`函数中,继续跟进
在getMonthlyCalendar()
函数最上面将DatabaseConnection
类实例化,调用类中的getPrayerTimeForMonth()
函数,其实到这步已经要将传入的SQL语句去执行了。继续跟进
getPrayerTimeForMonth()
中将传入的$monthNumber
也就是month
拼接到SQL语句中,最后传入get_results()
函数中进行简单SQL语句检测,但并不影响后续的执行。继续跟进
在get_results()
函数中调用check_safe_collation()
函数进行SQL语句检测,但只是针对功能性以及编码进行检测,并不影响传入SQL语句的执行。
完整的调用链如下:
四
漏洞复现
拼接的参数直接带到数据库中执行
上述漏洞源码以及插件会放在知识星球中供大家学习,如有对PHP代码审计感兴趣的小伙伴可以关注下方知识星球~
欢迎加入我们
如果你对【PHP代码审计】感兴趣
欢迎加入【炼石计划@PHP代码审计】知识星球
详情可点击下方链接了解
(我将PHP代码审计学习分成了七个阶段)
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...