nmap的介绍
Nmap(Network Mapper)是一款开源的网络探测和安全审核工具。它主要用于网络发现和安全审计,能够帮助网络管理员和安全专业人员收集网络中主机和服务的信息。例如,网络管理员可以使用 Nmap 来了解公司内部网络中有哪些设备在线,以及这些设备上开放了哪些端口和服务;安全审计人员可以利用它来检测网络中的潜在安全漏洞。
在kali Linux中一般都内置的了这个工具,如果不习惯用命令行的朋友 ,也可以去官网下载windows图形化界面的
官网地址:https://nmap.org
给你们翻译一下
下面这个就是windows版本的,其实和命令行都差不多,也是输入命令,看个人习惯
功能和特点
namp所有的命令参数都是围绕着这几个特点的,所以这几个特点一定要整明白
1、主机发现:Nmap 可以通过多种方式来发现网络中的主机。它可以发送 ICMP 回显请求(类似ping命令)、TCP SYN 包、UDP 包等来确定目标主机是否存活。例如,使用-sn参数可以进行简单的主机发现操作,像nmap -sn 192.168.1.0/24会扫描这个网段内的主机是否在线,并且不会进行端口扫描。
2、端口扫描:支持多种端口扫描技术。如 TCP SYN 扫描(-sS),这种扫描方式发送 TCP SYN 数据包来建立连接,如果收到 SYN - ACK 响应,表示端口开放;收到 RST 响应,表示端口关闭。它是一种比较隐蔽的扫描方式,因为没有完成完整的 TCP 三次握手。还有 UDP 扫描(-sU),用于发现目标主机上开放的 UDP 端口,不过由于 UDP 是无连接协议,扫描 UDP 端口比 TCP 端口扫描更复杂,速度也通常较慢。
3、服务和版本检测:能够探测开放端口上运行的服务及其版本信息。通过-sV参数,Nmap 会向开放端口发送一系列探测包来确定服务类型和版本。例如,对于一个开放了 80 端口的主机,Nmap 可以检测出这个端口运行的是 Apache 还是 Nginx 服务器,以及它们的具体版本号。
4、操作系统检测:可以对目标主机的操作系统进行猜测。利用-O参数,Nmap 会根据目标主机对各种探测包的响应特征来推测操作系统类型。例如,不同操作系统对于 TCP/IP 协议栈的实现细节有所不同,Nmap 通过发送特定的数据包并分析响应来判断操作系统可能是 Windows、Linux 还是其他类型。
5、脚本扫描:拥有强大的脚本引擎(NSE - Nmap Scripting Engine)。用户可以使用自定义的 Lua 脚本或者 Nmap 自带的脚本进行扫描。例如,通过-sC参数(等同于--script = default)可以运行默认的一组脚本,这些脚本可以用于检测常见的安全漏洞,如弱密码、未授权访问等。
namap常见参数及其用法
用法:nmap [扫描类型] [选项] {目标指定内容}
目标指定:
可以传入主机名、IP 地址、网络等。
例如:scanme.nmap.org、microsoft.com/24、192.168.0.1;10.0.0 - 255.1 - 254
-iL <输入文件名>:从主机 / 网络列表中输入
-iR < 主机数量 >:选择随机目标
--exclude < 主机 1 [, 主机 2][, 主机 3],...>:排除主机 / 网络
--excludefile < 排除文件 >:从文件中获取排除列表
主机发现
-sP
这个是老版本的一个参数,但是非常实用,现在的版本中搜不到这个参数,但是仍然能用
用于进行主机发现。它会发送 ICMP Echo Request、TCP SYN to port 443、TCP ACK to port 80 和 ICMP Timestamp Request 这四种类型的数据包来探测目标主机是否存活。例如,在扫描一个网段192.168.1.0/24时,nmap -sP 192.168.1.0/24会通过上述多种数据包方式来检查这个网段内的主机是否在线。
例如我在本地扫描192.168.200.0/24 网段的主机
-sn
Ping 扫描,主要用于检查目标主机是否存活,但不进行端口扫描。它会发送 ICMP 回显请求(类似ping命令)或其他合适的数据包来确定主机是否响应。
这个参数和上面的-sP类似,只是探测的方式不同。-sn就相当于对网段的主机进行ping命令看是否有响应。
-sL
列表扫描,仅仅列出要扫描的目标,不会发送任何探测包去检查目标是否存活。
-Pn
将所有目标主机视为在线,跳过主机发现阶段,直接进行端口扫描或其他操作。这在扫描一些禁止 ICMP 请求(如某些防火墙配置)的目标时很有用。
许多网络的防火墙会配置为禁止 ICMP(Internet Control Message Protocol)请求,例如,企业网络或某些安全要求较高的网络环境通常会阻止外部的 ICMP Echo Request(ping 请求)数据包。在这种情况下,使用常规的主机发现方法(如发送 ICMP 请求)可能会导致无法准确判断主机是否在线。而-Pn参数可以绕过这种限制,直接对目标进行扫描。例如,扫描一个禁止外部 ping 的公司内部网络网段192.168.1.0/24,使用nmap -Pn -p 80,443 192.168.1.0/24可以直接对该网段内主机的 80 和 443 端口进行扫描,而不管主机是否响应 ICMP 请求。
nmap -Pn -p 80 192.168.200.130
nmap -Pn -p 80 192.168.200.133
nmap -p 80 192.168.200.133
-PS/PA/PU/PY [端口列表]
Nmap 用于主机发现的一组参数。这些参数通过发送不同类型的探测数据包到指定的端口来确定目标主机是否存活。
-
-PS [端口列表]:
- 这是 TCP SYN Ping 扫描。它会向目标主机的指定端口发送 TCP SYN 数据包。如果目标主机上的端口开放,通常会返回 SYN - ACK 数据包,这样 Nmap 就可以判断目标主机是存活的。例如,nmap -PS80,443 192.168.1.1会向目标主机 192.168.1.1 的 80 和 443 端口发送 TCP SYN 数据包来进行主机发现。这种扫描方式在目标主机的防火墙允许 TCP SYN 数据包通过并且对指定端口有响应时比较有效。
-
-PA [端口列表]:
- 代表 TCP ACK Ping 扫描。Nmap 会发送 TCP ACK 数据包到指定端口。根据目标主机和防火墙的配置,返回的数据包(如 RST)可以用于判断主机是否存活。例如,nmap -PA21,22 10.0.0.1会向目标主机 10.0.0.1 的 21 和 22 端口发送 TCP ACK 数据包。这种扫描方式对于一些配置了状态检测防火墙的网络环境可能比较有用,因为防火墙对 ACK 数据包的处理方式可能与其他数据包不同,通过分析其响应可以发现主机是否在线。
-
-PU [端口列表]:
- UDP Ping 扫描,用于向指定的 UDP 端口发送 UDP 数据包。由于 UDP 是无连接协议,扫描情况相对复杂。如果收到 ICMP 端口不可达消息,可能表示目标主机存活但端口关闭;没有收到响应则可能表示端口开放或者被防火墙过滤。例如,nmap -PU53,161 172.16.0.1会向目标主机 172.16.0.1 的 53 和 161 端口发送 UDP 数据包进行主机发现。在扫描一些运行 UDP 服务较多的网络环境时,这种方式可以帮助发现那些对 UDP 探测有响应的主机。
-
-PY [端口列表]:
- SCTP INIT Ping 扫描,SCTP(流控制传输协议)是一种新的传输层协议。通过向指定端口发送 SCTP INIT 数据包来探测目标主机是否存活。例如,nmap -PY32768 192.168.2.1会向目标主机 192.168.2.1 的 32768 端口发送 SCTP INIT 数据包。在一些支持 SCTP 协议的网络环境和应用场景中,这种扫描方式可以用于发现运行 SCTP 服务的主机是否在线。
-PE/PP/PM
Nmap 用于主机发现的参数,它们利用 ICMP(Internet Control Message Protocol)协议的不同特性来判断目标主机是否存活。
-
-PE:
- 代表 ICMP Echo 请求探测,这类似于传统的ping命令。它向目标主机发送 ICMP Echo 请求数据包,如果目标主机存活并且允许 ICMP Echo 请求通过,就会返回 ICMP Echo 应答数据包。例如,nmap -PE 192.168.1.1会向目标主机 192.168.1.1 发送 ICMP Echo 请求,就像在命令行中执行ping 192.168.1.1一样。这种方式是最直接的主机发现方法之一,但在很多网络环境中,防火墙可能会阻止 ICMP Echo 请求,从而限制了它的有效性。
-
-PP:
- 是 ICMP 时间戳(Timestamp)请求探测。Nmap 发送 ICMP 时间戳请求数据包到目标主机,通过分析目标主机返回的数据包来判断主机是否存活。例如,nmap -PP 10.0.0.1会向目标主机 10.0.0.1 发送 ICMP 时间戳请求。这种方式在某些情况下可以绕过一些简单的防火墙规则,因为不是所有防火墙都会对 ICMP 时间戳请求进行限制,不过它的准确性可能会受到网络设备对 ICMP 时间戳请求响应情况的影响。
-
-PM:
- 为 ICMP 网络掩码(Netmask)请求探测。Nmap 发送 ICMP 网络掩码请求数据包,根据目标主机返回的数据包来确定主机是否存活。例如,nmap -PM 172.16.0.1会向目标主机 172.16.0.1 发送 ICMP 网络掩码请求。这种方式在一些特殊的网络环境中可能会有用,不过和-PP一样,其有效性也会受到网络设备对这种特定 ICMP 请求响应情况的影响。
-PO [协议列表
-PO [协议列表]是 Nmap 用于主机发现的参数,它主要通过发送 IP 协议 Ping 来检测目标主机是否存活。通过指定协议列表,可以按照不同的 IP 协议来发送探测数据包,以适应不同的网络环境和目标主机的配置。
详细解释
IP 协议 Ping 的原理:IP 协议是网络层的基础协议,不同的 IP 协议有不同的功能和数据包格式。-PO参数利用这一点,根据指定的协议发送相应的探测数据包。当目标主机对这些数据包进行响应时,就可以判断目标主机是存活的。例如,在一个简单的网络环境中,如果目标主机正确配置并且存活,它应该对符合网络规则的 IP 协议探测数据包做出响应。
协议列表的指定方式:协议列表可以包含多种 IP 协议编号。例如,常见的 IP 协议包括 ICMP(协议编号 1)、TCP(协议编号 6)、UDP(协议编号 17)等。可以通过指定这些协议编号来进行主机发现。如nmap -PO 1,6,17 192.168.1.1会分别按照 ICMP、TCP、UDP 协议向目标主机 192.168.1.1 发送探测数据包来判断主机是否存活。
其他参数
-n /-R:从不进行 DNS 解析 / 始终进行解析 [默认:有时进行]
--dns-servers < 服务器 1 [, 服务器 2],...>:指定自定义 DNS 服务器
--system-dns:使用操作系统的 DNS 解析器
--traceroute:追踪到各主机的跃点路径
扫描技术
-sS /sT/sA /sW/sM
-
-sS(TCP SYN 扫描)
-
原理:
- 这是一种半开放扫描方式。Nmap 发送一个 TCP SYN(同步)数据包到目标端口。如果目标端口开放,服务器会返回一个 SYN - ACK(同步 - 确认)数据包,此时 Nmap 会发送一个 RST(重置)数据包来中断连接,而不会完成完整的 TCP 三次握手。这样做的好处是比较隐蔽,因为没有建立完整的连接,一些基于连接状态的防火墙可能不会记录完整的连接信息。例如,在扫描一个 Web 服务器的 80 端口时,nmap -sS 192.168.1.100会向目标主机的 80 端口发送 SYN 数据包,根据返回的数据包判断端口是否开放。
-
应用场景:
- 适用于在需要隐蔽扫描的网络环境中,尤其是在对安全性要求较高的网络进行安全审计或渗透测试时。比如,在检测企业内部网络中服务器的开放端口时,为了避免触发过多的安全警报,使用 - sS 扫描可以在一定程度上降低被发现的概率。
-
-
-sT(TCP Connect 扫描)
-
原理:
- 这是最基本的 TCP 扫描方式,它会通过完整的 TCP 三次握手来建立连接。Nmap 会尝试与目标端口建立一个完整的 TCP 连接,如果能够成功建立连接,表示端口开放;如果连接被拒绝(收到 RST 包),则表示端口关闭。例如,nmap -sT 10.0.0.1 -p 22会对目标主机 10.0.0.1 的 22 端口进行 TCP Connect 扫描,尝试与该端口建立完整的 TCP 连接来判断端口状态。
-
应用场景:
- 适用于准确性要求极高的场景。例如,在开发网络管理工具时,需要确定端口的真实开放状态,因为它是通过完整的连接来判断的,所以结果比较可靠。同时,在一些简单的网络环境中,如小型家庭网络或对安全性要求不高的内部网络,使用 - sT 扫描也比较方便。
-
-
-sA(TCP ACK 扫描)
-
原理:
- Nmap 发送一个 TCP ACK(确认)数据包到目标端口。根据目标主机和防火墙的响应来判断端口状态。如果收到 RST(重置)数据包,通常表示端口没有被防火墙过滤;如果没有收到响应,可能表示端口被防火墙过滤。例如,nmap -sA 172.16.0.1 -p 80会向目标主机 172.16.0.1 的 80 端口发送 ACK 数据包,然后分析响应情况来判断端口状态。
-
应用场景:
- 主要用于判断目标端口是否被防火墙过滤。在进行网络安全评估时,了解防火墙的过滤策略是很重要的,-sA 扫描可以帮助检测目标主机的端口是否处于防火墙的保护之下。例如,在检测企业网络边界防火墙的有效性时,可以使用 - sA 扫描来查看内部网络端口对外界的可见性。
-
-
-sW(TCP Window 扫描)
-
原理:
- 这种扫描方式与 TCP ACK 扫描有些类似,也是通过发送特殊的 TCP 数据包来判断端口状态。它通过检查返回的 TCP Window(窗口)字段的值来判断端口是否开放。如果窗口值不为零,通常表示端口开放;如果窗口值为零,可能表示端口关闭。例如,nmap -sW 192.168.2.1 -p 443会向目标主机 192.168.2.1 的 443 端口发送特定的 TCP 数据包,然后分析返回数据包的窗口字段来判断端口状态。
-
应用场景:
- 可以用于在复杂的网络环境中,尤其是当其他扫描方式受到限制或者结果不明确时,作为辅助手段来判断端口状态。例如,在一些网络中,防火墙可能会对常规的扫描数据包进行干扰,使用 - sW 扫描可以从另一个角度来判断端口是否开放。
-
-
-sM(TCP Maimon 扫描)
-
原理:
- 它发送一个带有 FIN/ACK 标志的 TCP 数据包到目标端口。根据目标主机的响应来判断端口状态。如果收到 RST(重置)数据包,通常表示端口关闭;如果没有收到响应,可能表示端口开放。例如,nmap -sM 10.10.10.1 -p 21会向目标主机 10.10.10.1 的 21 端口发送 FIN/ACK 数据包,然后根据响应情况判断端口状态。
-
应用场景:
- 可以作为一种隐蔽扫描方式,在某些情况下和 - sS 扫描类似,用于在不引起过多注意的情况下判断端口状态。例如,在对一些限制外部扫描的网络进行安全测试时,-sM 扫描可以作为一种尝试,以获取端口开放信息。
-
-sU:UDP扫描
用于进行 UDP(User Datagram Protocol)扫描的参数。UDP 是一种无连接的传输层协议,与 TCP(Transmission Control Protocol)扫描相比,UDP 扫描有其独特的特点和应用场景。
当使用-sU参数扫描目标主机的 UDP 端口时,Nmap 会向目标 UDP 端口发送 UDP 数据包。如果目标端口关闭,通常会收到 ICMP(Internet Control Message Protocol)端口不可达消息;如果没有收到任何响应,可能表示端口开放或者被防火墙等设备过滤。例如,在扫描一个主机的 UDP 53 端口(DNS 服务常用端口)时,nmap -sU 192.168.1.100 -p 53会向目标主机 192.168.1.100 的 UDP 53 端口发送 UDP 数据包,然后根据是否收到 ICMP 端口不可达消息等情况来判断端口状态。
-sN/sF/sX
-sN(TCP Null 扫描)、-sF(TCP FIN 扫描)和-sX(TCP Xmas 扫描)是 Nmap 中用于 TCP 端口扫描的一组隐蔽扫描技术。它们利用了 TCP 协议的一些特性,通过发送特殊构造的数据包来尝试判断目标主机端口的状态,并且在一定程度上可以避开一些简单的防火墙和入侵检测系统的检测。
-sN(TCP Null 扫描):
这种扫描方式发送的 TCP 数据包没有设置任何标志位(即所有标志位都为 0)。根据 TCP 协议规范,如果目标端口是关闭的,目标主机应该返回一个带有 RST(复位)标志的数据包;如果没有收到任何响应,可能表示端口是开放的或者被防火墙等设备过滤。例如,nmap -sN 192.168.1.100 -p 80会向目标主机 192.168.1.100 的 80 端口发送没有任何标志位的 TCP 数据包,然后根据返回的数据包或者无响应的情况来判断端口状态。
-sF(TCP FIN 扫描):
发送的 TCP 数据包只设置了 FIN(结束)标志位。当目标端口关闭时,目标主机通常会返回一个 RST 数据包;如果没有收到响应,可能表示端口开放或者被过滤。例如,nmap -sF 10.0.0.1 -p 22会向目标主机 10.0.0.1 的 22 端口发送只带有 FIN 标志位的 TCP 数据包,通过分析返回情况判断端口状态。
-sX(TCP Xmas 扫描):
发送的 TCP 数据包设置了 FIN、URG(紧急)和 PSH(推送)标志位,就好像在数据包上装饰了 “彩灯” 一样,因此被称为 Xmas 扫描。和前两种扫描方式类似,如果目标端口关闭,会收到 RST 数据包;没有收到响应可能表示端口开放或者被过滤。例如,nmap -sX 172.16.0.1 -p 443会向目标主机 172.16.0.1 的 443 端口发送带有 FIN、URG 和 PSH 标志位的 TCP 数据包,根据响应判断端口状态。
--scanflags <标志>
用于自定义 TCP 扫描标志。这使得用户能够根据特定的需求和网络环境,灵活地构造 TCP 扫描数据包,以实现更精细的端口扫描和信息收集。
TCP 标志位介绍
- TCP 协议头部包含了多个标志位,如 SYN(同步)、ACK(确认)、FIN(结束)、RST(重置)、URG(紧急)和 PSH(推送)。这些标志位在 TCP 连接的建立、维护和终止过程中发挥着关键作用。例如,在正常的 TCP 三次握手过程中,首先由客户端发送一个带有 SYN 标志的数据包来请求建立连接,服务器收到后返回一个带有 SYN - ACK 标志的数据包表示同意建立连接,最后客户端再发送一个带有 ACK 标志的数据包完成握手。
- 不同的标志组合可以用于不同的目的。比如,只设置 SYN 标志可以进行 TCP SYN 扫描(-sS),这种扫描方式比较隐蔽,用于探测目标端口是否开放。
例如我们可以通过设置--scanflags SYN来模拟 TCP SYN 扫描。例如,nmap --scanflags SYN 192.168.1.100 -p 80会向目标主机 192.168.1.100 的 80 端口发送带有 SYN 标志的数据包,就像使用-sS参数一样,根据服务器返回的数据包(如 SYN - ACK 表示端口开放,RST 表示端口关闭)来判断端口状态。
-sI < 傀儡主机[:探测端口] >
(注意是大写的i)
在 Nmap 中,-sI [傀儡主机[:探测端口]](%E5%82%80%E5%84%A1%E4%B8%BB%E6%9C%BA%5B:%E6%8E%A2%E6%B5%8B%E7%AB%AF%E5%8F%A3%5D)参数用于进行空闲扫描(Idle Scan)。空闲扫描是一种高级的、隐蔽的扫描技术,它利用了 IP 欺骗和第三方主机(傀儡主机)的 IP 地址来隐藏扫描者的真实来源,并且可以在一定程度上绕过某些防火墙和入侵检测系统的检测。
空闲扫描利用了一个重要的特性,即某些操作系统在处理 TCP 连接时,会对收到的 TCP SYN/ACK 数据包进行响应,并且响应方式与自身的连接状态有关。傀儡主机是一个在网络中被选择的第三方主机,它的 IP 地址被用于欺骗目标主机。当 Nmap 通过傀儡主机进行空闲扫描时,它会首先观察傀儡主机与目标主机之间的通信状态。
假设选择了一个傀儡主机 A,要扫描目标主机 B 的一个端口。Nmap 首先向傀儡主机 A 发送一个 SYN/ACK 数据包,观察傀儡主机 A 的响应。如果傀儡主机 A 返回一个 RST 数据包,说明傀儡主机 A 当前没有向目标主机 B 发送请求,这个状态适合进行空闲扫描。
然后,Nmap 利用傀儡主机 A 的 IP 地址向目标主机 B 发送一个 SYN 数据包(就好像这个请求是来自傀儡主机 A 一样)。如果目标主机 B 的端口开放,它会返回一个 SYN - ACK 数据包给傀儡主机 A。由于傀儡主机 A 当前没有与目标主机 B 建立相关连接,它会忽略这个 SYN - ACK 数据包。
Nmap 在观察到傀儡主机 A 没有对这个 SYN - ACK 数据包进行响应后,可以推断目标主机 B 的端口是开放的。如果目标主机 B 的端口关闭,它会返回一个 RST 数据包给傀儡主机 A,Nmap 同样可以通过观察傀儡主机 A 的响应情况来判断端口状态。
-sY /sZ
在 Nmap 中,-sY和sZ是用于 SCTP(Stream Control Transmission Protocol,流控制传输协议)扫描的参数。-sY代表 SCTP INIT 扫描,-sZ代表 SCTP COOKIE - ECHO 扫描。SCTP 是一种相对较新的传输层协议,主要用于在 IP 网络上传输信令消息等,这两个参数用于探测目标主机上 SCTP 端口的状态。
SCTP 协议基础:
SCTP 是一种可靠的传输协议,类似于 TCP,它也有连接建立、数据传输和连接终止等过程。SCTP 通过一系列的数据包交互来建立和维护连接。在连接建立阶段,主要涉及 INIT(初始化)和 COOKIE - ECHO(Cookie 回应)等消息。
-
-sY(SCTP INIT 扫描)原理:
- 当使用-sY参数进行扫描时,Nmap 会向目标 SCTP 端口发送 SCTP INIT 数据包来探测端口状态。如果目标端口开放,目标主机通常会返回一个合适的响应(如 INIT - ACK 等);如果端口关闭,可能会返回一个错误消息或者无响应。例如,nmap -sY 192.168.1.100 -p 32768会向目标主机 192.168.1.100 的 32768 端口(假设为 SCTP 端口)发送 SCTP INIT 数据包,根据返回的数据包来判断端口是否开放。
-
-sZ(SCTP COOKIE - ECHO 扫描)原理:
- 对于-sZ参数,它发送 SCTP COOKIE - ECHO 数据包进行扫描。在正常的 SCTP 连接过程中,COOKIE - ECHO 是在收到 INIT - ACK 后发送的消息,用于确认连接。在扫描过程中,如果目标端口识别这个 COOKIE - ECHO 数据包并做出合理的响应,可能表示端口开放;如果没有响应或者返回错误消息,可能表示端口关闭。例如,nmap -sZ 10.0.0.1 -p 32769会向目标主机 10.0.0.1 的 32769 端口发送 SCTP COOKIE - ECHO 数据包,然后根据目标主机的响应判断端口状态。
-sO
在 Nmap 中,-sO参数用于进行 IP 协议扫描。它的主要目的是确定目标主机支持哪些 IP 层协议。这与端口扫描不同,端口扫描主要关注传输层(如 TCP 和 UDP)的端口状态,而 IP 协议扫描是对网络层协议的探测。
当使用-sO参数时,Nmap 会发送 IP 数据包,其协议头中的协议字段会被设置为不同的值,以代表不同的 IP 协议。这些协议包括但不限于 ICMP(协议号 1)、TCP(协议号 6)、UDP(协议号 17)等常见协议,以及一些不太常见的协议如 IGMP(协议号 2)、IPV6 - ICMP(协议号 58)等。
对于每个协议,Nmap 会发送一个 IP 数据包来测试目标主机是否对该协议有响应。如果目标主机对某个协议的数据包进行了响应,例如返回了一个与该协议对应的合法响应数据包,那么就可以推断目标主机支持该协议。例如,当发送一个 ICMP 协议的数据包(协议号 1)时,如果收到了一个 ICMP Echo Reply(假设之前发送的是 ICMP Echo Request),则可以判断目标主机支持 ICMP 协议。
-b <FTP 中转主机 >
在 Nmap 中,-b <FTP中转主机>参数用于进行 FTP 反弹扫描(FTP bounce scan)。这是一种比较特殊的扫描技术,利用 FTP 服务器(即 FTP 中转主机)的特性来间接扫描其他目标主机和端口。
FTP 协议的 PORT 命令特性:
FTP 协议包含一个 PORT 命令,该命令用于告诉 FTP 服务器客户端希望数据连接建立在哪个 IP 地址和端口上。正常情况下,这个 IP 地址是客户端自己的地址,用于接收服务器发送的数据。然而,一些配置不当的 FTP 服务器可能允许客户端指定任意的 IP 地址,这就为 FTP 反弹扫描提供了可能。
扫描过程示例:
假设我们有一个作为中转主机的 FTP 服务器(IP 地址为ftp_server_ip)和一个目标主机(IP 地址为target_ip)。当使用-b参数进行扫描时,Nmap 会尝试以一种特殊的方式利用 FTP 服务器。它首先连接到 FTP 服务器(ftp_server_ip),然后发送一个经过构造的 PORT 命令,这个命令中指定的 IP 地址是目标主机(target_ip)的某个端口。
接着,Nmap 尝试通过 FTP 服务器建立一个到目标主机指定端口的数据连接。如果目标主机的端口开放,这个数据连接可能会成功建立或者收到一些与开放端口相关的响应;如果端口关闭,通常会收到连接被拒绝等相关的响应。例如,nmap -b ftp_server_ip -p 80 target_ip会尝试利用指定的 FTP 服务器来扫描目标主机的 80 端口。
端口指定及扫描顺序
-p <端口范围>
仅扫描指定端口
例如:-p 22;-p 1 - 65535;-p U:53,111,137,T:21 - 25,80,139,8080,S:9
其中协议类型可以是U(代表 UDP)、T(代表 TCP)、S(代表 SCTP)
--exclude-ports < 端口范围 >
从扫描中排除指定端口。比如我们上面指定扫描80-443,然后用--exclude-ports排除扫描139端口
namp -p 80-443 192.168.200.130 --exclude-ports 139
-F:
快速模式 —— 扫描的端口比默认扫描的少
-r
按顺序扫描端口 —— 不随机化
--top-ports < 数量 >
扫描 < 数量 > 个最常见端口
比如我们扫描最常见的10个端口
nmap --top-ports 10 192.168.200.130
然后会把最常见的几个端口都扫出来,不管有没有打开都会显示出来
--port-ratio < 比率 >
扫描比 < 比率 > 更常见的端口,其实和top-ports大同小异,个人感觉还是top-ports好用一点
服务/版本检测
-sV:探测开放端口以确定服务 / 版本信息
它能够对目标主机开放端口上运行的服务进行详细的探测,包括服务类型和版本信息,这对于网络管理和安全评估都非常重要。
当使用-sV参数时,Nmap 会向目标主机的开放端口发送一系列精心设计的探测包。这些探测包包含了针对各种常见服务协议的请求信息,通过分析目标主机对这些探测包的响应,可以获取服务相关的详细内容。
不同的服务对特定的请求会有不同的响应模式。例如,对于 HTTP 服务,Nmap 可能会发送一个 HTTP 请求头,根据服务器返回的响应头中的Server字段(如Server: Apache/2.4.51)来确定服务器软件是 Apache 并且获取其版本号。对于其他服务,如 SMTP、FTP 等,也有类似的特定协议相关的探测和识别方法。它会将收集到的这些信息进行综合分析,从而确定服务类型和版本。
例如对靶机进行服务端口检测,namp -sV 192.168.200.130
可以看到会把端口号、所对应的服务以及服务版本都回显出来了
--version-intensity
在 Nmap 中,--version - intensity参数用于控制服务版本检测的强度。它允许用户在扫描过程中调整 Nmap 尝试识别服务版本的详细程度,取值范围是 0 - 9,数字越大,强度越高,Nmap 会尝试更多的探测方式来确定服务版本,但同时扫描时间可能会更长。
当不知道该用哪些强度,nmap还给了几个参数,其代表常用的强度
--version-light:限制为最有可能的探测(强度为 2)
--version-all:尝试每一种探测(强度为 9)
--version-trace:显示详细的版本扫描活动(用于调试)
强度为 0(最低强度):
当设置--version - intensity 0时,Nmap 只会进行最基本的服务版本检测。它可能仅依赖于端口和已知的服务默认端口关联来猜测服务类型,而很少发送额外的探测包来获取版本信息。例如,对于开放的 80 端口,它可能仅仅根据端口号推测是 HTTP 服务,但不会深入探测是哪种 Web 服务器软件(如 Apache 或 Nginx)及其版本。这种方式扫描速度最快,但提供的服务版本信息非常有限。
强度为 9(最高强度):
设置为--version - intensity 9会使 Nmap 进行最全面、最深入的服务版本检测。它会发送各种各样的探测包,包括针对不同服务协议的复杂请求和一些非标准的探测方式。以 HTTP 服务为例,它不仅会发送常规的 HTTP 请求头,还可能会尝试一些特定于不同 Web 服务器软件的特殊请求,以获取最准确的版本信息。这种方式能够最大程度地挖掘服务版本细节,但会花费较多的时间,尤其是在扫描多个端口或多个目标主机时。
中间强度级别(1 - 8):
这些中间级别提供了不同程度的服务版本探测深度。强度值越高,Nmap 发送的探测包种类和数量就越多。例如,在强度为 4 时,Nmap 可能会发送一些基本的服务协议相关探测包,以及一些针对常见服务软件的特定探测请求,但不会像强度为 9 那样进行全面而复杂的探测。用户可以根据扫描的目标、网络环境以及对速度和准确性的要求来选择合适的强度级别。
--version - intensity参数主要是对-sV(服务 / 版本检测)功能进行补充和调整。当同时使用-sV和--version - intensity时,可以更灵活地控制服务版本检测的过程。
脚本扫描
-sC:等同于 --script = default
作用是让 Nmap 运行默认的一组脚本。这些脚本可以用于执行各种额外的扫描任务,比如检测常见的安全漏洞、收集更多的服务相关信息以及执行一些与网络安全和服务状态相关的检查等,从而增强扫描的功能性和实用性。
Nmap 默认脚本涵盖了多个方面,包含针对不同协议(如 TCP、UDP、HTTP、FTP 等)和不同服务(如 Web 服务、数据库服务、邮件服务等)的脚本。这些脚本是用 Lua 语言编写的,并且会随着 Nmap 版本的更新不断完善和扩充。
漏洞检测:有一些脚本用于检测常见的安全漏洞。例如,针对 Web 服务的脚本可能会检查是否存在 SQL 注入漏洞、跨站脚本攻击(XSS)漏洞等。如果目标主机运行着 Web 应用,这些脚本会向相关端口发送特定的请求,并分析响应来判断是否存在此类漏洞。
服务配置检查:可以检查服务的配置是否符合安全最佳实践。以 SSH 服务为例,脚本可能会查看 SSH 服务是否允许使用弱密码、是否限制了登录的源 IP 地址等,帮助发现潜在的安全隐患,即便 SSH 端口是开放的,也能进一步确定其配置的安全性。
信息收集:帮助收集更多关于服务的详细信息。比如对于一个运行 SMTP 邮件服务的端口,脚本可以尝试获取服务器支持的邮件命令、验证方式等信息,以便更好地了解该服务的功能和可能存在的薄弱环节。
自定义Lua脚本
除了default,还可以自己指定脚本
--script = <Lua 脚本>:<Lua 脚本 > 是以逗号分隔的目录、脚本文件或脚本分类列表
--script-args = <n1 = v1,[n2 = v2,...]>:为脚本提供参数
--script-args-file = 文件名:在文件中提供 NSE 脚本参数
--script-trace:显示发送和接收的所有数据
--script-updatedb:更新脚本数据库
--script-help = <Lua 脚本 >:显示关于脚本的帮助。<Lua 脚本 > 是以逗号分隔的脚本文件或脚本分类列表。
可以利用script-help查看Lua脚本的用法
nmap自带的一些Lua脚本
-
漏洞检测脚本
-
http - sql - injection.nse:
- 功能:用于检测 Web 应用中的 SQL 注入漏洞。该脚本会向目标 Web 服务器发送一系列精心构造的 SQL 注入测试请求,通过分析服务器的响应来判断是否存在 SQL 注入的可能性。例如,它可能会尝试在 URL 参数或 POST 数据中注入 SQL 语句,查看是否能导致数据库错误信息泄露或者执行非预期的 SQL 操作。
- 应用场景:在对运行 Web 应用的服务器进行安全审计时,这个脚本是非常重要的工具。如在检查企业内部的 Web 应用系统,包括办公自动化系统、客户关系管理系统等,以确保这些应用不会因为 SQL 注入漏洞而遭受数据泄露或篡改风险。
-
http - xss - scripts.nse:
- 功能:主要用于检测跨站脚本攻击(XSS)漏洞。它会在目标 Web 页面的输入字段、URL 参数等位置注入各种恶意脚本(如 JavaScript),并检查这些脚本是否会被服务器执行并返回给客户端浏览器。如果能够成功注入并执行,就表明存在 XSS 漏洞。
- 应用场景:在评估 Web 应用的安全性时,XSS 漏洞检测是必不可少的环节。对于面向公众的网站、电子商务平台等,使用此脚本可以帮助发现潜在的 XSS 漏洞,避免攻击者利用这些漏洞窃取用户信息,如登录凭证、个人隐私数据等。
-
-
服务信息收集脚本
-
smtp - commands.nse:
- 功能:针对简单邮件传输协议(SMTP)服务,用于收集服务器支持的 SMTP 命令信息。它会与目标 SMTP 服务器建立连接,并发送一系列合法的 SMTP 命令,记录服务器的响应,从而确定服务器支持哪些命令,如EHLO、MAIL FROM、RCPT TO等,以及这些命令的具体实现细节。
- 应用场景:在对邮件服务器进行配置检查和安全评估时很有用。例如,通过了解 SMTP 服务器支持的命令,可以判断服务器是否配置了不必要的、可能被滥用的命令,或者是否遵循了安全的邮件传输规范。
-
ftp - anon.nse:
- 功能:用于检测 FTP 服务器是否允许匿名访问。它会尝试使用匿名用户(通常是anonymous作为用户名,email@example.com作为密码)登录 FTP 服务器,根据登录的结果判断服务器是否开放匿名访问权限。
- 应用场景:在网络安全管理中,了解 FTP 服务器的访问权限设置是很重要的。对于企业内部的 FTP 服务器,匿名访问可能会带来安全风险,如数据泄露等。通过这个脚本可以快速检查服务器是否存在这种安全隐患。
-
-
网络信息探测脚本
-
arp - ping.nse:
- 功能:利用地址解析协议(ARP)进行主机发现。它会发送 ARP 请求数据包到本地网络中的目标主机,通过接收 ARP 响应来确定目标主机是否在同一本地网络段内并且处于活动状态。这种方式比传统的 ICMP ping 在某些情况下更有效,特别是在一些禁止 ICMP 流量的网络环境中。
- 应用场景:在对本地局域网进行主机发现和网络拓扑绘制时,arp - ping.nse是一个很好的工具。例如,在一个办公室局域网中,通过这个脚本可以快速确定哪些设备是活动的,为后续的网络管理和安全监控提供基础信息。
-
dns - brute.nse:
- 功能:用于进行 DNS 暴力破解。它会尝试使用一个字典(包含常见的域名和子域名)来猜测目标 DNS 服务器上的域名记录。通过向目标 DNS 服务器发送大量的查询请求,查看是否能够解析出未公开的域名或子域名。
- 应用场景:在进行渗透测试或安全审计时,对于一些隐藏的内部网络资源,可能通过 DNS 暴力破解来发现相关的域名。例如,在检查企业网络中的内部域名系统时,使用这个脚本可以尝试发现一些未被正确授权访问的隐藏子域名,这些子域名可能包含敏感信息。
-
例如我们想查看靶机是否存在sql注入漏洞
nmap -script=http-sql-injection.nse 192.168.200.130
操作系统检测
-O:启用操作系统检测
--osscan-limit:将操作系统检测限制在有希望的目标上
--osscan-guess:更积极地推测操作系统
在 Nmap 中,-O参数用于操作系统探测。它通过发送一系列的数据包并分析目标主机的响应,来猜测目标主机所运行的操作系统类型(如 Windows、Linux、Mac OS 等)及其版本信息。这对于网络安全评估、网络管理和渗透测试等工作都非常有帮助。说白了就是检测是啥操作系统
定时与性能
带 <时间> 的选项单位为秒,或者可以在数值后附加 'ms'(毫秒)、's'(秒)、'm'(分钟)或 'h'(小时)(例如 30m)。
-T<0 - 5>:设置定时模板(数值越高速度越快)
--min-hostgroup /max-hostgroup < 大小 >:并行主机扫描组大小
--min-parallelism /max-parallelism < 探测数量 >:探测并行化
--min-rtt-timeout /max-rtt-timeout/initial-rtt-timeout < 时间 >:指定探测往返时间。
--max-retries < 重试次数 >:限制端口扫描探测重传的次数。
--host-timeout < 时间 >:经过此时长后放弃目标
--scan-delay /--max-scan-delay < 时间 >:调整探测之间的延迟
--min-rate < 数量 >:每秒发送数据包的速度不低于 < 数量 >
--max-rate < 数量 >:每秒发送数据包的速度不高于 < 数量 >
-T 用于控制扫描的时间策略,也就是扫描的速度。这个参数可以让用户根据不同的网络环境、目标主机的敏感度以及扫描的紧急程度等因素,灵活地调整扫描的节奏,取值范围为 0 - 5,每个数值代表不同的扫描策略。
防火墙 / 入侵检测系统(IDS)规避与欺骗
-f;--mtu <值>:对数据包进行分片(可指定 MTU 值)
-D < 诱饵 1, 诱饵 2 [, 本人],...>:用诱饵隐藏扫描
-S <IP 地址 >:伪造源地址
-e < 接口 >:使用指定接口
-g /--source-port < 端口号 >:使用给定端口号
--proxies <url1,[url2],...>:通过 HTTP/SOCKS4 代理中转连接
--data < 十六进制字符串 >:在发送的数据包上附加自定义有效载荷
--data-string < 字符串 >:在发送的数据包上附加自定义 ASCII 字符串
--data-length < 数字 >:在发送的数据包上附加随机数据
--ip-options < 选项 >:发送带有指定 IP 选项的数据包
--ttl < 值 >:设置 IP 生存时间字段
--spoof-mac <MAC 地址 / 前缀 / 厂商名称 >:伪造您的 MAC 地址
--badsum:发送带有错误 TCP/UDP/SCTP 校验和的数据包
输出
-oN /-oX/-oS /-oG <文件>:分别以普通、XML、脚本小子(Script Kiddie)和可检索格式将扫描结果输出到给定文件名。
-oA < 基本名称 >:一次性以三种主要格式输出
-v:提高详细程度级别(使用 - vv 或更多以获得更强效果)
-d:提高调试级别(使用 - dd 或更多以获得更强效果)
--reason:显示端口处于特定状态的原因
--open:仅显示开放(或可能开放)的端口
--packet-trace:显示发送和接收的所有数据包
--iflist:打印主机接口和路由(用于调试)
--append-output:追加到指定输出文件而不是覆盖它们
--resume < 文件名 >:恢复中断的扫描
--noninteractive:禁用通过键盘进行的运行时交互
--stylesheet < 路径 / URL>:将 XML 输出转换为 HTML 的 XSL 样式表
--webxml:引用来自Nmap.Org的样式表以获得更具可移植性的 XML
--no-stylesheet:防止将 XSL 样式表与 XML 输出关联
杂项
-6:启用 IPv6 扫描
-A:启用操作系统检测、版本检测、脚本扫描和追踪路由
--datadir <目录名>:指定自定义 Nmap 数据文件位置
--send-eth /--send-ip:使用原始以太网帧或 IP 数据包发送
--privileged:假定用户具有完全权限,可以用来测试权限
--unprivileged:假定用户缺少原始套接字权限
-V:打印版本号
-h:打印此帮助概要页面。
标签:扫描,nmap,主机,端口,TCP,--,使用,工具,数据包 From: https://blog.csdn.net/Lord_Torres/article/details/144622197