hack007x/veil
GitHub: hack007x/veil
Veil 是一款基于自定义模板语法的 HTTP 漏洞扫描器,支持多请求链、OOB 带外验证和多种攻击模式。
Stars: 3 | Forks: 0

「镜花水月 —— 幻象与实相相生相成。」
透过表象看本质 · 化无形为有形以守护安全
**基于模板的漏洞扫描器**
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集成, 二进制文件, 加密, 响应匹配, 多请求链, 密码管理, 对称加密, 指纹识别, 插件系统, 日志审计, 模板引擎, 消息认证码, 漏洞扫描器, 程序破解, 网络安全, 自动化审计, 自定义语法, 隐私保护