如何使用 Dirsearch
Dirsearch 是一款开源的、多线程的“Web路径发现”工具,最初发布于2014年。该程序使用Python编写,类似于Dirbuster或Gobuster等其他工具,旨在快速发现网站上的隐藏内容。与Dirbuster(可能还有Gobuster)不同,Dirsearch仍在积极开发中,并且专注于路径发现,而不是Gobuster的其他功能。
它具有多项功能以辅助发现,并且可以轻松自定义以处理以异常方式响应或需要额外标头的Web服务器。
它通过读取文件和路径列表(“词表”),可选地对列表执行转换,为每个文件发出HTTP请求,并根据内部或用户定义的规则报告结果来操作。
为什么使用 Dirsearch?
网站上的隐藏(或未链接,如果你愿意)内容可能以多种方式导致安全问题。这些内容可能包括管理面板、安装文件、完整应用程序、文档、测试程序、源代码仓库以及被忽略或遗忘的内容等。有时这会导致简单的信息披露,而其他时候可能导致完全妥协。
无论测试类型如何,了解完整的攻击面对于正确评估至关重要。
安装
Dirsearch 需要 Python,并且可以在支持 Python 3.9 或更高版本的任何平台上运行。它可以通过 pip 安装,通过 GitHub 手动安装,许多操作系统包管理器,或在 Docker 中安装。本文详细介绍了 GitHub 安装方法。
Git 安装:
|
|
对于某些操作系统(如 Apple OS X)的安装,必须使用 Python 的虚拟环境来正确安装依赖项。在安装 venv 程序后,可以轻松完成此操作。
|
|
通过检查安装的版本来验证安装是否成功。
Dirsearch 版本检查
词表
Dirsearch 的效果取决于所使用的词表。词表是一个简单的文本文件,包含路径和/或文件名(带或不带文件扩展名)。Dirsearch 读取此文件,如果用户请求,则对每行进行转换,然后发出 HTTP 请求以查找文件。
Dirsearch 包含一个位于 db/dicc.txt 的词表,其中包含近 10,000 个文件。其他词表可以从互联网上获取,例如从 Seclists 仓库。有些列表是特定于产品的,例如 Java Servlet 名称,而有些是通用的。你的选择可能因网站而异。一个大型且通用的列表,如 big.txt,通常是一个很好的起点。
默认词表使用自定义变量,如 %EXT% 来表示文件扩展名的位置。默认情况下,只有这些变量会被替换——其他行不会有文件扩展名。要强制在每个文件上使用扩展名,请使用 -f 或 —force 标志。
请注意,如果你在 Dirsearch 中使用非默认词表,可以使用 –overwrite-extensions 标志覆盖词表中的默认扩展名。例如,一个包含文件 admin.php 的词表与选项 –overwrite-extensions html,jsp 结合将测试:
- admin.html
- admin.jsp
基本用法
使用 Dirsearch 的最简单方法是使用 -u 标志提供 URL。这将使用内置词表和默认选项运行程序。
|
|
程序将在初始输出中报告正在测试的内容。
基本扫描
如上图所示,默认输出可能非常详细,并包含你可能不关心的内容。要更改此设置,请使用 -x(—exclude)标志停止报告 HTTP 响应代码为 404 的“未找到”文件。
|
|
更简洁的结果
此输出更有帮助,因为我们可以看到存在的路径(200“OK”)和重定向到其他地方的路径(301“Redirect”)。然而,我们不想因为懒惰/忙碌而必须在 Web 浏览器中加载每个路径来查看它们最终的位置。为了让 Dirsearch 为我们执行此操作,我们可以添加 -F(–follow-redirects)选项。
|
|
跟随重定向的结果
现在 Dirsearch 已跟随重定向,并且仅报告之后不是 404“未找到”的重定向。
最后,我们知道 Web 应用程序是用 PHP 构建的,因此我们将通过仅查找我们认为可能存在的文件来聚焦扫描并提高性能。我们可以使用 -e(-extensions)选项以及文件扩展名列表来实现此目的。
|
|
重复结果
虽然输出看起来没有不同,但由于文件扩展名有限,发出的请求更少。
高级用法
之前的输出示例实际上在 /passwords 路径上有一个误报结果。目标服务器对此响应 200,即使它不存在,这是扫描 Web 时的常见问题。误报页面的响应正文中包含字符串 F5,我们可以使用它来过滤掉不正确的结果,因为它仅出现在未找到的页面中。
为此,我们将使用 –exclude-text 选项(其他类似选项包括 –exclude-regex 和 –exclude-size)。
|
|
无误报的结果
程序检查了响应正文,匹配了 F5,并忽略了结果。
某些场景可能需要额外的标头,例如访问令牌或授权标头。这可以通过 -H(—header)选项完成,例如:
|
|
这将随每个请求发送 Authorization 标头。
如果我们想进一步深入研究网站并使用响应正文查找其他路径,有时可以获得更好的结果。为了帮助实现这一点,Dirsearch 具有 –crawl 选项。
比较以下两个命令的输出。
|
|
基本结果
|
|
全面结果
在使用 –crawl 的输出中,报告了目标服务器上的更多路径,因为它从页面的响应 HTML 中提取了它们。如果这与递归扫描结合使用(-r 或 –recursive),扫描器将继续针对每个识别的路径运行。虽然这可以带来更好的结果,但请注意,这也可能生成大量请求并运行较长时间。
最后,如果我们想保存结果,Dirsearch 具有广泛的选项,包括文件和数据库类型,包括简单、纯文本、JSON、XML、Markdown、CSV、HTML、SQLite、MySQL SQL 和 Postgres SQL。对于这些输出格式,结合使用 -O(–output-format)和 -o(–output-path)选项,例如:
|
|
它还可以分别使用 –postgres-url 和 -–mysql-url 选项直接连接到 Postgres 和 MySQL 数据库。
总结
找到一个隐藏文件或管理面板有时可能导致完全妥协。尽可能全面地了解目标的攻击面将帮助你在渗透测试中获得最佳结果。
Dirsearch 具有许多附加选项,可以影响扫描和报告,以帮助你实现目标。随着你对该工具的熟悉,探索这些附加标志以找到最可靠的扫描方法,尽管这可能因目标而异。