nemesida-waf/waf-bypass
GitHub: nemesida-waf/waf-bypass
一款开源的 WAF 有效性检测工具,通过多类型攻击 payload 自动化测试 WAF 的误报与漏报情况。
Stars: 1503 | Forks: 186
# WAF Bypass Tool
WAF Bypass Tool 是一款开源工具,用于使用预定义和可自定义的 payload 来分析任何 WAF 的误报和漏报安全性。在攻击者之前检查您的 WAF。WAF Bypass Tool 由 Nemesida WAF 团队在社区的参与下开发。

## 请勿用于非法用途
严禁将其用于任何非法目的。请遵守法律。对于使用本软件可能带来的相关风险,我们概不负责。
## 如何运行
### 使用 Docker 运行
最新版本的 waf-bypass 始终可以通过 [Docker Hub](https://hub.docker.com/r/nemesida/waf-bypass) 获取。可以使用以下命令轻松拉取:
# docker pull nemesida/waf-bypass # docker run nemesida/waf-bypass --host='example.com' ### 使用 pipx 运行# pipx install git+https://github.com/nemesida-waf/waf-bypass.git # <pipx bin dir>/waf-bypass ### 直接从源代码使用 CLI 运行# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/ # python3 -m pip install -r /opt/waf-bypass/requirements.txt # python3 /opt/waf-bypass/main.py --host='example.com' #### 选项 -'--proxy'(--proxy='http://proxy.example.com:3128') - 该选项允许指定要连接的目标,而不是主机。 -'--header'(--header 'Authorization: Basic YWRtaW46YWRtaW4=' --header 'X-TOKEN: ABCDEF') - 该选项允许指定随所有请求一起发送的 HTTP header(例如用于身份验证)。允许多次使用。 -'--user-agent'(--user-agent 'MyUserAgent 1/1') - 该选项允许指定随所有请求一起发送的 HTTP User-Agent,除非 payload 设置了 ("USER-AGENT")。 -'--block-code'(--block-code='403' --block-code='222') - 该选项允许您指定当 WAF 被拦截时预期的 HTTP 状态码。(默认值为403)。允许多次使用。 -'--threads'(--threads=15) - 该选项允许指定并行扫描线程数(默认值为10)。 -'--timeout'(--timeout=10) - 该选项允许指定请求处理超时时间(以秒为单位)。(默认值为30)。 -'--exclude-dir'- 排除 payload 目录 (--exclude-dir='SQLi,XSS')。 -'--json-format'- 该选项允许您以 JSON 格式显示工作结果(对于将该工具与安全平台集成非常有用)。如果未指定该选项,输出将采用表格格式(默认格式)。 -'--details'- 显示误报和漏报的 payload。与--json-format选项不兼容。 -'--no-progress'- 不显示进度条。 -'--curl-replay'- 显示 cURL 命令以重现误报、漏报或失败的请求。与--json-format选项不兼容。 ## JSON 格式 JSON 输出规范示例:{ "TARGET": "https://example.com", // 由 --host 选项定义 "PROXY": {}, // 由 --proxy 选项定义 "HEADERS": { // 由 --header 选项定义 "User-Agent": "" }, "BLOCK-CODE": [ // 由 --block-code 选项定义 ... ], "THREADS": 50, // 由 --threads 选项定义 "TIMEOUT": 30, // 由 --timeout 选项定义 "EXCLUDE-DIR": [ // 由 --exclude-dir 选项定义 ... ], "FAILED": { // 处理状态为失败的请求 "MFD/7.json": { "BODY": "WBHTTPSConnectionPool(host='example.com', port=443): Read timed out. (read timeout=1)" }, ... }, "PASSED": { // 通过的请求 "UWA/3.json": { "URL": "403 RESPONSE CODE" }, ... }, "FALSED": { // 处理状态为误报的请求 ... }, "BYPASSED": { // 处理状态为漏报的请求 "UWA/26.json": { "URL": "200 RESPONSE CODE" }, ... }, "TestRequest": { // 具有处理状态的测试请求,不包括通过的请求 "FAILED": {}, "FALSED": { "UWA/3.json": { "URL": "403 RESPONSE CODE" }, ... } }, "CURL": { // 用于重现误报和漏报请求的 cURL 命令 "FALSED": {}, "BYPASSED": { "UWA/26.json": { "URL": "curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' 'https://example.com/do.php#.png'" }, ... } } } ## Payload 根据目的不同,payload 位于相应的文件夹中: - FP - 误报 payload - API - API 测试 payload - CM - 自定义 HTTP Method payload - GraphQL - GraphQL 测试 payload - LDAP - LDAP 注入 payload - LFI - 本地文件包含 payload - MFD - multipart/form-data payload - NoSQLi - NoSQL 注入 payload - OR - 开放重定向 payload - RCE - 远程代码执行 payload - RFI - 远程文件包含 payload - SQLi - SQL 注入 payload - SSI - 服务端包含 payload - SSRF - 服务端请求伪造 payload - SSTI - 服务端模板注入 payload - UWA - 非授权访问 payload - XSS - 跨站脚本攻击 payload ### 编写您自己的 payload 构建 payload 时,会使用以下 zone、method 和选项: - URL - 请求的路径 - ARGS - 请求的查询参数 - BODY - 请求的 body - COOKIE - 请求的 cookie - USER-AGENT - 请求的 user-agent - REFERER - 请求的 referer - HEADER - 请求的 header - METHOD - 请求的 method - BOUNDARY - 指定请求 boundary 的内容。仅适用于 MFD 目录中的 payload。 - ENCODE - 除了 payload 本身的编码外,指定 payload 编码的类型(Base64、HTML-ENTITY、UTF-16)。多个值以空格分隔(例如Base64 UTF-16)。仅适用于ARGS、BODY、COOKIE和HEADERzone。不适用于 API 和 MFD 目录中的 payload。与JSON选项不兼容。 - JSON - 指定请求的 body 应为 JSON 格式 - BLOCKED - 指定请求是否应被拦截(FN 测试)或不被拦截(FP 测试) 除下文描述的某些情况外,各个 zone 之间彼此独立并单独进行测试(即如果指定了 2 个 zone - 脚本将发送 2 个请求 - 依次检查第一个和第二个 zone)。 对于 zone,您可以使用%RND%后缀,它允许您生成一个由 6 个字母和数字组成的任意字符串。(例如:param%RND=my_payload或param=%RND%或A%RND%B) 您可以创建自己的 payload,为此,请在“/payload/”文件夹中创建您自己的文件夹,或者将 payload 放在现有的文件夹中(例如:“/payload/XSS”)。允许的数据格式为 JSON。 #### API 目录 位于此目录中的 API 测试 payload 会自动附加'Content-Type: application/json'header。 #### MFD 目录 对于位于此目录中的 MFD (multipart/form-data) payload,您必须指定BODY(必填)和BOUNDARY(可选)。如果未设置BOUNDARY,它将自动生成(在这种情况下,只能为 BODY 指定 payload,而不包含额外数据('... Content-Disposition: form-data; ...')。 如果指定了BOUNDARY,则BODY的内容必须按照 RFC 进行格式化,但这允许在BODY中包含由BOUNDARY分隔的多个 payload。 此目录中允许使用其他 zone(例如:URL、ARGS等)。无论 zone 为何,所有请求都会添加'Content-Type: multipart/form-data; boundary=...'header。
标签:Blue Team, CISA项目, Docker, GitHub项目, Homebrew安装, Python, WAF测试, Web安全, 安全防御评估, 无后门, 蓝队分析, 请求拦截, 逆向工具