diff --git a/README.md b/README.md index c3cccf3..0485bb7 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ mask生成阶段的函数 1. `--suffix` 在字典后面添加后缀, 可添加多个, 与原有的字典组成笛卡尔积 2. `--prefix` 在字典前面添加前缀, 可添加多个, 与原有的字典组成笛卡尔积 +3. `-e`/`--extension` 添加拓展名, 逗号分割 rule阶段的函数 1. `-L`/`--lowercase` 将字典中的所有字母转换为小写 @@ -112,7 +113,6 @@ rule阶段的函数 3. `--replace` 替换字典中的字符, 例如`--replace aaa=bbb` 将字典中的a替换为b, 可以添加多个`--replace` 4. `--remove-extension` 删除字典中的文件扩展名, 逗号分割 5. `--exclude-extension` 排除字典中的文件扩展名, 逗号分割 -6. `-e`/`--extension` 添加拓展名, 逗号分割 ### 字典生成器的优先级 @@ -229,6 +229,65 @@ type Baseline struct { spray默认输出到终端的格式是human-like文本, 输出到文件的格式是json格式, 可以通过`-o`参数指定输出格式, 类似gogo的-o参数, 可以指定如`-o url,status`这样的自定义格式. +## 高级用法 + +### 手动配置过滤器 + +假设一个功能为api的站点, 他通过全局的错误处理将返回值统一改成200/405. + +在spray中, 200是白名单状态码, 会跳过precompare, 直接到智能过滤的第二步, 开始内容的匹配. 如果内存中存在例如时间戳之类的随机数, 还会到第三步模糊过滤. + +而405状态码则输出没有任何配置的状态码, 返回结果大概率会能到模糊过滤中, 如果405与200差异较小. 这种情况下就需要手动修改过滤规则了. + +spray中修改过滤规则有很多中方式, 以这个例子进行简单介绍不同方式之间的差异. + +**方法1: 添加参数`--black-status 405`** +这种方式较为暴力, 如果代码中明确404页面的状态码被修改成405, 可以之间在precompare阶段过滤. + +如果405页面的依旧有可能存在有价值的信息, 则不推荐使用这种方式. + +**方法2: 添加参数`--fuzzy-status 405`** + +这种方法是比较推荐的, 他只会微调智能过滤的逻辑, 随机目录的405状态码将会加入到基线中, 如果其他请求也遇到了几乎相同的405页面, 则可以认为是无效数据过滤掉. + +这种微调可以保留智能过滤的全部功能, 并且不会有性能损耗. + +**方法3: 使用表达式匹配`--match current.Status != 405`** + +--match将会重载默认的智能过滤的全部逻辑. 也就是说, 智能过滤的123阶段都会跳过, 取而代之的是这个表达式. + +这个表达式表示, 所有状态码不等于405的页面都会输出. + +表达式的性能并不好, 如果是超大规模的爆破, 并不推荐使用. + +**方法4: 使用表达式过滤`--filter current.Status == 405`** + +--filter与--match的区别在于, --filter作用于智能过滤或--match的下一阶段. 通过智能过滤或者--match的结果将会由--filter进行二次过滤. + +也就是说, 如果只有--filter, 那么智能过滤依旧生效, 并且可以过滤掉状态码为405的请求. + +### 断点续传 + +spray支持断点续传, 可以通过`--resume-from`参数指定断点文件. 通过断点文件中记录的数据恢复进度. + +为了更好的支持断点续传, spray监听了ctrl+c信号, 如果通过ctrl+c取消任务, 所有完成的或没完成的数据都会保存到stat结尾的文件中. + +所以建议非必要情况不要使用kill -9 结束spray + +另外, 如果使用`--resume-from`依旧没有完成任务, ctrl+c或者因为被ban后自动退出. 都会重写当前的stat文件更新进度, 可以不断的接着上一次的任务继续. + +断点续传支持比原来更为自由的目录配置. 每个任务都可以拥有独立的-w/-r/-d配置. 因此某些特殊情况下要进行批量操作, 可以通过脚本去构造对应的stat文件, 实现更加自由的任务配置. + +### 递归 +spray并不鼓励使用递归, 因为spray的定位是批量从反代/cdn中发现隐形资产. 不管是因为批量, 还是因为反代/cdn, 99.9的情况都用不到递归. + +但为了兼容某些极为罕见的情况, spray依旧保留了递归的功能. + +默认递归为关闭状态, 可以使用`--depth 2`选择递归深度开启递归模式. + +默认的递归规则为`current.IsDir()`, 即所有的目录(结尾为/的结果)都会被递归. + +也可以通过--recursive手动选择递归规则. 例如`--recursive current.IsDir() && current.Status == 403`表示, 递归所有状态码为403的有效目录. ## TODO 1. [x] fuzzyequal