遍历脚本 — 工具配置
自己写的通用遍历脚本,本质是”循环 + curl + 判别”的封装。字典循环、组合枚举、目录逐层深入,全都能一条命令完成。定位:通用、轻量、零依赖,是对 gobuster/ffuf 这类专职工具的补充。
安装
# 脚本本体在 dotfiles 仓库,stow 同步
# ~/dotfiles/bin/.local/bin/trav -> ~/.local/bin/trav
cp ~/dotfiles/bin/.local/bin/trav ~/.local/bin/trav
chmod +x ~/.local/bin/trav~/.local/bin 已在 PATH 中,装完直接敲 trav 就能用。
语法
trav <URL前缀> "<值空间1>&<值空间2>..." <判别规则> [选项]| 组成部分 | 说明 | 示例 |
|---|---|---|
| URL前缀 | 目标地址前缀 | http://x:10800/ |
| 值空间 | 候选值集合:内联 & 分隔 / 字典文件 @文件 / 生成器 {1..10} | "web&www&backup"、"@pw.txt"、"{1..100}" |
| 判别规则 | 命中条件 | ==200、!=404、contains:flag、grep:ctfhub\{ |
| 选项 | 说明 |
|---|---|
--ext "a&b" | 附加值空间,与主值空间做笛卡尔积(名×后缀) |
--user u | 基本认证:值仅作密码,URL 固定,用 u:值 尝试 |
--recurse | 命中后把值回填为下一轮 base 继续深入(目录逐层遍历) |
--maxdepth N | 递归最大深度(默认 5) |
--timeout N | curl 超时秒数(默认 5) |
--threads N | 并行探测数(默认 1,—recurse 时强制串行) |
注意:多个值空间是纯字符串拼接,分隔符(如后缀的
.)由用户写在值里:--ext ".zip&.tar.gz"。
三类场景(CTF 实测回放)
场景 1:基本认证(字典遍历)
trav http://target/secret/ "@pw.txt" "==200" --user admin
# HIT: http://target/secret/ -> 200 ← 密码在字典里试中的那一行值空间来自字典文件(@ 前缀),--user admin 表示候选值是密码。与手写 while read 循环完全等价,只是封装好了。
场景 2:备份文件下载(组合枚举)
# 名 × 后缀 笛卡尔积,一次扫完 28 种组合
trav http://target/ "web&website&backup&back&www&wwwroot&temp" "!=404" --ext ".zip&.tar&.tar.gz&.rar"
# HIT: http://target/www.zip -> 200命中后继续:下载 → unzip -l → 从文件名找真实 flag 路径(见 网站源码)。
场景 3:目录逐层遍历(递归回填)
trav http://target/flag_in_here/ "1&2&3&4" "==200" --recurse
# HIT: http://target/flag_in_here/1 -> 200
# HIT: http://target/flag_in_here/1/4 -> 200--recurse 命中后自动把命中值回填为下一轮 base,一层层深入,直到 --maxdepth 或扫完。
场景 4:内容判别(不止状态码)
# 响应包含指定字符串
trav http://target/ "flag_1155626646.txt&50x.html&index.html" "contains:ctfhub{"
# 正则匹配并输出匹配内容
trav http://target/ "a&b&c" "grep:ctfhub\{[^}]*\}"grep: 规则命中时会把匹配到的内容原样输出(如 flag 本体)。
原理:三要素抽象
所有遍历问题的本质相同,trav 把三要素参数化:
flowchart LR A[值空间来源] --> B[curl 探测] B --> C[判别规则] C -->|命中| D[HIT 输出] C -->|未命中| B D -->|--recurse| B
| 要素 | trav 中的参数 | 对应场景 |
|---|---|---|
| 值空间 | 位置参数 2 + --ext | 字典 / 组合 / 生成器 |
| 判别 | 位置参数 3 | 状态码 / 内容 / 正则 |
| 命中处理 | 输出 + --recurse | 一层命中→继续下一层 |
与专职工具的分工
| 工具 | 定位 | 场景 |
|---|---|---|
| gobuster / dirsearch | 大字典目录爆破 | 未知路径、大量候选 |
| ffuf | FUZZ 全场景 fuzzing | 参数、路径、请求头各种注入点 |
| trav(本工具) | 小型值空间精确遍历 | CTF 题 20~几百候选、需要自定义判别的场景 |
心法:候选量小(几十个)用 trav,量大(几千上万个)用 gobuster/ffuf 挂字典。CTF 题里”提示给了命名规律”的题,trav 一条命令覆盖。