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_XMLQUERYUTL_HTTPDBMS_PIPE、XML 外部实体
4.7.5.2 测试 MySQL LOAD_FILEINTO OUTFILESLEEP、注释风格、版本特性
4.7.5.3 测试 SQL Server xp_cmdshellOPENROWSETWAITFOR DELAY、堆叠查询
4.7.5.4 测试 PostgreSQL COPYpg_read_filedblink、大对象、通知监听
4.7.5.5 测试 MS Access SHELLMSysObjects、联合查询、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://filterdata://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 测试大规模赋值 批量绑定对象属性、过滤/白名单缺失、内部字段修改(isAdminrole
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 开发线)(本文为原创讲解,非转载原文)


This site uses Just the Docs, a documentation theme for Jekyll.