dirsearch 是 Web 目录扫描的瑞士军刀。但它只管扫,扫到的东西是什么——不知道。这次二开把 EHole 指纹识别、Swagger 未授权检测、Spring Boot Actuator 泄漏检测等七个模块焊进去,让它不光能”找到”,还能”认出”。
为什么二开而不是重写
dirsearch 有几个很难超越的优势:
- 成熟的重定向处理:301/302 跟随、递归检测
- 403 绕过:8 种绕过技术(X-Forwarded-For、大小写、路径爆破等)
- 完善的字典系统:按框架分类的专用字典(Spring Boot、若依、Laravel 等)
- 代理和延迟控制:防止被 WAF 封
在这些基础设施上做增量,比从零重写划算得多。dirsearchplus 的做法是在 dirsearch 的扫描结果上叠加识别层。
架构:扫描 + 识别 双层结构
1 | dirsearch 扫描引擎 (lib/) |
模块一:JS 信息收集
扫描过程中发现 .js 文件不是终点,里面可能藏了 API 路由、内部路径、甚至硬编码密钥:
1 | import re |
实战中,这个模块经常能从打包后的 app.xxx.js 里直接捞出后台 API 路由表。
模块二:EHole 指纹识别
发现 Web 服务后,识别它跑的是什么系统——若依?Spring Boot?ThinkPHP?每种框架都有”指纹”:
1 | EHole_FINGERPRINTS = { |
实战价值:识别出若依框架后,自动加载若依专用字典(ruoyi-endpoints.txt),针对已知的若依漏洞端点做定向爆破。
模块三:Swagger 未授权检测
Swagger 文档泄露是近几年的高频漏洞。常见路径包括:
1 | SWAGGER_PATHS = [ |
模块四:Spring Boot Actuator 敏感端点
Spring Boot 的 actuator 是信息泄露重灾区:
1 | ACTUATOR_ENDPOINTS = { |
模块五:Packer-Fuzzer 前端源码泄漏检测
现代前端项目用 Webpack/Vite 打包后,.map 文件(source map)和未清理的源码目录常常暴露在 Web 目录下:
1 | PACKER_PATHS = [ |
模块六:SubFinder 子域名爆破
集成 SubFinder 的思路做 DNS 爆破——比纯字典枚举多了一层接口发现:
1 | def subfinder_enum(domain): |
SubFinder 的优势在于它不只做字典爆破,还会调用多个被动 API(VirusTotal、SecurityTrails、Shodan 等)聚合数据。
模块七:SSRF 深度探测
传统 SSRF 检测只测 http://127.0.0.1,但这个模块做得更深:
1 | SSRF_PAYLOADS = [ |
实战案例:若依框架完整攻击链
dirsearchplus 扫描一个若依站点时,会自动触发连锁检测:
1 | 1. 目录扫描 → 发现 /dev-api/、/profile/avatar |
一条链走到底,不需要手动切换工具。
开发中踩的坑
1. Selenium + ChromeDriver 内存泄漏
某些检测(JS 渲染页面)依赖 Selenium。每次用完后必须显式 driver.quit(),否则 ChromeDriver 进程会堆积:
1 | def render_page(url): |
2. 字典文件编码
Spring Boot 端点字典包含 /actuator/ 路径,但如果字典文件编码不对,URL 拼接会出问题。统一用 UTF-8:
1 | with open(dict_file, 'r', encoding='utf-8') as f: |