使用 Nmap 扫描网络漏洞

2025-05-27

使用 Nmap 扫描网络漏洞

Nmap 是一款免费的开源工具,用于扫描网络并发现潜在漏洞。如果您是一名渗透测试人员,Nmap 是您了解网络状况、开展侦察工作的关键工具。作为开发人员或系统管理员,您绝对应该学习如何使用 Nmap 扫描网络!它为您提供一个“黑匣子”视图,让您能够像黑客一样查看网络中的动态。因此,如果您发现任何问题,很可能已经有人恶意利用了它!

注意:如果您是将网站托管在第三方服务上的 Web 开发者,则可能没有权限进行网络扫描。AWS允许客户进行渗透测试,但其他托管商可能不允许。请务必先确认!


目标受众:

  • 开发人员
  • 系统管理员
  • 渗透测试人员

安装 Nmap

Nmap 在 Windows 和 MacOS 上安装起来非常容易——请查看官方下载页面。我推荐使用 Zenmap,它是 Windows 和 MacOS 下载包中自带的图形用户界面 (GUI)。Zenmap 如下所示:

zenmap 预览

如果您使用的是 Ubuntu 或类似系统,您可以运行如下命令:

sudo apt-get install nmap


使用 Nmap 扫描端口

Nmap 是一款功能强大、功能多样的工具,其功能之丰富,以至于 Nmap 的开发者们甚至为此写了一本长达 468 页的书

我先来介绍一下 Nmap 的基本用法,然后再介绍一些更高级的选项。我会使用 Yahoo.com 作为我的目标主机,因为他们有一个活跃的漏洞赏金计划,而且不会逮捕我。

以下是基本扫描:

nmap -sS yahoo.com

zenmap扫描

-sS 标志执行 SYN 扫描,扫描许多端口而无需完成 TCP 连接。如果你不想太过嘈杂,这是一个不错的选择。它显示有两个开放端口:80 和 443(分别用于 HTTP 和 HTTPS)。结果与我们预期的差不多!

让我们添加另一个标志 -O。

nmap -sS -O yahoo.com

zenmap扫描

这次,我们不仅看到了端口,还猜测了服务器可能运行的操作系统。了解服务器运行的操作系统是侦察工作的重要组成部分,因为有些漏洞是特定于操作系统的。例如,OpenSSH 5.3 版本比较老,并且存在公开的漏洞利用程序,如果您在服务器上看到它,则很可能存在漏洞。最值得注意的例外是服务器运行的是 Redhat 操作系统,因为 Redhat 已经修复了 OpenSSH 5.3 的问题。

附注:-O 标志很慢,因此如果不需要它,请将其从扫描中删除。

让我们检查另一个标志,-sV。

nmap -sS -O -sV yahoo.com

结果:

PORT    STATE  SERVICE        VERSION
80/tcp  open   http-proxy     Apache Traffic Server
113/tcp closed ident
443/tcp open   ssl/http-proxy Apache Traffic Server

这次,我们可以看到端口上运行的软件的版本!这对于发现漏洞至关重要,因为旧软件往往有更多漏洞可以利用。还可以尝试添加 -v 参数,它会提供更详细的输出信息。

接下来,让我们尝试指定要检查的端口,而不是仅仅进行一般扫描。

nmap -sS -sV -v -p 22 yahoo.com

结果:

PORT   STATE    SERVICE VERSION
22/tcp filtered ssh

我们可以看到,雅虎的 22 端口已被过滤,这意味着我们可能很难攻击它。你可以将-p 22替换为-p 1-165535之类的参数来指定端口范围。我通常使用的参数是--top-ports 1000,顾名思义,它会扫描最常见的 1000 个端口。

综合起来,这是我通常运行来全面了解主机的方法:

nmap -sS -sV -O -v --top-ports 1000 yahoo.com

在这里,我们正在进行潜行扫描(sS)、版本检测(sV)、操作系统检测(O)、详细输出(v)以及扫描前 1000 个端口。

现在您了解了使用 Nmap 进行端口扫描的基础知识!

更进一步

扫描 IP 范围

如果您在自己的服务器上进行测试,扫描 IP 范围(而不是单个主机)会很有用。我不建议在非您自己的服务器上执行此操作,因为您可能会错过并扫描到非目标主机。

Nmap 使用 CIDR 表示法,因此您可以运行如下命令:

nmap -sV --top-ports 1000 192.168.1.0/24

定时

Nmap 有五个定时选项,正式名称分别为:偏执 (paranoid)、潜行 (sneaky)、礼貌 (polite)、正常 (normal)、积极 (aggressive)、疯狂 (insane)。您可以使用 T 标志指定,例如 -T0 表示偏执,-T5 表示疯狂。默认情况下,Nmap 运行在“正常”模式下,因此 -T3 不执行任何操作。如果我知道 -T4 不会影响客户端,我通常会选择 -T4 进行扫描。

文件输出

如果您想将 Nmap 的结果保存到文件中以供日后使用,请添加-oN filename标志。-oX filename以 XML 格式输出结果,如果您有处理 Nmap 输出的脚本,这将很有用。

脚本

Nmap 附带一些可以启用的脚本!我通常不使用它们,因为我更喜欢其他工具,但这里有一个很棒的指南,对它们进行了解释

有趣的部分:利用

zenmap扫描

现在我们知道了主机上运行着什么,我们想要利用它。

攻击网络本身就是一个完整的话题,但我将在这里介绍一些基础知识!

端口 22:SSH

如果网络端口 22 已打开且 ssh 正在运行,那么这是一个很好的起点。如果您可以成功通过 SSH 登录,那么……这对服务器来说是一个不好的信号。

首先,检查正在运行的 SSH 版本(记得,你可以使用 -sV 参数来执行此操作)。在 Google 中搜索该版本,并输入关键字“exploit”。如果是旧版本的 SSH,你很有可能找到公开的漏洞利用代码,可以直接复制并运行。

如果这不起作用,你仍然有机会登录。回到你的终端并运行以下命令:

ssh remote_username@remote_host

“remote_username” 可以是任意数量的,但我会检查的常用名称是 admin 和 root。尝试一些常用密码,也可以尝试一些公司特有的密码(网络管理员有狗吗?有孩子吗?试试他们的名字)。你也可以尝试进行暴力扫描,但这超出了本文的讨论范围。

其他一切

SSH 是一个特殊情况,因为如果您登录,可能会受到严重损害,但其他服务也同样容易受到攻击。

运行启用了版本检测的 Nmap 扫描后,看看除了 80 和 443 端口之外,是否还会出现其他端口。用 Google 搜索你找到的所有服务的名称,了解它们的用途,以及是否有任何公开的漏洞利用代码。你知道开发人员是如何开玩笑说要从 StackOverflow 上抄袭他们所有成果的吗?渗透测试人员也经常这样做,只不过使用的是CVE(通用漏洞披露)数据库

当你用完所有可供 Google 公开漏洞利用的服务后,你可以回头检查是否有任何服务设有登录门户。例如,如果该服务是 Webmail,你可以尝试使用 netcat 并尝试使用该服务的默认用户名和密码登录。

我该如何修复我的易受攻击的服务器?

那不是我的部门。

不过,请查看这些帖子:


保持联系!

喜欢我的帖子吗?快来看看我的推特!我会讲些冷笑话,把重要的社会问题简化成幼稚的讽刺,偶尔也会吐槽一下科技。

只想了解科技资讯?订阅我的邮件列表,即可收到新文章发布通知!

这篇文章最初发表在explainhownow.com上

文章来源:https://dev.to/ctrlshifti/scan-networks-for-vulnerability-with-nmap-2pc
PREV
DevOps 与平台工程
NEXT
我测试了 OpenAI 的 o1-preview 几个小时——你不会相信我发现了什么🤯