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 安装步骤

  1. 安装WordPress(参考百度经验链接)
  2. 下载Ninja Forms 3.3.17插件:
    • 下载地址:https://downloads.wordpress.org/plugin/ninja-forms.3.3.17.zip
  3. 解压后将ninja-forms目录复制到WordPress的/wp-content/plugins/目录
  4. 在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 复现步骤

  1. 将上述任意POC复制到浏览器地址栏
  2. 回车访问
  3. 观察是否弹出警告框(如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 漏洞成因

  1. form_id参数直接从$_GET获取,未经任何过滤
  2. 未转义直接拼接到HTML中
  3. 攻击者可构造包含恶意脚本的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 其他防护措施

  1. 对所有用户输入进行验证和过滤
  2. 实施内容安全策略(CSP)
  3. 使用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. 免责声明

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。相关漏洞已报送厂商并得到修复。

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 : 4.2 复现步骤 将上述任意POC复制到浏览器地址栏 回车访问 观察是否弹出警告框(如 alert(/POC1/) ) 5. 漏洞分析 5.1 漏洞位置 核心漏洞文件位于: 5.2 漏洞代码 关键漏洞代码(Submissions.php第71-104行): 5.3 漏洞成因 form_id 参数直接从 $_GET 获取,未经任何过滤 未转义直接拼接到HTML中 攻击者可构造包含恶意脚本的 form_id 参数 6. 修复方案 6.1 代码修复 使用 htmlentities() 函数对输入进行转义: 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. 免责声明 本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。相关漏洞已报送厂商并得到修复。