一、概述
扫描神器,效率比较高。
特点:跨平台,集成在kali中。
官网:nmap.org
书籍:《nmap渗透测试指南》
二、使用
如果使用kali中的namp时,建议使用桥接,桥接方式可以让kali和宿主机同处于一个网络环境,NAT模式的话nmap的扫描流量需要宿主机进行转发,效率比较低。
2.1 主机发现
2.1.1 ping扫描
nmap CIDR网段 -sP/-sn
-sn VS -sP:
nmap -sP
和nmap -sn
都是用于网络扫描的工具,但它们在扫描行为和目的上有所不同:
nmap -sP
(Ping Scan):
- 这个选项用于执行 ICMP echo 请求(ping)来确定哪些主机是在线的。
- 它不会扫描任何端口,只是检查主机是否响应 ICMP 请求。
- 这个选项通常用于避免被目标主机的防火墙或入侵检测系统(IDS)注意到,因为它不发送任何端口扫描数据包。
-sP
可以快速识别网络中活跃的主机,但不会提供关于开放端口或服务的信息。nmap -sn
(No Port Scan):
- 这个选项用于执行主机发现,但不进行端口扫描。
- 与
-sP
类似,-sn
也会检查主机是否在线,但它使用的方法可能包括更广泛的协议,如 ARP 请求(在局域网中)或其他方法,而不是仅仅依赖于 ICMP。-sn
选项在某些情况下可以绕过某些类型的防火墙或 IDS,因为它不发送标准的端口扫描数据包。- 与
-sP
一样,-sn
不会提供关于开放端口或服务的详细信息。主要区别:
-sP
主要依赖于 ICMP 来确定主机是否在线,而-sn
可能使用多种方法,包括 ICMP,但不限于此。-sP
在某些情况下可能更容易被检测到,因为它发送的是标准的 ICMP 请求,而-sn
可能使用更隐蔽的方法。- 两者都不会扫描端口,因此不会显示开放端口或服务的信息。
使用场景:
- 如果你只想快速检查网络中哪些主机是在线的,而不关心端口信息,
-sP
或-sn
都是合适的选择。- 如果你在一个限制 ICMP 流量的环境中,或者需要更隐蔽的扫描,
-sn
可能是更好的选择。在实际使用中,选择哪个选项取决于你的具体需求和网络环境。
2.2 端口扫描
2.2.1 扫描某个主机
nmap IP
默认扫描top 1000 个端口。
2.2.2 端口参数配置
-p 指定端口
eg:
-p 80
-p 1-80
-p 90,3389,22,21
-p 1-80,3389,22
-p- ⇔ -p 1-65535
2.2.3 扫描方式
1)全连接扫描 -sT
TCP 全连接扫描【-sT】【建立完整的三次握手过程】
wireshark抓包分析:
启动wireshark抓包,并扫描53端口:
过滤:
- 端口开启的情况
首先完成三次握手。
- 端口关闭的情况
2)SYN 半连接扫描 -sS
SYN 半连接扫描【-sS】 【只进行三次握手的前两步】
抓包分析:
- 端口开启的情况
【syn】【syn ack】【rst】
- 端口关闭的情况
【syn】【rst】
3)隐蔽扫描
【不适用与windows系统】【发送畸形的数据包】
- Null扫描 【-sN】【标志位全为0】
Null扫描(-sN):在这种扫描中,Nmap 发送一个没有设置任何标志位的TCP数据包。如果目标端口关闭,操作系统通常会回复一个带有RST(重置)标志位的TCP数据包。如果端口开放,根据TCP RFC,理论上不应该有任何响应,但有些系统可能会忽略这个规则并发送一个RST数据包。这种扫描方式相对隐蔽,因为它不发送标准的SYN或ACK数据包,可能会绕过一些简单的防火墙或入侵检测系统。
- Xmas扫描【-sX】
Xmas扫描(-sX):这种扫描方式通过发送带有FIN、PSH和URG标志位的TCP数据包来探测端口状态。这三个标志位同时置位,就像点亮圣诞树上所有的灯一样,因此得名Xmas扫描。如果目标端口关闭,通常会收到一个RST响应。如果端口开放或被过滤,可能不会有任何响应,或者在某些情况下,可能会收到一个RST响应。这种扫描方式同样相对隐蔽,因为它不使用标准的TCP握手标志位。
- FIN扫描【-sF】
FIN扫描(-sF):在FIN扫描中,Nmap 发送一个只设置FIN标志位的TCP数据包。如果目标端口关闭,会收到一个RST响应。如果端口开放,通常不会有任何响应。这种扫描方式的隐蔽性介于SYN扫描和Xmas/Null扫描之间,因为它只使用了一个非标准的标志位。
这三种扫描方式被称为“秘密扫描”,因为它们旨在最大程度地降低被目标系统察觉的可能性。它们通过发送非标准的TCP数据包来探测端口状态,基于目标主机对这些异常数据包的不同响应来判断端口是否开放。这些扫描方式的目的在于尽量减少在目标主机上产生的日志信息,以及避免触发防火墙规则或入侵检测系统的警报。
2.2.4 探测端口开放的服务及版本(-sV)
nmap -sV <target>
这里的
Nmap 的
-sV
参数用于进行服务版本检测。当你在扫描过程中使用这个参数时,Nmap 会尝试确定运行在目标端口上的服务的版本信息。这可以通过分析服务对探测请求的响应来实现,Nmap 会发送特定的数据包到目标端口,并根据服务的响应来识别版本。
2.2.5 端口的状态
1)ClosedFiltered
该状态用于Nmap不能确定端口是关闭的还是被过滤的。值得注意的是,它只可能出现在IPID Idle扫描中。
2)filtered
前面讲到掌握一定安全技术的管理员会布置一个防火墙设备或者是通过设置路由器的规则阻止Nmap的扫描,【当Nmap遇到防火墙设备或是路由器规则的时候,Nmap的报文就会被过滤达到目标端口,这样就会使Nmap无法判断目标端口到底是否开放了。】出现被过滤现象并不代表一定是被某些专业的设备过滤了,也许是因为网络堵塞造成的,建议遇到被过滤状态时【分不同的时间段再次进行扫描】。
3)closed
当端口关闭的时候Nmap也可以轻而易举地将其检测出来,因为接受了Nmap的探测报文并作出了响应,当然,这也【不能忽略是管理员的一个欺骗攻击者的把戏】,如果发现没有开放的端口,可以等待一会再次扫描一下可能又呈现开放状态了。如果管理员掌握一定的安全技术,可能会使用防火墙对这些端口进行防护,不过,这并不会阻碍我们发现这个端口,【如果被未知或已知的防火墙阻挡访问目标端口,Nmap也会提示“我遇到了一些情况,好像被防火墙挡住了。】”
4)Unfiltered
未被过滤状态意味着【端口可以访问,但是Nmap并不能判断目标端口处于开放状态还是关闭状态】,这里需要重申的是目标端口是否可以访问与是否开放并无太大的联系,例如,关闭的端口也可以接受Nmap发出去的探测报文。需要注意的是,当我们【使用ACK扫描时才会呈现出这种状态】,这时我们可以换一种扫描方式去进行扫描,以便于进一步确认目标端口是否开放。
5)OpenFiltered
开放还是过滤的,如果Nmap发出去的探测报文并没有得到目标端口的响应,那可能会是受到了某些专业设备的阻挡,但这也不是完全一个被过滤的状态,这时Nmap就会呈现出目标端口是开放还是被过滤的。出现这种状态【不妨换一种扫描方式】进一步确认目标端口是开放还是被过滤的。
6)open
发现这一点是端口扫描工具的职责所在,每一个端口就可能会是一次被攻击成功的大门,管理员也不会将一个端口随便关闭,这会使合法用户产生不必要的麻烦。当我们使用Nmap进行端口扫描时,【如果端口状态为Open,说明此端口对外为开放状态】,确定为Open状态便于我们制定下一步的渗透计划。
2.3 操作系统类型 (-O)
操作系统类型 【不太准确】
Nmap 的 -O
参数用于进行操作系统检测。当你在扫描过程中使用这个参数时,Nmap 会尝试确定目标主机运行的操作系统。
Nmap 的操作系统检测功能非常强大,但需要注意的是,检测结果可能不是 100% 准确,因为操作系统的响应模式可能会因为网络设备、防火墙配置或操作系统的特定设置而变化。此外,一些高级用户或管理员可能会采取措施来混淆或伪装操作系统的识别,以提高安全性。
判断操作系统类型 需要综合手段。
2.4 保存扫描结果 (oX /-oN)
- 【保存为xml格式,保存为txt格式】
2.5 全面扫描 (-A)
nmap -p- -A ip -oN 文件名
Nmap 的
-A
参数是一个强大的选项,它代表“侵略性扫描”(Aggressive Scan)。使用-A
参数时,Nmap 会同时进行多种类型的扫描,包括:
- 操作系统检测(-O):尝试识别目标主机的操作系统类型和版本。
- 服务版本检测(-sV):确定运行在目标端口上的服务的版本信息。
- 脚本扫描(–script):执行一系列预定义的脚本,这些脚本可以用于自动化常见的渗透测试任务,如检测已知漏洞、服务配置问题等。
- traceroute:在识别目标主机上运行的服务及其版本信息时,Nmap 会执行 traceroute 来跟踪数据包的路由路径。
-A
参数的侵略性较高,因为它会进行更多的探测,这可能会在目标主机上产生更多的日志条目,从而提高被目标系统管理员察觉的风险。因此,在进行-A
扫描时,应确保你有适当的授权,以避免违反法律法规或道德规范。此外,
-A
参数可以与其他参数结合使用,以进一步定制扫描行为。例如,-p
参数可以用来指定特定的端口范围,-T
参数可以用来调整扫描的速度(0-5,0 代表最慢,5 代表最快)。
2.6 指定强度
-T0~5
nmap -T4 <target>
在 Nmap 中,
-T
参数用于控制扫描的速度和强度。这个参数的值从 0 到 5,每个值代表不同的扫描策略,影响扫描的隐蔽性和速度。以下是每个值的含义:
- **
-T0
(极慢,极隐蔽)**:这种模式下,Nmap 会使用最隐蔽的扫描技术,如 SYN 扫描(如果没有使用-Pn
参数来禁用 ICMP 主机发现)。它可能会使用更多的系统资源来随机化和延迟探测,以减少被检测到的可能性。- **
-T1
(慢,隐蔽)**:这是默认的扫描速度,提供了一个平衡的扫描速度和隐蔽性。对于大多数日常扫描任务,这是一个很好的起点。- **
-T2
(中等速度,较少隐蔽)**:这种模式下,Nmap 会加快扫描速度,但可能会牺牲一些隐蔽性。这适用于当你需要在不太关注隐蔽性的情况下快速完成扫描时。- **
-T3
(快)**:在这个级别,Nmap 会进一步加快扫描速度,可能会产生更多的网络流量,从而更容易被网络监控系统检测到。- **
-T4
(非常快)**:这种模式下,Nmap 会尽可能快地发送探测数据包,牺牲隐蔽性以换取速度。这适用于当你需要快速扫描并且不太关心是否被发现时。- **
-T5
(最快)**:这是最快的扫描模式,Nmap 会以最快的速度发送探测数据包,几乎不考虑隐蔽性。这种模式可能会对网络性能产生较大影响,并且很容易被检测到。
2.7 启动脚本扫描(-sC)
Nmap 的 -sC
参数用于启用脚本扫描。这个参数会告诉 Nmap 在发现开放端口后,自动运行一组默认的 NSE(Nmap Scripting Engine)脚本。这些脚本可以用于收集目标系统的各种信息,如服务的更多细节、潜在的安全漏洞、配置问题等。
nmap -sC <target>
这里的 <target>
可以是单个 IP 地址、域名或者是一个 IP 地址范围。
NSE 脚本是 Nmap 的一个强大特性,它们可以扩展 Nmap 的功能,使其能够执行各种复杂的任务。例如,如果一个端口被识别为运行 Web 服务器,Nmap 可以运行特定的脚本来检查 Web 应用程序的安全问题,如常见的漏洞、错误的配置、服务的版本信息等。
-sC
参数通常与其他参数一起使用,以提供更全面的扫描结果。例如,结合-sV
参数可以同时进行服务版本检测和脚本扫描,而-p
参数可以指定要扫描的端口范围。需要注意的是,脚本扫描可能会比基本的端口扫描消耗更多的时间和资源,因为它涉及到对每个开放端口执行额外的脚本。此外,某些脚本可能会对目标系统产生额外的负载,因此在生产环境中使用时应谨慎。
总结
总之,Nmap(Network Mapper)是一款开源的网络探测和安全审计工具,广泛用于网络安全领域。它能够快速扫描网络,检测主机是否在线、开放的端口以及运行的服务和它们的版本。Nmap 提供了多种扫描技术,如SYN扫描、UDP扫描、操作系统检测、服务版本检测等。此外,它还支持脚本扫描,能够使用NSE(Nmap Scripting Engine)脚本进行更深入的分析,如检测漏洞、执行系统命令等。Nmap 的灵活性和强大功能使其成为网络安全专业人士和渗透测试人员的重要工具。使用时需确保有适当的授权,以避免违反法律法规。