cyhfvg/url_enum

GitHub: cyhfvg/url_enum

快速异步URL路径枚举工具,用于安全测试和漏洞发现。

Stars: 0 | Forks: 0

# URL 枚举 [简体中文](README.zh-CN.md) `url_enum` 是一个命令行工具,用于从单词列表中发现 URL 路径或将值替换到 URL 模板中。它接受一个网络目标或目标列表文件,并生成易于过滤或保存的结果。 ## 功能 - 将单词列表条目追加到目标 URL 或替换支持请求位置中的令牌。 - 读取每行包含一个目标 URL 的现有目标列表文件。 - 发送带有自定义头部、代理设置和可配置超时的 `GET` 或 `HEAD` 请求。 - 控制并发、添加请求抖动并可选地跟随重定向。 - 随机化完全展开的目标和单词列表请求序列。 - 生成扩展变体并按状态码或响应大小过滤结果。 - 将扫描结果写入 CSV 或 JSON Lines。 ## 安装 ### 下载发布版本 当可用时,从 [GitHub 发布](https://github.com/cyhfvg/url_enum/releases) 下载您平台的二进制存档,提取它,并将 `url_enum`(或在 Windows 上为 `url_enum.exe`)放置在您的 `PATH` 中。 发布构建的目标: - Linux x86_64: `x86_64-unknown-linux-musl` - Windows x86_64: `x86_64-pc-windows-gnu` ### 从源代码构建 安装稳定的 Rust 工具链,然后运行: ``` git clone https://github.com/cyhfvg/url_enum.git cd url_enum cargo build --release ``` 编译的二进制文件位于 `target/release/url_enum`(或在 Windows 上的 `target\release\url_enum.exe`)。 ## 快速入门 创建一个单词列表,每行一个条目: ``` admin login api/v1 ``` 在授权的目标上探测这些路径: ``` url_enum -t https://example.com -d paths.txt --filter-http-code 200,403 ``` 默认情况下,结果以 CSV 格式打印。要保存 JSON Lines 格式,请: ``` url_enum -t https://example.com -d paths.txt \ --filter-http-code 200,403 \ --format jsonl -o results.jsonl ``` ## 使用示例 ### 将路径追加到现有 URL ``` url_enum -t https://example.com/base -d paths.txt --concurrency 100 ``` 具有 `admin` 和 `api/v1` 等条目的此操作探测 `https://example.com/base/` 下的 URL。 ### 扫描目标列表 当传递给 `-t/--target` 的值命名一个现有文件时,它被读取为目标列表,每行一个目标 URL: ``` https://one.example.com https://two.example.com/base ``` ``` url_enum -t targets.txt -d paths.txt --concurrency 50 ``` 默认情况下,请求按目标主要顺序生成:第一个目标的每个单词列表条目,然后是下一个目标的每个单词列表条目。 ### 随机化请求顺序 使用 `--random-sequence` 来打乱完整的目标和单词列表请求序列: ``` url_enum -t targets.txt -d paths.txt --random-sequence ``` 对于两个目标和三个单词列表条目,打乱的序列是从所有六个配对中抽取的,而不仅仅是打乱的目标列表。 ### 减少请求突发 默认情况下,每个请求在发送之前都会从 `0` 到 `100` 毫秒获得确定的抖动,以减少意外的请求突发。增加界限以进一步分散请求开始时间,同时保留选定的并发限制: ``` url_enum -t https://example.com -d paths.txt \ --concurrency 20 \ --request-jitter-ms 250 ``` 每个 HTTP 请求在发送之前等待 `0` 到配置的毫秒数。这有助于减少短突发,但它不能替代授权、保守的并发或商定的测试窗口。 为了在受控环境中故意禁用此保护,请明确传递 `--request-jitter-ms 0`。 ### 替换占位符 `--replace TOKEN` 支持以下位置的占位符: - URL - 头部名称 - 头部值 这些位置中 `TOKEN` 的每个出现都将替换为当前的单词列表条目。例如: ``` url_enum -t http://example.com/ENUM/a -d words.txt --replace ENUM \ -H 'X-ENUM-TRACE: ENUM.example.com' ``` 对于单词列表条目 `word1`,这会发送一个相当于以下请求的请求: ``` curl http://example.com/word1/a -H 'X-word1-TRACE: word1.example.com' ``` ### 尝试常见的文件扩展名 ``` url_enum -t https://example.com -d paths.txt --extensions php,bak,txt ``` 每个单词都尝试作为提供的内容以及每个请求的扩展名。 ### 添加请求头部 `-H/--header` 可以指定多次: ``` url_enum -t https://example.com -d paths.txt \ -H 'Authorization: Bearer TOKEN' \ -H 'X-Trace: scan' ``` 可以将 Cookie 作为请求头部提供: ``` url_enum -t https://example.com -d paths.txt -H 'Cookie: session=VALUE' ``` ### 使用代理 ``` url_enum -t https://example.com -d paths.txt --proxy http://127.0.0.1:8080 url_enum -t https://example.com -d paths.txt \ --proxy 'socks5h://username:password@127.0.0.1:1080' ``` 支持的代理 URL 方案是 `http`、`https`、`socks5` 和 `socks5h`。 当需要身份验证时,在代理 URL 中包含凭据。 ### 从标准输入读取目标 ``` printf '%s\n' 'https://example.com' | url_enum -t - -d paths.txt ``` 标准输入必须提供一个目标 URL。 ## 选项 | 选项 | 描述 | 默认值 | | --- | --- | --- | | `-t, --target ` | 目标 URL、现有目标列表文件或 `-` 以从标准输入读取一个 URL。 | 必需的 | | `-d, --dict ` | 每行一个条目的单词列表文件。 | 必需的 | | `-r, --replace ` | 在 URL、头部名称或头部值中替换 `TOKEN`。 | 追加路径 | | `--concurrency ` | 最大并发请求数量。 | `50` | | `--request-jitter-ms ` | 在发送请求之前添加每个请求的确定抖动;明确传递 `0` 以禁用。 | `100` | | `--random-sequence` | 打乱完全展开的目标和单词列表请求序列。 | 禁用 | | `--timeout ` | 请求超时时间(秒)。 | `10` | | `--method ` | HTTP 方法。 | `get` | | `--user-agent ` | User-Agent 值。 | 浏览器风格的值 | | `-H, --header <'NAME: VALUE'>` | 添加请求头部;根据需要重复指定。 | 无 | | `--proxy ` | 使用 HTTP(S) 或 SOCKS5 代理;凭据可以包含在 URL 中。 | 无 | | `--follow-redirect ` | 跟随重定向并包含返回的响应。 | `false` | | `--insecure ` | 允许无效的 HTTPS 证书。 | `true` | | `--filter-http-code ` | 仅包含逗号分隔的 HTTP 状态码。 | 所有 | | `--black-http-code ` | 排除逗号分隔的 HTTP 状态码。 | 无 | | `--black-size ` | 排除响应大小,例如 `612` 或 `612-614`。 | 无 | | `--extensions ` | 添加逗号分隔的扩展变体。 | 无 | | `-o, --output ` | 将结果写入文件而不是标准输出。 | 标准输出 | | `--format ` | 输出格式。 | `csv` | 运行 `url_enum --help` 以获取构建中可用的命令行帮助。 ## 基准测试 存储库包含一个可重复的本地基准测试,它比较了不同并发值和 CSV/JSONL 输出格式之间的吞吐量。它使用回环 HTTP 服务器,不接触外部目标: ``` cargo bench --bench throughput ``` ## 输出 CSV 和 JSON Lines 输出都包含以下字段: | 字段 | 描述 | | --- | --- | | `word` | 用于请求的单词列表条目。 | | `url` | 报告的结果 URL。 | | `status` | 当收到响应时,HTTP 状态码。 | | `size` | 可用时的响应大小。 | | `elapsed_ms` | 毫秒级的经过时间。 | | `error` | 当请求失败时,错误消息。 | ## 安全注意事项 - 需要授权:仅扫描您拥有或明确授权测试的系统。 - 从保守的 `--concurrency` 值开始,并遵循商定的测试界限。默认的 `--request-jitter-ms 100` 有助于减少意外的短突发;仅当零延迟是故意的时才传递 `--request-jitter-ms 0`。 - 默认接受无效的 HTTPS 证书。当需要证书验证时,使用 `--insecure false`。 - 将输出文件和单词列表视为可能敏感的数据。 ## 许可证 本项目根据 [BSD 3-Clause License](LICENSE) 许可。
标签:CSV 输出, HTTP 请求, JSON 输出, Rust 语言, URL 枚举, Web 安全, 代理设置, 可视化界面, 响应大小, 响应状态码, 并发控制, 异步编程, 扩展名生成, 结果保存, 结果格式化, 结果过滤, 网络测试, 词表攻击, 超时配置, 路径发现, 通知系统, 重定向处理, 随机化序列