★特别说明★
使用Nmap命令做测试时,不要扫描未经授权的IP或网站,避免给自己带来一些不必要的麻烦。请使用自己搭建的虚拟机环境进行测试。
1、Nmap简介
Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(也称fingerprinting)。它是网络管理员必用的软件之一,可以用来评估网络系统安全。
官网为:www.nmap.org。
一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。
1.1、Nmap优点
- 灵活:支持数十种不同的扫描方式,支持多种目标对象的扫描
- 强大:Nmap可以用于扫描互联网上大规模的计算机
- 可移植:支持主流操作系统:Windows/Linux/Unix/MacOS等等;源码开放,方便移植
- 简单:提供默认的操作能覆盖大部分功能,基本端口扫描nmap targetip,全面的扫描nmap –A targetip
- 自由:Nmap作为开源软件,在GPL License的范围内可以自由的使用
- 文档丰富:Nmap官网提供了详细的文档描述。Nmap作者及其他安全专家编写了多部Nmap参考书籍
- 社区支持:Nmap背后有强大的社区团队支持
2、基本功能
Nmap包含四项基本功能:
- 主机发现 (Host Discovery)
- 端口扫描 (Port Scanning)
- 版本侦测 (Version Detection)
- 操作系统侦测 (Operating System Detection)
而这四项功能之间,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发现,随后确定端口状态,然后确定端口上运行的具体应用程序和版本信息,然后可以进行操作系统的侦测。而在这四项功能的基础上,nmap还提供防火墙和 IDS 的规避技巧,可以综合运用到四个基本功能的各个阶段。另外nmap还提供强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。
3、扫描原理
3.1、TCP SYN扫描(-sS)
Nmap默认扫描方式,通常被称为半开放扫描。发送SYN包到目标端口,若收到SYN/ACK回复,则端口被认为开放状态;若收到RST回复,则端口被认为关闭状态;若没有收到回复,则认为该端口被屏蔽。因为仅发送SYN包对目标主机的特定端口,但不建立完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
3.2. TCP connect扫描(-sT)
使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽。
3.3. TCP ACK 扫描(-sA)
向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。
3.4. TCP FIN/Xmas/NULL扫描(sF/sX/-sN)
这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN 包括Xmas tree包或NULL包,如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包。
3.5. UDP扫描(-sU)
UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。
3.6. 其他方式(-sY/-sZ)
除了以上几种常用的方式外,Nmap还支持多种其他的探测方式。例如使用SCTP INIT/Cookie-ECHO方式是来探测SCTP的端口开放情况;使用IP protocol方式来探测目标主机支持的协议类型(tcp/udp/icmp/sctp等等);使用idle scan方式借助僵尸主机来扫描目标主机,以达到隐蔽自己的目的;或使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐蔽自己的目的。
4、常用命令操作
4.1、工具使用说明
在kali系统,我提供的虚拟机环境默认是自带nmap工具,如果自己安装的系统可能是需要自己安装。在kali系统使用时记得切换管理员权限。
代码语言:javascript复制# 切换管理员权限,需要输入密码
sudo su
# 输入正确密码后,切换成功
┌──(root