WSTG 实战|输入校验测试(4.7 / INPV)
“用户输入不可信”是安全第一定律。WSTG 4.7 v5.0 大幅扩展到 23 个子项(含多个细分),覆盖现代注入攻击面:NoSQL、ORM、客户端注入、SSTI、SSRF、原型污染、不安全反序列化、CSV 注入、大规模赋值等。
① 是什么
输入校验测试 验证应用是否正确校验、过滤、转义用户输入,防止其被解释为代码/查询/指令。WSTG 4.7 含 XSS、HTTP 方法篡改、参数污染、各类注入等。
WSTG 类别码:INPV
② 为什么重要
- 注入类常年居 OWASP Top 10 前列,可从数据泄露一路打到拿服务器权限。
- XSS 是钓鱼、盗 Cookie、蠕虫的起点;SQL 注入可直接拖库;新型注入(SSTI/SSRF/原型污染)可达 RCE。
③ 核心概念拆解(对应 4.7.x / WSTG-INPV-01 到 -23)
| ID | 测试项 | 关键点 |
|---|---|---|
| 4.7.1 / WSTG-INPV-01 | 测试反射型 XSS | URL 参数/路径/Header 回显、编码/过滤绕过、HTML/JS/属性/CSS 上下文 |
| 4.7.2 / WSTG-INPV-02 | 测试存储型 XSS | 评论/资料/文件名/日志存储后回显、持久化载荷、管理后台触发 |
| 4.7.3 / WSTG-INPV-03 | 测试 HTTP 动词篡改 | GET→POST/PUT/DELETE/PATCH、方法覆盖头(X-HTTP-Method-Override) |
| 4.7.4 / WSTG-INPV-04 | 测试 HTTP 参数污染 (HPP) | 同名参数多值、数组参数、后端取值差异(首个/末个/数组)、WAF 绕过 |
| 4.7.5 / WSTG-INPV-05 | 测试 SQL 注入 | 报错/布尔/时间盲注/堆叠/OOB、参数化查询验证、WAF 绕过编码 |
| 4.7.5.1 | 测试 Oracle | DBMS_XMLQUERY、UTL_HTTP、DBMS_PIPE、XML 外部实体 |
| 4.7.5.2 | 测试 MySQL | LOAD_FILE、INTO OUTFILE、SLEEP、注释风格、版本特性 |
| 4.7.5.3 | 测试 SQL Server | xp_cmdshell、OPENROWSET、WAITFOR DELAY、堆叠查询 |
| 4.7.5.4 | 测试 PostgreSQL | COPY、pg_read_file、dblink、大对象、通知监听 |
| 4.7.5.5 | 测试 MS Access | SHELL、MSysObjects、联合查询、Jet/ACE 引擎差异 |
| 4.7.5.6 | 测试 NoSQL 注入 | MongoDB $where $ne $gt、操作符注入、JavaScript 执行、聚合管道 |
| 4.7.5.7 | 测试 ORM 注入 | Hibernate HQL、JPA JPQL、Entity Framework、Sequelize、TypeORM 注入 |
| 4.7.5.8 | 测试客户端注入 | DOM-based SQL、IndexedDB/WebSQL 注入、本地存储污染 |
| 4.7.6 / WSTG-INPV-06 | 测试 LDAP 注入 | * ( ) | & 绕过过滤、盲注、特权提升 |
| 4.7.7 / WSTG-INPV-07 | 测试 XML 注入 | XPath 注入、XSLT 注入、SOAP 注入、XML Schema 验证绕过 |
| 4.7.8 / WSTG-INPV-08 | 测试 SSI 注入 | <!--#exec cmd="..." -->、<!--#include virtual="..." -->、服务端包含 |
| 4.7.9 / WSTG-INPV-09 | 测试 XPath 注入 | ' or '1'='1、布尔盲注、节点遍历、XPath 2.0 函数 |
| 4.7.10 / WSTG-INPV-10 | 测试 IMAP/SMTP 注入 | CRLF 注入、命令注入、邮件头注入、邮件伪造 |
| 4.7.11 / WSTG-INPV-11 | 测试代码注入 | eval()、exec()、动态语言特性、模板引擎、反序列化入口 |
| 4.7.11.1 | 测试文件包含 | LFI/RFI、php://filter、data://、phar://、路径遍历、日志投毒 |
| 4.7.12 / WSTG-INPV-12 | 测试命令注入 | ; | & $() `、参数注入、环境变量、盲注、时间延迟 |
| 4.7.13 / WSTG-INPV-13 | 测试格式化字符串注入 | %n %s %x 栈读写、内存泄露、代码执行(C/C++/Go/Node native) |
| 4.7.14 / WSTG-INPV-14 | 测试孵化漏洞 | 用户可控数据存储后在不同上下文触发(二次注入、存储型 XSS 变体) |
| 4.7.15 / WSTG-INPV-15 | 测试 HTTP 响应拆分 | CRLF 注入响应头、缓存投毒、跨站脚本、会话固定 |
| 4.7.16 / WSTG-INPV-16 | 测试 HTTP 请求走私 | Content-Length vs Transfer-Encoding、CL.TE/TE.CL/TE.TE、缓存/路由污染 |
| 4.7.17 / WSTG-INPV-17 | 测试 Host 头注入 | 密码重置链接、缓存键、虚拟主机路由、SSRF 诱导 |
| 4.7.18 / WSTG-INPV-18 | 测试服务端模板注入 (SSTI) | Jinja2/Twig/Freemarker/Velocity/Thymeleaf/Pug/Handlebars/EJS、沙箱逃逸、RCE |
| 4.7.19 / WSTG-INPV-19 | 测试服务端请求伪造 (SSRF) | 内网探测、云元数据(169.254.169.254)、绕过(重定向/DNS 重绑定/IPv6/编码) |
| 4.7.20 / WSTG-INPV-20 | 测试大规模赋值 | 批量绑定对象属性、过滤/白名单缺失、内部字段修改(isAdmin、role) |
| 4.7.21 / WSTG-INPV-21 | 测试 CSV 注入 | = + - @ 公式注入、Excel/Sheets 打开执行、DDE 攻击、字段引用 |
| 4.7.22 / WSTG-INPV-22 | 测试原型污染 | __proto__、constructor.prototype、Object 合并/克隆、链式利用至 RCE/XSS |
| 4.7.23 / WSTG-INPV-23 | 测试不安全反序列化 | Java/Python/PHP/Node/.NET/Ruby、Gadget 链、RCE、完整性校验、类白名单 |
④ 常见误区
- 误区 1:页面不回显就安全。盲注靠延时/外带(OOB)判断。
- 误区 2:只测一个参数。URL/Header/Cookie/JSON 字段/GraphQL/Body 都可能是注入点。
- 误区 3:WAF 拦了就放弃。换编码/分块/HTTP 走私常能绕。
- 误区 4:SSTI 只测 ``。不同引擎语法、沙箱逃逸链差异大,需针对性测试。
⑤ 一句话小结
输入校验测试把”用户输入”当”潜在指令”挑衅:改方法、重复参数、塞注入串——看是否被误执行。
下一篇:错误处理测试(4.8 / ERRH)
参考来源:OWASP Web Security Testing Guide(最新 v5.0 / 2026 开发线)(本文为原创讲解,非转载原文)