WordPress Plugin Ninja Forms 3.3.17 XSS复现与分析
字数 1168 2025-08-18 11:37:45
WordPress Plugin Ninja Forms 3.3.17 XSS漏洞分析与防护指南
1. 漏洞概述
Ninja Forms是WordPress平台上一款流行的表单创建工具,其3.3.17版本存在跨站脚本(XSS)漏洞(CVE-2018-19287)。该漏洞允许攻击者通过构造恶意URL注入JavaScript代码,在管理员后台执行任意脚本。
2. 漏洞影响
- 受影响版本:Ninja Forms 3.3.17及以下
- 修复版本:3.3.18
- 漏洞类型:反射型XSS
- 危害等级:中高危(需要管理员访问权限)
3. 环境搭建
3.1 所需环境
- 操作系统:Windows 10 x64
- Web服务器:phpstudy2016
- 浏览器:火狐浏览器
- WordPress版本:4.4
- Ninja Forms版本:3.3.17
3.2 安装步骤
- 安装WordPress(参考百度经验链接)
- 下载Ninja Forms 3.3.17插件:
- 下载地址:https://downloads.wordpress.org/plugin/ninja-forms.3.3.17.zip
- 解压后将
ninja-forms目录复制到WordPress的/wp-content/plugins/目录 - 在WordPress后台启用该插件
4. 漏洞复现
4.1 POC示例
POC1:
http://127.0.0.1/wp-admin/edit.php?s&post_status=all&post_type=nf_sub&action=-1&form_id=1&nf_form_filter&begin_date&end_date="><script>alert(/POC3/);</script>&nf_form_filter&paged=1
4.2 复现步骤
- 将上述任意POC复制到浏览器地址栏
- 回车访问
- 观察是否弹出警告框(如
alert(/POC1/))
5. 漏洞分析
5.1 漏洞位置
核心漏洞文件位于:
/wp-content/plugins/ninja-forms/includes/Admin/Menus/Submissions.php
5.2 漏洞代码
关键漏洞代码(Submissions.php第71-104行):
public function change_views( $views ) {
// ...
if( ! empty( $_GET[ 'form_id' ] ) ) {
$form_id = '&form_id=' . $_GET[ 'form_id' ] . '&nf_form_filter&paged=1';
} else {
$form_id = '';
}
// ...
$views[ 'all' ] = '<a href="' . admin_url( 'edit.php?post_status=all&post_type=nf_sub' ) . $form_id . '">' . __( 'All', 'ninja-forms' ) . '</a>';
$views[ 'trash' ] = '<a href="' . admin_url( 'edit.php?post_status=trash&post_type=nf_sub' ) . $form_id . '">' . __( 'Trash', 'ninja-forms' ) . '</a>';
// ...
}
5.3 漏洞成因
form_id参数直接从$_GET获取,未经任何过滤- 未转义直接拼接到HTML中
- 攻击者可构造包含恶意脚本的
form_id参数
6. 修复方案
6.1 代码修复
使用htmlentities()函数对输入进行转义:
$form_id = '&form_id=' . htmlentities($_GET['form_id'], ENT_QUOTES) . '&nf_form_filter&paged=1';
6.2 官方修复
升级到最新版本(3.3.18及以上)
6.3 其他防护措施
- 对所有用户输入进行验证和过滤
- 实施内容安全策略(CSP)
- 使用X-XSS-Protection头部
7. 参考链接
- 官方修复版本:https://wordpress.org/plugins/ninja-forms/
- CVE详情:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19287
- Exploit DB:https://www.exploit-db.com/exploits/45892
8. 免责声明
本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。相关漏洞已报送厂商并得到修复。