PayloadsAllTheThings:5步找到你需要的安全测试payload
【免费下载链接】PayloadsAllTheThingsA list of useful payloads and bypass for Web Application Security and Pentest/CTF项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings
PayloadsAllTheThings 是一个按漏洞类型分类整理的 Web 安全测试 payload 库,汇集渗透测试资源共 50 多种漏洞类别。每个类别下都有原理说明、检测方法论和现成的 payload 词表文件,做安全测试时可以按场景直接检索取用。
PayloadsAllTheThings/ ├── SQL Injection/ # 各数据库注入payload ├── Server Side Template Injection/ # SSTI方法论与payload ├── Upload Insecure Files/ # 文件上传绕过技术 └── Methodology and Resources/ # 渗透测试cheatsheet仓库结构速览:按漏洞类型定位目录
| 目录 | 用途 |
|---|---|
| SQL Injection/ | MySQL、PostgreSQL、MSSQL 等各数据库的注入 payload,附 Intruder 词表 |
| Server Side Template Injection/ | SSTI 检测方法学与各模板引擎(Jinja2、Twig、FreeMarker 等)payload |
| Upload Insecure Files/ | 文件上传绕过:扩展名、MIME、magic bytes、图片压缩与元数据攻击 |
| XSS Injection/ | XSS payload、WAF 绕过、CSP 绕过,附 SVG/图片/EXIF 等载体文件 |
| Methodology and Resources/ | 内网、域渗透、提权等后渗透阶段的 cheatsheet |
仓库结构是统一的:每个模块通常包含README.md(原理 + payload)、Intruder/(Burp 词表)、Images/和Files/(脚本或示例文件)四类内容,README 里也明确写了这个约定。这个结构本身就是检索接口,看到什么就能用什么。
上手路径:从 clone 到第一个可用 payload
以测试服务器端模板注入为例,最小路径是 5 步:
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings - 确定测试场景,进入对应目录,这里是
Server Side Template Injection/ - 读该模块
README.md,先了解四种检测技术:Rendered、Error-Based、Boolean-Based、Time-Based - 选一条最小 payload,比如
{{7*7}} - 放到本地靶场验证(DVWA、vulhub,或自己起一个带模板渲染的 Flask 应用),确认有效后再考虑目标
使用心智模型:不要试图通读全仓库。把它当字典用——按测试场景查目录,取一条 payload,到靶场里验证。每个模块的 README 都按"检测 → 信息收集 → 利用"的方法论组织,顺着读比从头翻效率高得多。
重点模块拆解:SSTI 与文件上传
模板注入:如何确定引擎再谈利用
攻击原理:当用户输入被模板引擎当作模板编译而不是当作数据替换时,注入模板语法就能触发代码执行。
项目内的实际 payload:
- 检测 Jinja2:
{{7*7}},返回 49 即存在注入 - 通用检测 polyglot:
${{<%[%'"}}%\.,用于在引擎未知时快速触发报错 - Error-Based 探测:
(1/0).zxy.zxy,报错内容可反推后端语言(ZeroDivisionError 对应 Python,ArithmeticException 对应 Java)

上图是该模块的引擎识别决策树:不同引擎对同一输入的变换结果不同,顺着分支走就能定位引擎,再对应到该语言的利用 payload。
防御要点:
- 区分"模板"与"数据":服务端决定加载哪个模板文件,用户输入只作为变量值传入,不参与模板编译
- 使用受限模板环境或沙箱,禁用代码执行类标签
文件上传:绕过分支多,先想清楚服务端信什么
攻击原理:上传组件常信任客户端提供的文件名、MIME 类型或文件头,伪装成合法图片后服务端可能执行其中代码。
项目内的实际 payload:
- 双扩展名:
shell.jpg.php,Extension PHP/目录下有一批真实样例文件 - RTLO 覆盖字符:
name.%E2%80%AEphp.jpg,显示为name.gpj.php,实际是 PHP 文件 - 老版本 PHP 空字节截断:
.php%00.gif(仅对旧版 PHP 有效)

这张思维导图把上传攻击链拆成 Shell、Images、Audio/Video、Other 四大分支,每个分支下的绕过手段与目录结构一一对应,适合当检查清单逐项过。
防御要点:
- 服务端白名单校验:扩展名、MIME、magic bytes 三者都要由服务端独立判断,不能只看 Content-Type
- 上传目录设为不可执行:Nginx 下不转发
.php给 PHP-FPM,或直接存对象存储、静态托管
融入日常工作流
实际使用中,这个项目主要是配合工具消费的,几种典型场景:
- 喂给 Burp Intruder:各模块
Intruder/目录下的词表就是为 Intruder 设计的。比如打开 SQL Injection/Intruder/Generic_TimeBased.txt,把 payload 里可替换的位置换成 Burp 的*标记,直接开始时间盲注探测。目录穿越、XXE、LDAP 等模块同理。 - 配合 SQLmap:
SQL Injection/下的分库 payload 可作为人工判断依据,验证 SQLmap 的判定是否误报;遇到 WAF 拦截时,也可以参考其中的编码变体思路写--tamper脚本。 - 写入自研扫描规则:SSTI 模块的通用 polyglot 和
{{7*7}}这类短 payload 很适合做成检测规则;命中报错后按 README 里的报错语言对照表归类引擎。 - payload 被拦时的编码参考:标准 payload 被 WAF 拦截后,可以查 SQL Injection 模块的编码绕过章节。例如把
' and 1=1--按 Unicode 转义表逐个字符替换,绕过只匹配 ASCII 原文的规则:

需要注意这类绕过依赖 WAF 的归一化逻辑,不同版本行为可能不同,用之前先在目标上验证一遍。
常见误区与注意事项
- 先确认授权范围。没有书面授权前不要对任何目标发 payload,仓库内容只用于学习和授权测试。
- 别直接粘贴不做上下文适配。模板引擎之间
{{}}和#{}有差异,数据库之间 SQL 函数也不通用,先看对应模块 README 再动手。 - 留意版本差异。空字节截断只对老版本 PHP 有效,IIS 的
.cer处理随版本变化,用 payload 前最好先摸清目标技术栈版本。 - 检测不等于利用成功。
{{7*7}}回显只是第一步,升级到代码执行还要按模块方法论走完"识别引擎 → 代码求值 → RCE"的流程,中间缺一步就容易卡住。
延伸方向
- 熟悉某一类漏洞后,可以把自己踩过的绕过 payload 补充进对应模块,仓库对贡献是开放的。
- 结合 CI 做回归安全测试:每次发版后在测试环境跑一轮 Intruder payload 集,把安全检测变成自动化检查项。
- 搭一套本地靶场(DVWA、vulhub 或自建模板应用),和仓库 payload 做对照实验,验证比记忆印象更深刻。
本文内容仅供安全学习与授权测试使用,请确保所有测试活动在合法授权范围内进行,遵守相关法律法规。
【免费下载链接】PayloadsAllTheThingsA list of useful payloads and bypass for Web Application Security and Pentest/CTF项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考