WAF Rule Validator Skill
Purpose
WAF Rule Validator 是一个用于评估 Web 应用安全解决方案(WAF、API 网关、IPS)的工具。它通过生成恶意请求来测试安全防护规则的有效性,支持 REST、GraphQL、gRPC、SOAP、XMLRPC 等多种 API 协议。
When to Activate
- - When user needs to test WAF rule effectiveness
- When running security validation against web application firewalls
- When evaluating API gateway security protections
- When performing penetration testing on WAF deployments
- When benchmarking WAF block rate performance
Features
- - Multi-protocol support: REST, GraphQL, gRPC, SOAP, XMLRPC
- Multiple encoding methods: Base64, URL, JSUnicode, Plain, XML Entity
- Multiple injection points: URL path, URL params, headers, body, JSON, HTML form
- OpenAPI integration: Generate request templates from OpenAPI specs
- Automatic WAF detection: Identifies Akamai, F5, Imperva, ModSecurity and more
- Multiple report formats: PDF, HTML, JSON, DOCX assessment reports
Workflow
Build
- 1. Build the Go binary:
CODEBLOCK0
Basic Scanning
- 2. Run a basic scan against target:
CODEBLOCK1
Advanced Usage
- 3. For specific protocols or configurations:
- gRPC testing:
--grpcPort 9000
- OpenAPI:
--openapiFile api.yaml
- Custom test cases: INLINECODE2
Analyze Results
- 4. Review the generated report in
reports/ directory
Test Case Format
Test cases are defined in YAML:
CODEBLOCK2
Each file generates len(payload) × len(encoder) × len(placeholder) test requests.
Supported Encoders
| Encoder | Description |
|---|
| Base64 | Base64 encoding |
| Base64Flat |
Base64 without padding |
| URL | URL encoding |
| JSUnicode | JavaScript Unicode encoding |
| Plain | No encoding |
| XML Entity | XML entity encoding |
Supported Placeholders
| Placeholder | Description |
|---|
| URLPath | URL path |
| URLParam |
URL parameter |
| Header | HTTP header |
| UserAgent | User-Agent header |
| RequestBody | Request body |
| JSONBody | JSON request body |
| JSONRequest | JSON request |
| HTMLForm | HTML form |
| HTMLMultipartForm | Multipart form |
| SOAPBody | SOAP message body |
| XMLBody | XML request body |
| gRPC | gRPC request |
| GraphQL | GraphQL request |
| RawRequest | Raw HTTP request |
Configuration Options
CODEBLOCK3
Examples
Basic scan
CODEBLOCK4
gRPC testing
CODEBLOCK5
OpenAPI driven testing
CODEBLOCK6
Docker usage
CODEBLOCK7
Requirements
- - Go 1.24+
- Chrome browser (optional, for PDF report generation)
Project Structure
CODEBLOCK8
Notes
- - This project is based on GoTestWAF from Wallarm
- Test cases in
testcases/owasp/ are true-positive (should be blocked) - Test cases in
testcases/false-pos/ are true-negative (should pass) - Reports are saved to
reports/ directory by default
License
MIT License - based on the original GoTestWAF project.
WAF规则验证器技能
目的
WAF规则验证器是一个用于评估Web应用安全解决方案(WAF、API网关、IPS)的工具。它通过生成恶意请求来测试安全防护规则的有效性,支持REST、GraphQL、gRPC、SOAP、XMLRPC等多种API协议。
何时激活
- - 用户需要测试WAF规则有效性时
- 对Web应用防火墙进行安全验证时
- 评估API网关安全防护时
- 对WAF部署进行渗透测试时
- 对WAF拦截率性能进行基准测试时
功能特性
- - 多协议支持:REST、GraphQL、gRPC、SOAP、XMLRPC
- 多种编码方式:Base64、URL、JSUnicode、Plain、XML实体
- 多个注入点:URL路径、URL参数、请求头、请求体、JSON、HTML表单
- OpenAPI集成:从OpenAPI规范生成请求模板
- 自动WAF检测:识别Akamai、F5、Imperva、ModSecurity等
- 多种报告格式:PDF、HTML、JSON、DOCX评估报告
工作流程
构建
- 1. 构建Go二进制文件:
bash
make gotestwaf_bin
# 或
go build -o gotestwaf ./cmd/gotestwaf
基础扫描
- 2. 对目标运行基础扫描:
bash
./gotestwaf --url=http://target-url --noEmailReport
高级用法
- 3. 针对特定协议或配置:
- gRPC测试:--grpcPort 9000
- OpenAPI:--openapiFile api.yaml
- 自定义测试用例:--testCasesPath ./custom-testcases
分析结果
- 4. 查看reports/目录下生成的报告
测试用例格式
测试用例使用YAML定义:
yaml
payload:
- 恶意字符串1
- 恶意字符串2
encoder:
- Base64Flat
- URL
placeholder:
- URLPath
- JSONRequest
type: SQL注入
每个文件生成len(payload) × len(encoder) × len(placeholder)个测试请求。
支持的编码器
| 编码器 | 描述 |
|---|
| Base64 | Base64编码 |
| Base64Flat |
无填充Base64编码 |
| URL | URL编码 |
| JSUnicode | JavaScript Unicode编码 |
| Plain | 无编码 |
| XML实体 | XML实体编码 |
支持的占位符
| 占位符 | 描述 |
|---|
| URLPath | URL路径 |
| URLParam |
URL参数 |
| Header | HTTP请求头 |
| UserAgent | User-Agent请求头 |
| RequestBody | 请求体 |
| JSONBody | JSON请求体 |
| JSONRequest | JSON请求 |
| HTMLForm | HTML表单 |
| HTMLMultipartForm | 多部分表单 |
| SOAPBody | SOAP消息体 |
| XMLBody | XML请求体 |
| gRPC | gRPC请求 |
| GraphQL | GraphQL请求 |
| RawRequest | 原始HTTP请求 |
配置选项
--url string 目标URL(必需)
--grpcPort uint16 gRPC端口
--graphqlURL string GraphQL URL
--openapiFile string OpenAPI规范文件路径
--testCasesPath string 测试用例目录(默认:testcases)
--testCase string 仅运行指定测试用例
--testSet string 仅运行指定测试集
--httpClient string HTTP客户端类型:chrome, gohttp(默认:gohttp)
--workers int 并发工作线程数(默认:5)
--blockStatusCodes ints 被拦截请求的HTTP状态码(默认:[403])
--passStatusCodes ints 通过请求的HTTP状态码(默认:[200,404])
--blockRegex string 识别被拦截响应的正则表达式
--passRegex string 识别通过响应的正则表达式
--reportFormat strings 报告格式:none, json, html, pdf, docx(默认:[pdf])
--reportPath string 报告输出目录(默认:reports)
--reportName string 报告文件名
--noEmailReport 将报告保存在本地而非发送邮件
--wafName string WAF产品名称(默认:generic)
--skipWAFIdentification 跳过WAF检测
--version 显示版本信息
示例
基础扫描
bash
./gotestwaf --url=http://localhost:8080 --noEmailReport
gRPC测试
bash
./gotestwaf --url=http://localhost --grpcPort 9000 --noEmailReport
OpenAPI驱动测试
bash
./gotestwaf --url=http://api.example.com --openapiFile ./api.yaml --noEmailReport
Docker使用
bash
docker pull wallarm/gotestwaf
docker run --rm --network=host -v ${PWD}/reports:/app/reports \
wallarm/gotestwaf --url=http://target-url --noEmailReport
系统要求
- - Go 1.24+
- Chrome浏览器(可选,用于PDF报告生成)
项目结构
.
├── cmd/gotestwaf/ # 主入口
├── internal/
│ ├── config/ # 配置管理
│ ├── db/ # 测试用例数据库
│ ├── payload/ # 载荷编码
│ │ ├── encoder/ # 编码器实现
│ │ └── placeholder/ # 占位符实现
│ ├── scanner/ # 扫描逻辑和客户端
│ ├── openapi/ # OpenAPI解析器
│ └── report/ # 报告生成
├── pkg/ # 导出包
├── testcases/ # 默认测试用例
└── tests/integration/ # 集成测试
注意事项
- - 本项目基于Wallarm的GoTestWAF
- testcases/owasp/中的测试用例为真阳性(应被拦截)
- testcases/false-pos/中的测试用例为真阴性(应通过)
- 报告默认保存到reports/目录
许可证
MIT许可证 - 基于原始GoTestWAF项目。