遍历脚本 — 工具配置

自己写的通用遍历脚本,本质是”循环 + 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!=404contains:flaggrep:ctfhub\{
选项说明
--ext "a&b"附加值空间,与主值空间做笛卡尔积(名×后缀)
--user u基本认证:值仅作密码,URL 固定,用 u:值 尝试
--recurse命中后把值回填为下一轮 base 继续深入(目录逐层遍历)
--maxdepth N递归最大深度(默认 5)
--timeout Ncurl 超时秒数(默认 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大字典目录爆破未知路径、大量候选
ffufFUZZ 全场景 fuzzing参数、路径、请求头各种注入点
trav(本工具)小型值空间精确遍历CTF 题 20~几百候选、需要自定义判别的场景

心法:候选量小(几十个)用 trav,量大(几千上万个)用 gobuster/ffuf 挂字典。CTF 题里”提示给了命名规律”的题,trav 一条命令覆盖。

关联教程