WordPress代码审计工具Wpbuttle使用与源码分析
前言
Wpbuttle是一款针对WordPress插件/主题开发的PHP静态代码审计工具。与其他PHP代码审计工具不同,它专门为WordPress生态系统设计。虽然WordPress核心代码相对安全,但其插件和主题的安全质量参差不齐,Wpbuttle能够对这些组件进行初步的静态代码分析,辅助漏洞挖掘工作。
工具安装
-
克隆项目仓库:
git clone https://github.com/webarx-security/wpbullet wpbullet -
进入项目目录:
cd wpbullet -
安装依赖:
pip install -r requirements.txt -
运行工具:
python wpbullet.py
注意:工具支持Python 2.x和3.x环境,测试环境为Python 3.7。
工具使用
基本命令选项
Wpbuttle支持以下主要选项:
--path: 指定本地插件目录或WordPress官网插件下载路径--url: 指定插件在WordPress官网的URL--output: 指定输出文件路径
特色功能:工具不仅能扫描本地源代码,还能根据提供的插件/主题URL自动下载并审计。
扫描流程
-
如果提供的是WordPress官网插件URL,工具会先下载插件:
- 处理非zip文件
- 处理zip压缩包文件
-
遍历插件目录,对所有
.php文件进行分析 -
对每个PHP文件执行两种检查:
passive_check_processor: 被动检查process_file: 主动检查
源码分析
被动检查(passive_check_processor)
被动检查主要分析WordPress特定的钩子注册方式,包含三个主要扫描器:
1. scope_admin_actions
检测使用admin_action_前缀注册的钩子,正则表达式为:
(add_action(\s{0,}\S{0,})\((\s{0,}\S{0,})(\"|')(adminaction[a-zA-Z0-9-]+))(?!{}(\"|')(\s{0,}\S{0,}),(.+)(\"|')(\s{0,})([a-zA-Z0-9-]+)(\s{0,})(\"|')
安全风险:admin_action_前缀的钩子可通过http://[WordPress路径]/wp-admin/admin.php?action=xxx访问,任何已登录用户均可访问,可能导致权限绕过漏洞。
案例:Keypic插件2.1.2版本存在任意用户删除漏洞,通过admin_action_keypic_report_spam_and_delete_user钩子实现。
2. scope_ajax_hooks
检测使用wp_ajax_前缀注册的钩子。
安全风险:这类钩子可通过http://[WordPress路径]/wp-admin/admin-ajax.php?action=xxx访问,同样存在权限控制风险。
3. scope_admin_init
检测使用admin_init注册的初始化操作。
安全风险:相关回调可通过admin-ajax.php和admin-post.php触发,已登录用户均可访问。
主动检查(process_file)
主动检查加载预编译的扫描插件(位于Modules目录),主要检测:
- 高危函数调用:如代码执行、文件操作等危险函数
- 输入过滤缺失:检查用户输入是否未经安全函数过滤直接传入高危函数
检测原理
functions列表:定义高危函数blacklist列表:定义安全过滤函数build_pattern方法:生成检测规则的正则表达式user_input检查:判断参数是否可控
示例检测:
<?php
$var = $_GET['x'];
eval($var);
扫描结果:会标记出未经过滤的用户输入直接传入eval函数的风险。
工具优缺点分析
优点
- 专门针对WordPress生态设计,针对性较强
- 原理简单,易于理解和扩展
- 支持远程下载和自动扫描
- 结合了WordPress特有的安全检测点
缺点
- 基于文本特征分析,相比基于AST和CFG的工具(如RIPS)准确性较低
- 难以准确判断外部输入是否经过安全处理
- 漏报率较高
- 文档说明较少
总结
Wpbuttle作为一款专门针对WordPress的静态代码分析工具,虽然存在一些局限性,但仍能有效辅助安全研究人员进行WordPress插件和主题的漏洞挖掘工作。通过理解其工作原理和检测逻辑,用户可以更好地利用它发现潜在的安全问题,并结合手动分析提高漏洞发现的准确率。
对于希望扩展或改进该工具的研究人员,建议从以下几个方面入手:
- 增加更多WordPress特有的检测规则
- 改进检测逻辑,减少误报和漏报
- 完善文档说明
- 考虑引入更高级的代码分析技术