从一个简单的wordpress插件漏洞研究一下wordpress插件原理
字数 1786 2025-08-26 22:11:14
WordPress插件漏洞分析与插件原理研究
漏洞概述:AdRotate Plugin SQL注入
AdRotate Plugin在5.2及之前版本中存在SQL注入漏洞,该漏洞由FortiGuard实验室发现。
漏洞位置
- 文件路径:
\dashboard\publisher\adverts-edit.php - 关键问题:SQL查询拼接时未正确闭合变量
漏洞分析
- 在
adverts-edit.php文件中,存在多处SQL查询语句 - 第25行处存在SQL注入隐患:
$ad_edit_id变量被直接拼接到SQL语句的id值部分,没有使用单引号闭合 $ad_edit_id变量通过GET请求传入:$ad_edit_id = esc_attr($_GET['ad']);esc_attr方法仅用于过滤HTML标签,对SQL注入无影响
漏洞利用
- 构造Payload示例:
http://127.0.0.1/wordpress/wp-admin/admin.php?page=adrotate-ads&view=edit&ad=-1+UNION+SELECT+1%2CUSER%28%29%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1
- 这是一个有回显的注入,数据库user被回显到name处
WordPress核心机制分析
问题一:WordPress如何处理\(_GET/\)_POST等请求
- WordPress在入口处对请求参数进行过滤
- 位于
wp-includes\load.php中,WordPress使用add_magic_quotes方法过滤$_GET、$_POST、$_COOKIE、$_SERVER - 过滤后的GET与POST数组合并后覆盖
$_REQUEST add_magic_quotes方法使用addslashes过滤传入的键值- 例如传入的
-1'会被过滤为-1\'
- 例如传入的
问题二:WordPress的过滤机制是否存在安全隐患
- 虽然WordPress对请求参数进行了转义,但仍可能存在安全隐患
- 当插件从请求中读取数组并通过INSERT方式插入数据库时
- 可以在传入的键名中加入payload
- 示例:
array($_GET['key'] => $_GET['value'])
- 这种情况下,攻击者可以构造恶意键名绕过过滤
问题三:WordPress如何加载插件及构造利用链
-
插件加载机制:
- 插件文件
adverts-edit.php不能直接访问 - 它被包含在
adrotate.php中(第274行处) adrotate_manage方法中定义了$ad_edit_id变量的赋值过程(第173行)
- 插件文件
-
菜单注册机制:
adrotate.php第106行:add_submenu_page方法注册子菜单- 参数说明:
$parent_slug:顶级菜单名称$page_title:子菜单标题(浏览器标题栏显示)$menu_title:显示的菜单名称$capability:用户权限$menu_slug:URL上的菜单名称$function:调用的函数名称
- 参数说明:
- 访问URL:
http://127.0.0.1/wordpress/wp-admin/admin.php?page=adrotate-adspage参数值为add_submenu_page中的$menu_slug值
-
顶级菜单定义:
adrotate.php第103行:add_menu_page方法定义顶级菜单- 访问URL:
http://127.0.0.1/wordpress/wp-admin/admin.php?page=adrotate
-
钩子机制:
adrotate_dashboard方法(包含菜单注册代码)通过add_action连接到admin_menu钩子admin_menu钩子在管理员加载管理菜单之前触发连接的函数
安全开发建议
- 始终使用预处理语句或WordPress提供的数据库API(如
$wpdb) - 不要直接拼接用户输入到SQL查询中
- 即使WordPress提供了参数过滤,插件开发者仍需自行验证和清理输入
- 对于数组参数,要特别注意键名的安全性
- 遵循WordPress插件开发最佳实践,使用官方API
后记
通过分析这个简单的SQL注入漏洞,我们深入了解了:
- WordPress的请求处理机制
- 插件加载和菜单注册流程
- 钩子系统的运作方式
- WordPress的安全过滤机制及其局限性
这些知识对于WordPress插件开发和安全性分析都具有重要价值。