hack007x/veil

GitHub: hack007x/veil

Veil 是一款基于自定义模板语法的 HTTP 漏洞扫描器,支持多请求链、OOB 带外验证和多种攻击模式。

Stars: 3 | Forks: 0

Veil icon 「镜花水月 —— 幻象与实相相生相成。」 透过表象看本质 · 化无形为有形以守护安全
**基于模板的漏洞扫描器** Veil 是一个用 Go 编写的快速、模板驱动的 HTTP 漏洞扫描器。
它针对一个或多个目标执行 `.poc` 模板文件,
对响应评估灵活的匹配表达式,
从响应正文中提取证据,
并输出清晰、带颜色的结果。
[English](https://github.com/hack007x/veil/blob/main/README_EN.md) • [中文](https://github.com/hack007x/veil/blob/main/README_ZH.md) • [使用自定义语法编写 PoC](https://github.com/hack007x/veil/wiki/veil-Poc-%E8%AF%AD%E6%B3%95%E6%80%BB%E8%A7%88v1.2.0) • [POC](https://github.com/hack007x/veil_poc)
## 目录 - [功能特性](#features) - [安装](#installation) - [快速入门](#quick-start) - [基本扫描](#basic-scanning) - [筛选](#filtering) - [输出](#output) - [网络配置](#network-configuration) - [模板管理](#template-management) - [模板语法](#template-syntax) - [基本结构](#basic-structure) - [元数据字段](#metadata-fields) - [变量](#variables) - [匹配器](#matchers) - [提取器](#extractors) - [多请求链](#multi-request-chains) - [攻击模式](#attack-modes) - [OOB 验证](#oob-verification) - [内置函数](#built-in-functions) - [内置变量](#built-in-variables) - [CLI 参考](#cli-reference) - [免责声明](#disclaimer) ## 功能特性 - **自定义模板语法** — 简洁的 `.poc` 文件格式,包含元数据、变量、多请求链、匹配器和提取器 - **多请求链** — 使用 `---` 分隔多个请求;提取的值会自动传递给后续步骤 - **灵活的匹配器** — 状态码比较、正文匹配(contains/regex/starts_with/ends_with)、Header 匹配、逻辑运算符(&&/||/not) - **值提取** — 通过正则、JSON path 或键值对模式从响应中提取数据 - **OOB 回调验证** — 内置支持 ceye.io / interactsh / dnslog.cn / dig.pm;自动检测模板中的 OOB 引用 - **攻击模式** — Sniper(逐一迭代变量)/ Pitchfork(步调一致)/ Clusterbomb(笛卡尔积) - **多值变量** — 使用管道符分隔 `val1 | val2 | val3` 或通过 `@file(wordlist.txt)` 从文件加载 - **模板函数** — 22 个内置函数:base64、URL 编码、MD5/SHA 哈希、字符串操作、随机生成等 - **存活探测** — 扫描前自动探测目标,优先使用 HTTPS - **模板校验** — 两阶段静态分析(原始文本 lint + AST 验证)以捕获语法错误和潜在问题 - **HTML / JSON 报告** — HTML 报告实时流式输出,包含请求/响应面板、curl 复现命令和多请求标签页 - **并发扫描** — 具有可配置并发性的 Goroutine 池 - **POC 管理** — `-pl` 列出所有 POC,`-pv` 按 ID 查看详情 ## 安装 ``` # 克隆 repository git clone https://github.com/hack007x/veil.git cd veil # 构建 go build -o veil . # 将 POC 文件放入 veil_poc/ 目录(默认搜索路径) mkdir -p veil_poc ``` **环境要求**: Go 1.21+ ## 快速入门 ### 基本扫描 ``` # 扫描单个目标 ./veil -u https://example.com # 扫描多个目标 ./veil -u https://a.com -u https://b.com # 从文件加载目标 ./veil -l targets.txt # 指定 template ./veil -u https://example.com -t poc/cve-2023-xxxx.poc # 指定 template 目录 ./veil -u https://example.com -T my_pocs/ ``` ### 筛选 ``` # 按 severity ./veil -u https://example.com -severity critical,high # 按 tags ./veil -u https://example.com -tags rce,sqli # 按 CVE ./veil -u https://example.com -cve CVE-2023-5561 # 按 template ID ./veil -u https://example.com -id CVE-2023-5561 ``` ### 输出 ``` # Verbose 模式(显示 request/response/matching 详情) ./veil -u https://example.com -v # 保存 JSON 报告 ./veil -u https://example.com -o results.json # 保存 HTML 报告 ./veil -u https://example.com -o report.html ``` ### 网络配置 ``` # 设置 timeout ./veil -u https://example.com -timeout 15 # 使用 proxy ./veil -u https://example.com -proxy http://127.0.0.1:8080 # 跳过 SSL 验证 ./veil -u https://example.com -no-verify-ssl # 禁用 Redirects ./veil -u https://example.com -no-follow-redirects ``` ### 模板管理 ``` # 列出所有 POC ./veil -pl # 按 ID 查看特定 POC ./veil -pv CVE-2023-5561 # 验证 template 而不扫描 ./veil -validate -T my_pocs/ ``` ## 模板语法 `.poc` 文件是一种声明式模板格式,用于描述漏洞检测逻辑。 ### 基本结构 ``` ## id: CVE-2023-XXXX ## name: Vulnerability Name ## author: researcher ## severity: high ## description: Vulnerability description ## cve: CVE-2023-XXXX ## tags: rce, injection ## reference: https://example.com/advisory GET /vulnerable/path?param=value User-Agent: {{random_ua}} #@ matcher: status_code == 200 && body contains "vulnerable" ``` ### 元数据字段 | 字段 | 必填 | 描述 | |-------|----------|-------------| | `id` | ✓ | 唯一标识符 | | `name` | ✓ | 漏洞名称 | | `author` | ✓ | 作者 | | `severity` | ✓ | critical / high / medium / low / info | | `cve` | | CVE 标识符 | | `tags` | | 逗号分隔的标签 | | `description` | | 漏洞描述 | | `affects` | | 受影响的软件/版本 | | `reference` | | 参考链接(可重复) | | `cvss-score` | | CVSS 评分 (0.0-10.0) | | `shodan-query` | | Shodan 搜索语法 | | `fofa-query` | | FOFA 搜索语法 | ### 变量 ``` #$ payload = test_value #$ paths = /api/v1 | /api/v2 | /api/v3 #$ usernames = @file(users.txt) ``` ### 匹配器 ``` #@ matcher: status_code == 200 #@ matcher: body contains "success" #@ matcher: body matches /version[:\s]+(\d+\.\d+)/ #@ matcher: header["Content-Type"] contains "json" #@ matcher: status_code == 200 && body contains "admin" #@ matcher: (body contains "root" || body contains "admin") && status_code == 200 #@ condition: and ``` ### 提取器 ``` #> extract: name=token, regex=/csrf_token[=:]([a-f0-9]+)/, group=1 #> extract: name=version, json=$.data.version #> extract: name=session, kval=JSESSIONID, from=headers #> extract: name=internal_val, regex=/id=(\d+)/, internal=true ``` ### 多请求链 ``` GET /api/login #@ matcher: status_code == 200 #> extract: name=token, regex=/token":"([^"]+)/ --- POST /api/action Content-Type: application/json {"token": "{{token}}", "cmd": "whoami"} #@ matcher: body contains "success" ``` ### 攻击模式 ``` #$ username = admin | root | test #$ password = 123456 | admin | password #@ attack: clusterbomb ``` ### OOB 验证 ``` GET /api/ssrf?url=http://{{oob_domain}}/probe #@ oob: dns #@ matcher: oob_received == true ``` ### 内置函数 | 函数 | 示例 | 描述 | |----------|---------|-------------| | `base64(x)` | `{{base64(payload)}}` | Base64 编码 | | `url_encode(x)` | `{{url_encode(param)}}` | URL 编码 | | `md5(x)` | `{{md5(password)}}` | MD5 哈希 | | `sha256(x)` | `{{sha256(data)}}` | SHA-256 哈希 | | `to_lower(x)` | `{{to_lower(Name)}}` | 转换为小写 | | `random_str(n)` | `{{random_str(8)}}` | 随机字符串 | | `random_int(a,b)` | `{{random_int(1,100)}}` | 随机整数 | | `replace(x,a,b)` | `{{replace(str,old,new)}}` | 字符串替换 | 支持嵌套调用:`{{base64({{payload}})}}` ### 内置变量 | 变量 | 描述 | |----------|-------------| | `{{Hostname}}` | 目标主机名 | | `{{Host}}` | 主机名:端口 | | `{{BaseURL}}` | scheme://host:port | | `{{Scheme}}` | http 或 https | | `{{Port}}` | 端口号 | | `{{Path}}` | URL 路径 | | `{{random_ua}}` | 随机 User-Agent | | `{{timestamp}}` | 当前 Unix 时间戳 | | `{{oob_domain}}` | OOB 回调域名 | | `{{oob_url}}` | OOB 回调 URL | ## CLI 参考 | 标志 | 描述 | 默认值 | |------|-------------|---------| | `-u URL` | 目标 URL(可重复) | | | `-l FILE` | 目标列表文件 | | | `-t PATH` | 模板路径(可重复) | | | `-T DIR` | 模板目录 | `./veil_poc/` | | `-id VALUE` | 按 ID 筛选 | | | `-severity VALUE` | 按严重程度筛选 | | | `-tags VALUE` | 按标签筛选 | | | `-cve VALUE` | 按 CVE 筛选 | | | `-timeout N` | 超时时间(秒) | `10` | | `-proxy URL` | 代理 URL | | | `-no-verify-ssl` | 跳过 TLS 验证 | `false` | | `-verify-ssl` | 启用 TLS 证书验证 | `false` | | `-c N` | 并发数 | `10` | | `-v` | 详细模式 | `false` | | `-o FILE` | 输出文件 (.json/.html) | | | `-validate` | 校验模板并退出 | `false` | | `-pl` | 列出所有 POC | | | `-pv ID` | 按 ID 查看 POC | | ## 免责声明 本工具仅供授权的安全测试和研究目的使用。请勿在未经明确许可的情况下对系统使用本工具。使用本工具即表示您同意对您的行为承担全部责任。
标签:C2日志可视化, Go语言, HTTP扫描, OOB检测, POC验证, SDK集成, 二进制文件, 加密, 响应匹配, 多请求链, 密码管理, 对称加密, 指纹识别, 插件系统, 日志审计, 模板引擎, 消息认证码, 漏洞扫描器, 程序破解, 网络安全, 自动化审计, 自定义语法, 隐私保护