在 Nikto 中伪装 User-Agent 字符串

Kali LinuxBeginner
立即练习

引言

Nikto 是一个流行的开源 Web 服务器扫描器,它对 Web 服务器进行全面的测试,检查超过 6700 个潜在危险文件/程序,检查超过 1250 个服务器的过时版本,以及超过 270 个服务器的版本特定问题。

当 Nikto 向目标服务器发送请求时,它会使用默认的 "User-Agent" 字符串来标识自己。这个字符串很容易被防火墙或入侵检测系统检测到,从而可能阻止扫描。为了执行更隐蔽的扫描,你可以 "伪装" 或更改 User-Agent,使其模仿一个常见的 Web 浏览器。

在本实验中,你将学习如何识别 Nikto 的默认 User-Agent,然后使用 -useragent 选项更改它,以使你的扫描不那么显眼。

识别测试扫描中的默认 Nikto User-Agent

在此步骤中,你将针对本地 Web 服务器运行一个基本的 Nikto 扫描,以查看其默认的 User-Agent 字符串。一个简单的 Python Web 服务器已为你启动并在后台运行,它会将所有传入的请求记录到一个名为 access.log 的文件中。

首先,针对运行在端口 8000 上的本地服务器运行一个标准的 Nikto 扫描。打开你的终端并执行以下命令:

nikto -h http://localhost:8000

Nikto 将执行一系列测试。我们不关心扫描结果本身,而是关心它创建的日志条目。

扫描完成后,查看日志文件的内容,了解服务器如何记录 Nikto 的请求。使用 cat 命令:

cat ~/project/access.log

你应该会看到包含 Nikto 默认 User-Agent 的日志条目。它看起来会像这样,清楚地标识了扫描器。

127.0.0.1 - "GET / HTTP/1.1" Mozilla/5.0 (X11; Linux x86_64) Nikto/2.5.0 (Evasions:None) (Test:Port Check)
127.0.0.1 - "GET /icons/blank.gif HTTP/1.1" Mozilla/5.0 (X11; Linux x86_64) Nikto/2.5.0 (Evasions:None) (Test:Port Check)
... (other log entries) ...

注意字符串中的 Nikto/2.5.0 部分。这是我们在下一步中想要隐藏的签名。

选择一个常见的浏览器 User-Agent 字符串进行模仿

在此步骤中,我们将选择一个来自常见浏览器的 User-Agent 字符串。目标是让我们的扫描流量看起来像是来自普通用户,而不是自动化工具。这有助于规避基于已知扫描器 User-Agent 的简单检测规则。

网上有很多资源可以找到当前的 User-Agent 字符串。在本实验中,我们将使用一台 Windows 机器上 Firefox 浏览器的典型 User-Agent。

这是我们将使用的字符串:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0

此步骤仅为信息提供。你无需执行任何命令。只需熟悉上面的字符串,因为你将在后续步骤中使用它。

使用 -useragent 选项设置新字符串

在此步骤中,你将学习如何构建 Nikto 命令来使用新的、伪装的 User-Agent。Nikto 为此目的提供了一个特定的命令行选项:-useragent

此选项的语法很简单。你将 -useragent 追加到命令后面,然后是你想要使用的新字符串。由于 User-Agent 字符串包含空格和特殊字符,因此将整个字符串用双引号(")括起来至关重要。

以下是你如何构建命令来扫描我们的本地服务器,使用我们在上一步中选择的 Firefox User-Agent:

nikto -h http://localhost:8000 -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"

在此步骤中,你只需要理解命令是如何构建的。你将在下一步执行它。

使用伪装的 User-Agent 运行扫描

在此步骤中,你将使用自定义 User-Agent 执行 Nikto 扫描。为了确保我们只看到新扫描的结果,最好先清除旧的日志文件。

使用以下命令清除 access.log 文件:

> ~/project/access.log

此命令会覆盖文件,使其变为空。现在,使用 -useragent 选项和 Firefox 字符串运行 Nikto 扫描。

nikto -h http://localhost:8000 -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"

Nikto 现在将运行与之前相同的扫描,但它发送的每个请求都将携带 Firefox User-Agent 字符串,而不是默认的 Nikto 字符串。让扫描运行完成。

在服务器日志或代理中验证新的 User-Agent

在最后一步中,你将验证 User-Agent 伪装是否成功。我们将再次检查服务器的日志文件,看看在上次扫描期间记录了什么 User-Agent。

使用 cat 命令显示 access.log 的内容:

cat ~/project/access.log

这次,输出应该有所不同。日志中不再显示“Nikto”,而是显示你指定的 Firefox User-Agent 字符串。

127.0.0.1 - "GET / HTTP/1.1" Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
127.0.0.1 - "GET /icons/blank.gif HTTP/1.1" Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
... (other log entries) ...

如你所见,日志现在显示了一个标准的 Firefox User-Agent。单词“Nikto”已消失,成功地从服务器的基本日志中隐藏了我们的扫描器身份。

总结

在此实验中,你学习了一种使安全扫描更隐蔽的基本技术。你成功地在 Nikto 中伪装了 User-Agent 字符串,以模仿常规的 Web 浏览器。

你已学会如何:

  • 运行默认的 Nikto 扫描以建立基线。
  • 检查服务器日志以识别默认的 Nikto User-Agent。
  • 使用 -useragent 命令行选项指定自定义字符串。
  • 使用伪装的 User-Agent 运行新扫描。
  • 通过再次检查服务器日志来验证更改。

这项技能对于需要执行漏洞评估而又不被安全系统立即阻止或检测到的渗透测试人员和安全专业人员至关重要。