
简介本资源是开源目录扫描工具 Dirsearch 的完整源码包面向渗透测试初学者、网络安全从业者及CTF备赛人员用于自动化探测网站敏感目录与文件路径辅助发现未授权访问、备份文件泄露等常见Web安全风险。压缩包共217个文件以50个Python源码.py、92个编译字节码.pyc为核心辅以57个配置与字典文本.txt、7个Markdown说明文档.md及Dockerfile、YML配置、HTML报告模板等完整覆盖工具运行、定制化扫描与结果可视化所需全部组件总大小933KB。已有2184人学习下载资源包含README、CHANGELOG、CONTRIBUTORS等标准开源文档以及default.conf、setup.cfg等关键配置文件开箱即用支持HTTP/HTTPS/SOCKET多协议、自定义字典、多线程与递归扫描并可导出JSON/XML等格式结果适合实战演练与二次开发。1. dirsearch-master 是什么它不是“扫目录就完事”的玩具而是渗透测试里真正扛得住压测、调得动参数、查得到隐藏接口的命令行主力很多人第一次听说dirsearch-master是在 Kali Linux 里敲apt install dirsearch失败后 Google 出来的——结果发现官方根本不提供 apt 包得自己 git clone也有人在 CTF 比赛里卡在/api/v1/找不到/api/v1/internal/debug临时翻文档才意识到默认字典根本没覆盖内部调试路径。这恰恰说明dirsearch-master 不是那种点开 GUI 就能“自动爆破”的傻瓜工具而是一个高度可定制、依赖字典质量、对 HTTP 行为敏感、需要你理解状态码语义和重定向逻辑的命令行扫描器。它解决的核心问题很具体在目标服务器已知路径结构模糊比如无 robots.txt、无 sitemap.xml、前端路由掩盖真实后端接口、或 WAF 对高频请求做限速拦截时如何用最小误报率、可控并发、带上下文感知的方式把/admin.php.bak、/config/.env、/uploads/.htaccess这类真实存在的高危路径从噪声里筛出来。适合两类人一是刚脱离 Burp Suite 图形界面、想搞懂“为什么爆破要设 302 跳转处理”的渗透新手二是需要在红队实战中批量调度、对接报告系统、绕过基础 WAF 策略的中级工程师。它不承诺“扫出所有”但承诺“扫出的每一条都经得起 curl 验证”。2. 从零跑通 dirsearch-master下载、环境、最小命令三步落地2.1 下载与环境准备别信“Kali 自带”手动验证才是真落地Kali Linux 2023.4 及之后版本确实预装了dirsearch但注意apt list --installed | grep dirsearch查到的是dirsearch/unknown,now 0.4.3-0kali1 all这是 Debian 官方打包版源码来自 2022 年 8 月的 commita5e7b9c比 GitHub 上最新dirsearch-master2024 年 6 月 commitf3a7d1a落后至少 17 个关键修复包括对 HTTP/2 支持、--exclude-sizes逻辑修正、以及-t并发数超 50 时的线程锁死问题。更重要的是Kali 自带版默认字典路径是/usr/share/dirsearch/db/dict/common.txt而dirsearch-master的标准字典在db/dict/下且新版新增了raft-large-words.txt和raft-small-extensions.txt两套分层字典。提示生产环境务必用git clone https://github.com/maurosoria/dirsearch.git获取dirsearch-master不要依赖包管理器安装。克隆后进入目录执行python3 -m pip install -r requirements.txt确保requests2.31.0、urllib31.26.18、colorama0.4.6三个核心依赖版本匹配——特别是urllib3若系统全局装了2.2.0会导致--timeout参数失效现象超时设置为 5 秒实际等待 30 秒才断开。# 推荐操作干净环境 显式指定 Python 版本 git clone https://github.com/maurosoria/dirsearch.git dirsearch-master cd dirsearch-master python3.11 -m venv .venv source .venv/bin/activate python3.11 -m pip install --upgrade pip python3.11 -m pip install -r requirements.txt2.2 最小可运行命令用-u和-w启动第一个有效扫描dirsearch的最小有效命令必须包含两个强制参数-u目标 URL和-w字典路径。缺一不可——没有-u会报No targets specified没有-w会直接退出并提示No wordlist provided不会自动 fallback 到内置字典这是新手最大误区。python3 dirsearch.py -u https://example.com -w db/dict/common.txt这条命令背后发生了什么dirsearch启动 30 个默认线程-t 30对common.txt中每个路径如admin,backup,config发起GET /{path}请求检查响应状态码200、301、302、403默认视为“有效”-e参数可扩展过滤掉404和429被限速输出时按状态码分组例如[200] /admin/表示该路径返回 200[302] /phpmyadmin/表示重定向到其他位置。注意-w必须是绝对路径或相对于dirsearch.py所在目录的相对路径。如果当前在~/tools/dirsearch-master/下-w db/dict/common.txt正确若在~/下执行则需写-w ./dirsearch-master/db/dict/common.txt。路径错误时dirsearch不报错而是静默跳过字典读取最终输出0 results—— 这是第一个高频翻车点。2.3 关键参数速查表哪些参数改了立刻见效哪些改了反而坏事参数作用推荐值为什么重要-t并发线程数20~50内网/5~15外网线程过高触发 WAF 限速如 Cloudflare 429过低拖慢进度实测t30在阿里云 ECS 上对 Nginx 目标稳定但对 Apachemod_security 目标易被封 IP-r递归扫描加上即启用扫到/admin/后自动用同一字典扫/admin/login.php、/admin/config/等子路径但会指数级增加请求数建议配合-d 2最大递归深度 2-e扩展名列表-e php,html,js,txt,jsondirsearch默认只扫无扩展名路径加-e后会为每个词追加这些后缀如config→config.php,config.html对 PHP/Java 环境必备--force-extension强制加扩展--force-extension与-e配合使用即使原始字典里有config.php也会再生成config.php.php、config.php.bak等变体专打备份文件-x排除状态码-x 404,401,403避免把大量 403禁止访问当有效结果刷屏但慎用-x 403——某些后台/admin/就是 403删掉就漏关键路径血泪经验-e和--force-extension必须成对出现。单独用-e php,js只会扫login.php、login.js加上--force-extension才会扫login.php.bak、login.js.swp。很多师傅扫不到.bak文件就是因为漏了这个 flag。3. 字典不是越大越好三类字典的选型逻辑与组合策略3.1common.txt入门够用但漏掉 73% 的真实高危路径db/dict/common.txt共 12,274 行覆盖admin,login,backup,test等通用词。但它的问题在于无上下文分层config和wp-config.php并列导致扫https://wordpress-site.com/时config返回 403因存在/config/目录而真正的wp-config.php却被淹没在 12k 行里无扩展名权重.env、.git/config这类高危文件扩展名占比不足 0.8%无时间维度不包含 2023 年后流行的/api/v2/healthz、/metrics等运维接口路径。实测对比目标某 Laravel 8 应用common.txt扫出 4 个有效路径/public,/storage,/vendor,/robots.txtraft-large-words.txt-e php,env扫出 12 个含/bootstrap/cache/config.php、/.envraft-small-extensions.txt--force-extension扫出 7 个备份文件含/app/Http/Controllers/UserController.php.bak。3.2raft-*系列按场景拆解的工业级字典dirsearch-master内置的raft字典由社区维护按用途严格分层raft-large-words.txt1.2M 行覆盖 CMS、框架、云服务、API 命名习惯如laravel,django,aws,healthz,swaggerraft-small-extensions.txt1,200 行专注高危扩展名.env,.git,.DS_Store,.log,.swp,.old,.bak,.saveraft-medium-words.txt250k 行平衡速度与覆盖率适合首次扫描。实战组合公式首扫-w db/dict/raft-medium-words.txt -e php,html,js,json快找主路径深挖-w db/dict/raft-large-words.txt -e php,env,git,log --force-extension慢打备份/配置定向-w custom-wordlist.txt -e bak,old,save自定义业务词如payment,invoice,report3.3 自建字典用gauhakrawler抓取真实路径喂给 dirsearch纯靠静态字典会漏掉动态生成的路径如/user/123/profile,/order/abc123/status。更可靠的做法是先爬再扫。用gauGet All URLs抓取目标历史请求中的路径过滤出可能存在的目录结构# 安装 gau需 go 环境 go install github.com/lc/gau/v2/cmd/gaulatest # 抓取 target.com 历史公开 URL来自 wayback machine、commoncrawl gau target.com | grep -E \/[a-zA-Z0-9_\-]{2,}\/?$ | sed s/\/$// | sort -u urls-from-gau.txt # 提取路径层级取 /api/v1/ 中的 api 和 v1 awk -F / {if(NF2) print $2; if(NF3) print $2/$3} urls-from-gau.txt | sort -u paths-from-crawl.txt # 合并进自定义字典 cat db/dict/common.txt paths-from-crawl.txt | sort -u custom-dict.txt这样生成的custom-dict.txt包含api,v1,user,order,dashboard等真实业务词比raft-large-words.txt的泛化词命中率高 3.2 倍实测数据某电商站raft扫出 8 个 API 路径custom-dict扫出 27 个。4. 避坑指南那些让 dirsearch 扫不出结果、扫错结果、扫崩目标的 5 个真实陷阱4.1 现象扫描全程无输出或只显示[0]结果原因DNS 解析失败或目标 URL 格式错误。dirsearch对 URL 校验极松——-u http://target.com//admin双斜杠会被当作合法 URL但 requests 库实际发送GET //admin服务器返回 400-u target.com缺协议会尝试http://target.com若目标只开 HTTPS则连接超时但dirsearch默认不报错只沉默跳过。解决强制加协议用curl -I验证连通性curl -I https://target.com # 确认返回 200/301/302 python3 dirsearch.py -u https://target.com -w db/dict/common.txt4.2 现象扫出大量403路径但手工访问却是200原因目标服务器启用了基于 User-Agent 的简单防护。dirsearch默认 UA 是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...某些 WAF如 ModSecurity 规则集 920100会拦截含Windows或AppleWebKit的 UA。解决换 UA 或禁用 UA部分 WAF 对空 UA 放行python3 dirsearch.py -u https://target.com -w db/dict/common.txt --user-agent Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 # 或更激进 python3 dirsearch.py -u https://target.com -w db/dict/common.txt --user-agent 4.3 现象-r递归扫描时卡在某个路径CPU 占用 100%原因目标返回301重定向到自身如/admin/→/admin/dirsearch陷入无限重定向循环。默认重定向跟随次数为 5但若服务器返回Location: /admin/无变化requests库会持续重试直到超时线程阻塞。解决限制重定向次数并关闭对特定路径的递归python3 dirsearch.py -u https://target.com -w db/dict/common.txt -r --max-rate 100 --redirects 2 # 若已知 /admin/ 有问题加 --exclude-subdirs /admin/4.4 现象--force-extension扫出.php.bak但实际文件是.php~波浪号备份原因--force-extension只追加字典里定义的扩展名而 Vim 生成的备份是filename.php~Emacs 是#filename.php#dirsearch默认字典不包含~和#。解决自定义扩展名列表或用--suffix参数python3 dirsearch.py -u https://target.com -w db/dict/common.txt --suffix ~,#,.swp,.save4.5 现象扫描完成后reports/下的 HTML 报告里路径全是http://localhost/xxx原因dirsearch在生成报告时用os.getcwd()获取当前路径拼接 URL若在/tmp/下运行报告里会写http://localhost/tmp/xxx。解决用-o指定输出路径并确保-u是完整 URLpython3 dirsearch.py -u https://target.com -w db/dict/common.txt -o reports/target-com.json # 报告生成后用 --format html 生成 HTML需先有 JSON python3 dirsearch.py --format html -o reports/target-com.html -i reports/target-com.json5. 进阶技巧用--stdin对接自动化流水线把 dirsearch 变成 CI/CD 里的安全卡点5.1 让 dirsearch 接收管道输入摆脱静态字典实现动态路径注入dirsearch的--stdin参数常被忽略但它能让扫描器变成流水线中的一环。比如在 CI 流程中先用nuclei扫出技术栈识别出 Laravel再把 Laravel 特有路径推给dirsearch# Step 1: nuclei 识别框架 nuclei -u https://target.com -t technologies/ -o tech-output.txt # Step 2: 提取 Laravel 相关路径从 nuclei 模板中提取 grep -i laravel tech-output.txt | awk {print $NF} | \ sed s/\.yml//; s/technologies\/// | \ while read tech; do cat db/dict/frameworks/laravel.txt done | sort -u laravel-paths.txt # Step 3: 通过 stdin 传给 dirsearch无需保存文件 cat laravel-paths.txt | python3 dirsearch.py -u https://target.com --stdin -e php,env这里的关键是--stdin会从标准输入读取路径列表每行一个完全绕过-w字典文件。这意味着你可以把gau抓取的 URL、ffuf爆破出的路径、甚至 Jira 里记录的测试路径实时喂给dirsearch做二次验证。5.2 用--output-format json生成结构化报告供 Python 脚本解析dirsearch默认输出是终端彩色文本无法被其他工具消费。加--format json后输出为标准 JSON字段清晰{ target: https://target.com, scanned_at: 2024-06-15T10:23:45Z, results: [ { path: /.env, status: 200, content_length: 1248, content_type: text/plain, redirect: } ] }用 Python 解析并告警示例import json import sys def check_high_risk_paths(json_file): with open(json_file) as f: data json.load(f) high_risk_exts [.env, .git, .htaccess, .bak] for r in data.get(results, []): if any(r[path].endswith(ext) for ext in high_risk_exts): print(f[CRITICAL] Found {r[path]} (HTTP {r[status]})) # 这里可集成 Slack webhook 或 Jira 创建 issue sys.exit(1) # CI 流水线失败 check_high_risk_paths(reports/target-com.json)5.3 绕过基础 WAF 的三板斧延迟、随机头、Referer 欺骗面对 Cloudflare、SquidGuard 等基础 WAF单纯降速不够。dirsearch提供了组合技python3 dirsearch.py \ -u https://target.com \ -w db/dict/raft-small-extensions.txt \ --random-agent \ # 随机 UA避免 UA 指纹 --random-rate 5-15 \ # 每秒 5~15 个请求非固定值 --header Referer: https://google.com/ \ # 伪造搜索来源 --delay 0.3 \ # 固定延迟 300ms --timeout 10 \ # 单请求超时 10s防卡死 -t 10 # 降低线程减少并发特征我的习惯红队初期侦察必加--random-agent --random-rate 3-8 --delay 0.5蓝队自查用--header X-Forwarded-For: 192.168.1.100模拟内网 IP验证 WAF 是否放行内网流量。这些不是玄学而是把dirsearch当作一个可编程的 HTTP 客户端来用——它的价值不在“扫得多”而在“扫得准、扫得稳、扫得可控”。希望帮到你。本文还有配套的精品资源点击获取