文章目录
觉得看字非常费事儿的同学可以点我查看nmap的详解思维导图(含高级应用篇-高清免费)
简介
Nmap是一款网络连接扫描软件,用来扫描网上计算机设备开放的网络连接端口。确定哪些服务运行在计算机连接端,并推断出该计算机的运行操作系统。
作为当今最顶尖的网络审计攻击之一,Nmap在国内外基本上已经成为了世界恶魔图测试·渗透测试人员必备工具。黑客往往也会利用Nmap对目标电脑进行网络设定的信息采集,从而制定可行的攻击方案。
目前Nmap已经具备了设备发现、端口扫描、服务和版本检测、操作系统检测检测功能。除了这些基本功能之外,Nmap还可以实现一些高级的审计技术,比如伪造发起扫描者的身份IP地址、进行隐蔽式扫描、IDS规避(如防火墙等)、对目标系统进行安全漏洞检测、提供扫描报告,(实际上攻击模块只是Nmap的附属功能,扫描Nmap的核心功能,毕竟“众神之眼”的名头不是白瞎的),随着近几年的发展,通过Nmap推出的NSE脚本引擎,大家也可以自己向Nmap中添加新的功能模块。
实际应用场景
- 通过对设备或者防火墙的探测审计目标主机的安全性
- 探测网络上的主机
- 识别目标主机所开放的端口、对应的服务及主机操作系统
- 通过识别新的服务器审计网络的安全性
基本功能介绍及依赖关系
- 主机发现(Host Discovery)
- 端口扫描(Port Scaning)
- 版本侦测(Version detecion)
- 操作系统系统侦测(Operating System Detection)
该四项基本功能之间存在着一定的依赖关系(通常是顺序关系,特殊情况下除外);先是主机发现,紧接着确定端口状态,然后确定端口上运行的具体应用程序和版本信息,然后根据操作系统侦测。除此之外,Nmap还提供了IDS、防火墙规避等高级技巧可以应用在该四项基本功能上,除此之之外,Nmap提供的NSE(Nmap Scriping Language)脚本引擎功能可以对基本功能进行扩展。
关于主机发现
主机发现的原理与ping原理类似,即通过发送检测数据包至目标主机,根据数据包响应判断主机存活。
Nmap支持是多种不同的主机探测方式,用户可以根据自己的条件进行不同的灵活选用进行主机发现。(一般情况下为了提高扫描的效率,我们可以先通过masscan扫描端口,在通过nmap针对端口进行进一步的详细扫描。)
常用的主机发现命令如下
命令参数 | 参数详解 |
---|---|
-A | 全面进攻性扫描,检测端口、对应的服务及版本等全方位的详细信息 |
-T4 | 扫描级别(0-5),级别越高速度越快,也容易被IDS或防火墙检测到,一般4 |
-F | 快速扫描TOP100 |
–top -ports 1000 | 扫描开放概率最高的1000歌端口 |
-v | 显示详细的扫描信息 |
-O | 进行系统版本扫描 |
-sV | 进行端口服务版本扫描 |
-p | 指定扫描的端口,可以是“0-1000”,也可以是“21,22,80,443” |
-oX | 将扫描结果生成xml格式文件(需指定文件名),扫描中途中断,则不保存 |
-oA | 将扫描结果生成xml格式文件(需指定文件名),扫描中途中断,也可保存 |
-oG | 将扫描结果生成txt文件(需指定文件名) |
-sn | 只进行主机发现,不进行端口扫描 |
-sS/sT/sA/sU | 详见下方端口扫描板块 |
-PE/PP/PM | 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机。 |
-PS/PA/PU/PY | 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现。 |
-iL | -iL test.txt 批量扫描“test.txt”文件中的IP地址 |
-sL | 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。 |
-Pn | 将所有指定的主机视作开启的,跳过主机发现的过程。 |
-PO | 使用IP协议包探测对方主机是否开启。 |
-n/-R | -n表示不进行DNS解析;-R表示总是进行DNS解析。 |
–dns-servers | 指定DNS服务器 |
–system-dns | 指定使用系统的DNS服务器 |
–traceroute | 追踪每个路由节点 |
关于端口扫描
端口扫描状态
前文我们提到Nmap最核心的功能就是扫描,扫描的目的就是确认目标主机的端口开放状态。
在为指定端口及范围的情况下,Nmap会扫描1000个最有可能开放的端口。
端口检测状态如下
open | 端口处于开放状态 |
---|---|
closed | 端口处于关闭状态 |
filtered | 端口处于IPS/IDS屏蔽状态,无法确定其是否开放 |
unfiltered | 端口没有屏蔽,但需要进一步确定其是否开放 |
open|filtered | 端口可能开放或者被屏蔽,无法识别 |
close|filtered | 端口可能关闭或者被屏蔽,无法识别 |
端口扫描原理及常用方式
命令 | 扫描方式 | 原理 |
---|---|---|
-sS | TCP SYN | Nmap默认扫描方式(同步扫描),也被称为半开放扫描。该扫描方式是通过发送SYN数据包到目标端口,如果收到SYN/ACK的返回回复,则判断该端口为开放状态。如果收到RST包,则说明该端口是关闭状态。如果是没有收到回复,则判断该端口处于被屏蔽状态。因为是发送SYN数据包到目标的端口,不建立完整的TCP链接,所以相对其他扫描方式而言,较为隐蔽,是目前效率比较高,适用范围比较广的一种扫描方式。 |
-sT | TCP connent | 使用系统网络TCP connect 向目标主机的端口发起链接,如果无法链接,则表示该端口关闭。该扫描方式速度比较慢,而且因为是建立完整的TCP链接,会在目标主机上留下大批的链接请求和错误信息,不够隐蔽。一般情况下在 TCP SYN 扫描无法使用的情况下才会使用该扫描方式。 |
-sA | ACK | 向目标主机发送ACK包,如果收到RST包,表示该端口没有被防火墙屏蔽。没有收到RST包,则说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,一般情况下会辅助 TCP SYN 的扫描方式来判断目标主机防火墙的状态,也通常用来穿透防火墙。 |
-sP | ping | 利用ping扫描方式检测网络上哪些主机处于运行状态。当主机阻塞ICMP eth0 请求包是ping扫描是无效的。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。 |
-sU | UDP | 利用向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。 |
-sF/-sN/-sX | FIN/NULL/Xmass | 该三种扫描方式,一般也被称为隐蔽扫描。这些扫描的理论依据是:关闭的端口需要对检测的数据包进行RST回应,而打开的端口则需要忽略掉有问题的数据包。 |
-sW | TCP window | 滑动窗口扫描,非常类似ACK扫描 |
-sR | RPC | RPC扫描,和其他不同的端口扫描方法相结合 |
-b | FTP | FTP反弹攻击(bounce attack),链接到防火墙后面的一台FTP服务器做代理,然后进行端口扫描 |
端口扫描的一些常用实例
# nmap -sP 192.168.1.0/24 #进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测)
# nmap -sL 192.168.1.0/24 #仅列出指定网络上的每台主机,不发送任何报文到目标主机
# nmap -PS 192.168.1.234 #探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80)
# nmap -PU 192.168.1.0/24 #使用UDP ping探测主机
# nmap -sS 192.168.1.0/24 #使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快
# nmap -sT 192.168.1.0/24 #当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描
# nmap -sU 192.168.1.0/24 #UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口
# nmap -sO 192.168.1.19 #确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等)
# nmap -O 192.168.1.19 #探测目标主机的操作系统
# nmap -A 192.168.1.19 #探测目标主机的操作系统
# nmap -v scanme.nmap.org #这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式。
# nmap -sS -O scanme.nmap.org/24 #进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测,这个扫描需要有根权限。
# nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127 #进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行。
# nmap -v -iR 100000 -P0 -p 80 #随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因 此使用-P0禁止对主机列表。
# nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20 #扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。
# host -l company.com | cut -d -f 4 | nmap -v -iL - #进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给 Nmap。上述命令用于GNU/Linux -- 其它系统进行区域传输时有不同的命令