Nmap可能是Pentesters和Hacker中最著名的侦察工具,它基本上是一个端口扫描仪,可以帮助您扫描网络并识别网络中可用的各种端口和服务,此外还提供有关目标的更多信息,包括逆向DNS名称,操作系统猜测,设备类型和MAC地址。
** Nmap 的 barebone 语法是:**
1$ nmap [FLAGS] [IP]
请注意,您可能还需要使用 sudo 特权运行它,以执行某些特定类型的扫描。
Nmap 交换机
Nmap 是一个强大而强大的网络扫描工具,可以通过命令行传递的旗帜来自定义我们的扫描。
- 联合国 -h:打印帮助摘要页
- -sS:进行TCP SYN扫描
- -sU:进行UDP扫描
- -sV:测试开放端口以确定服务/版本信息
- -O:启用OS检测
- -v:启用动词. 您甚至可以将动词级别设置为: --vv: 第二级动词. 建议使用的动词最低水平。 () )--v3:三级活字. 您可以通过指定这样的数字来指定动词级别 。 () ( )* -oA:在"正常",XML和可复制格式中输出相同的Nmap. 然而,您可以用 : -- oN: 将正常输出重定向到给定文件名
- -OX: 以干净的 XML 格式输出并存储到给定文件 ()
)--oG:出产"可复制"输出并存储到一个文件中. 由于用户正在向 XML 输出方向移动, 已折旧格式 。 () (
)* -A:启用"侵略"扫描. 目前,这可以实现OS检测(-O),版本扫描(-sV),脚本扫描(-sC)和痕量路由(-跟踪路由) (_) (
)* -p:指定要扫描的端口。 它可以是单一的港口,也可以是一系列港口。 示例:
-
nmap-p 80 12.0.0.0.1': 此扫描本地主机上的端口 80( _) ) -
nmap-p 1-100 127.0.0.1: 此扫描本地主机上的 1 到 100 个端口( ) -
nmap-p 127.0.0.1':此扫描本地主机上的所有端口( _) (英语)
在 Nmap 中扫描类型
Nmap 支持许多不同的扫描类型,但最受欢迎的类型是:
1. TCP 连接扫描(-sT
)
在这种类型的扫描中,Nmap 会将 TCP 包发送到具有 SYN 旗帜集的端口。
- 目标用 RST 包响应,这意味着端口已关闭
- 目标根本不响应,可能是因为防火墙丢掉了所有入口的包,在这种情况下,端口将被认为是过滤的
- 目标回应了 TCP 包与 SYN/ACK 旗帜集,这意味着端口是开放的,然后 Nmap 将与 ACK 旗帜集的 TCP 包响应,因此将完成 TCP 3 方向的握手
这不是一个非常可靠的扫描技术,因为它很容易配置一个防火墙规则以回应RST包或放弃所有入口的包。
SYN半打开
扫描(-sS
)
SYN扫描,也被称为半开
或隐形扫描
是一种比以前的方法的改进. 在以前的方法中,我们在收到 SYN/ACK 包后,在接收 ACK 旗帜的 TCP 包后,将其发送回来,现在我们将发送 RST 包,这将防止服务器反复尝试执行请求,并大大减少扫描时间。
这个方法是对前者的改进,因为:
- 它们更快
- 它们可能能够绕过一些原始的防火墙
- 通常,SYN扫描不会被运行在端口上的应用程序记录,因为大多数应用程序在完全建立后才开始登录连接,而不是SYN扫描 的情况。
但是,在生产环境中运行 SYN 扫描是不建议的,因为它可能会破坏某些不稳定的应用程序,还应该注意到 SYN 扫描还需要 sudo 特权,因为它需要制造原始包。
事实上,当使用 sudo 特权运行时,nmap 会默认到 SYN 扫描,否则它会默认到 TCP 扫描。
3. UDP 扫描(-sU
)
UDP 扫描比前两种更不可靠,因为 UDP 连接的性质是无状态的,这意味着没有像 TCP 那样的反馈机制
。 UDP 基于点燃和忘记
的原则工作,这意味着它向某些端口的目标发送包,并希望它们能够做到这一点。
当 UDP 包发送到目标端口时,可能有三种情况:
- 通常没有收到任何响应,在这种情况下,nmap 将端口标记为开放的,如果尚未收到任何响应,它会发送另一个 UDP 包进行重复检查,如果再次没有收到任何响应,它会将端口标记为开放的,然后移动
- 它可能会收到 UDP 响应,这是非常罕见的。
Nmap 中的特殊扫描
除了这些,一些不太受欢迎的扫描类型甚至比TCP SYN扫描更隐藏
。
1. TCP Null 扫描(-sN
)
在 TCP Null 扫描中,发送的 TCP 包没有设置任何旗帜,根据 RFC,在这种情况下,如果端口 i s 关闭,目标应用 RST 回复。
2. TCP FIN 扫描(-sF
)
这与TCP Null Scan非常相似,但事实上,而不是发送一个完全空的TCP包,它会发送一个带有FIN旗的包,用于礼貌地关闭连接。
3. TCP Xmas 扫描(-sX
)
TCP Xmas 扫描也与前两种扫描技术非常相似,除非它们使用具有 PSH、URG 和 FIN 旗帜的 TCP 包。
限制
由于这些扫描具有类似的性质,它们也有类似的输出,这与UDP扫描非常相似,在这种情况下,我们只能有以下三个答案:
- 開放過濾:當沒有收到回覆時,端口會被分類為這樣,因為沒有回覆只能意味兩件事 :
- 端口是 open _) - 端口是防火牆背後保護的,因此是 _filtered _) * 過濾 : 當端口是防火牆背後保護的,它發送了 ICMP ping back
- 關閉時 : 當它接收和 RST 包
值得注意的是,虽然 RFC 793 命令网络主机用 RST TCP 包对封闭端口的故障包进行响应,而对于开放端口则根本不响应,但某些系统却拒绝了这一惯例,这种行为主要在 Microsoft Windows 服务器和一些 CISCO 设备中被观察到,其中所有故障包默认丢失。
使用 Nmap 扫描网络的主机
在连接到网络时,最重要的事情之一是获得网络上的所有活跃主机的列表,然后再进行进一步的扫描。这可以通过Ping Sweep
来完成,这就意味着将ICMP包发送到网络中的所有IP,然后等待响应。
您可以通过使用指标或通过 CIDR 指定您的目标 IP 范围如下:
1$ nmap -sn 192.168.0.1-254
或者,
1$ nmap -sn 192.168.0.0/24
-sn
标志抑制了任何端口扫描,并迫使 nmap 仅依靠 ICMP 响应包(或 ARP 请求,如果运行具有超级用户权限)来识别网络中的活跃主机。
地图 地图 地图 地图 地图 地图
Nmap Scripting Engine(NSE)是Nmap的强大补充,允许我们进一步扩展其功能,用Lua编写,我们可以使用它来编写我们的脚本,并自动化许多工作,如测试漏洞和剥削。
有许多类别可用. 一些有用的类别包括:
安全
:- 不会影响目标侵入性
:- 不安全:可能影响目标vuln
:- 扫描漏洞利用
:- 尝试利用漏洞auth
:- 试图绕过运行服务的身份验证brute
:- 尝试运行服务的 brute force 凭证discovery
:- 试图查询运行服务以获取有关网络的更多信息 (
要运行脚本,我们需要将其指定为 --script=<script-name>
您也可以通过分离脚本名称来指定多个脚本同时运行,如 --script=<script-name1>,<script-name2>
一些脚本还需要一个可以用--script-args``<args>
来指定的参数。
一些脚本有内置的帮助菜单,可以引用:
1$ nmap --script-help <script-name>
你可以找到一个完整的脚本列表 _这里。
结论
Nmap 拥有大量的免费和精心编写的文档,您可以在其 official website上找到有关旗帜、脚本和更多信息,您可以尝试各种旗帜和脚本,并在不同的环境下看到它们的输出如何不同。