Nmap 是一款网络扫描和主机检测的非常有用的工具。Nmap 是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于 winodws、linux、mac 等操作系统。
0x00 前言
Nmap 是一款网络扫描和主机检测的非常有用的工具。Nmap 是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于 winodws、linux、mac 等操作系统。
nmap 中文网地址:中文网里面也有比较全的使用手册。
0x01 安装
编译安装最新版本 nmap
1 | tar jxvf nmap-7.80.tar.bz2 -C /usr/src/ //解包 |
0x02 功能与快速使用
2.1 功能
- 主机存活扫描
- 端口扫描
- 服务扫描
- 版本漏洞扫描
2.2 参数功能表
目标输入
Nmap 支持主机名,ip,网段的表示方式例如:blah.highon.coffee, namp.org/24, 192.168.0.1;10.0.0-25.1-254
1 | -iL filename 从文件中读取待检测的目标,文件中的表示方法支持机名,ip,网段 |
主机发现
1 | -sL 仅仅是显示,扫描的IP数目,不会进行任何扫描 |
扫描技巧
1 | -sS/sT/sA/sW/sM TCP SYN/TCP connect()/ACK/TCP窗口扫描/TCP Maimon扫描 |
指定端口和扫描顺序
1 | -p 特定的端口 -p80,443 或者 -p1-65535 |
服务版本识别
1 | -sV 开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测 |
脚本扫描
1 | -sC 根据端口识别的服务,调用默认脚本 |
OS 识别
1 | -O 启用操作系统检测,-A来同时启用操作系统检测和版本检测 |
防火墙/IDS 躲避和哄骗
1 | -f; --mtu value 指定使用分片、指定数据包的MTU. |
Nmap 输出
1 | -oN 将标准输出直接写入指定的文件 |
其他 nmap 选项
1 | -6 开启IPv6 |
2.3 常用命令
1) 获取远程主机的系统类型及开放端口
这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网
-sS TCP SYN 扫描 (又称半开放,或隐身扫描)
-P0 允许你关闭 ICMP pings.
-sV 打开系统版本检测
-O 尝试识别远程操作系统
其它选项:
-A 同时打开操作系统指纹和版本检测
-v 详细输出扫描情况.-v 详细输出扫描情况.
nmap -sS -P0 -sV -O <target>
nmap -sS -P0 -A -v < target >
2) 列出开放了指定端口的主机列表nmap -sT -p 80 -oG – 192.168.1.* | grep open
3) 在网络寻找所有在线主机nmap -sP 192.168.1.*
或者也可用以下命令指定 subnetnmap -sP 192.168.1.0/24
4**) Ping 指定范围内的 IP 地址**nmap -sP 192.168.1.100-254
5) 在某段子网上查找未占用的 IPnmap -T4 -sP 192.168.2.0/24 && egrep “00:00:00:00:00:00″ /proc/net/arp
6) 在局域网上扫找 Conficker 蠕虫病毒nmap -PN -T4 -p139,445 -n -v –script=smb-check-vulns –script-args safe=1 192.168.1.1-254
7) 扫描网络上的恶意接入点 (rogue APs)nmap -A -p1-85,113,443,8080-8100 -T4 –min-hostgroup 50 –max-rtt-timeout 2000 –initial-rtt-timeout 300 –max-retries 3 –host-timeout 20m –max-scan-delay 1000 -oA wapscan 10.0.0.0/8
8 ) 使用诱饵扫描方法来扫描主机端口nmap -sS 192.168.1.10 -D 192.168.1.2
9) 为一个子网列出反向 DNS 记录nmap -R -sL 209.85.229.99/27 | awk ‘{if($3==”not”)print”(“$2″) no PTR”;else print$3″ is “$2}’ | grep ‘(‘
10) 显示网络上共有多少台 Linux 及 Win 设备?
1 | nmap -F -O 192.168.1.1-255 | grep “Running: ” > /tmp/os; echo “$(cat /tmp/os | grep Linux | wc -l) Linux |
2.4 高级用法
按照脚本分类进行扫描:nmap --script 类别
- auth: 负责处理鉴权证书绕开鉴权的脚本
- broadcast: 在局域网内探查更多服务开启状况如 dhcp/dns/sqlserver 等服务
- brute: 提供暴力破解方式针对常见的应用如 http/snmp 等
- default: 使用-sC 或-A 选项扫描时候默认的脚本提供基本脚本扫描能力
- discovery: 对网络进行更多的信息如 SMB 枚举、SNMP 查询等
- dos: 用于进行拒绝服务攻击
- exploit: 利用已知的漏洞入侵系统
- external: 利用第三方的数据库或资源例如进行 whois 解析
- fuzzer: 模糊测试的脚本发送异常的包到目标机探测出潜在漏洞
- intrusive: 入侵性的脚本此类脚本可能引发对方的 IDS/IPS 的记录或屏蔽
- malware: 探测目标机是否感染了病毒、开启了后门等信息
- safe: 此类与 intrusive 相反属于安全性脚本
- version: 负责增强服务与版本扫描 Version Detection 功能的脚本
- vuln: 负责检查目标机是否有常见的漏洞 Vulnerability 如是否有 MS08_067
0x03 端口扫描原理浅析
3.1 TCP SYN scanning
这是 Nmap 默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。
nmap -sS 192.168.1.1
该方式发送 SYN 到目标端口,如果收到 SYN/ACK 回复,那么判断端口是开放的;如果收到 RST 包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)。
因为该方式仅发送 SYN 包对目标主机的特定端口,但不建立的完整的 TCP 连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
TCP SYN 探测到端口关闭:
TCP SYN 探测到端口开放:
3.2 TCP connect scanning
TCP connect 方式使用系统网络 API connect 向目标主机的端口发起连接,如果无法连接,说明该端口关闭。
nmap -sT 192.168.1.1
该方式扫描速度比较慢,而且由于建立完整的 TCP 连接会在目标机上留下记录信息,不够隐蔽。所以,TCP connect 是 TCP SYN 无法使用才考虑选择的方式。
TCP connect 探测到端口关闭:
TCP connect 探测到端口开放:
3.3 TCP ACK scanning
向目标主机的端口发送 ACK 包,如果收到 RST 包,说明该端口没有被防火墙屏蔽;没有收到 RST 包,说明被屏蔽。
nmap -sA 192.168.1.1
该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助 TCP SYN 的方式来判断目标主机防火墙的状况。
TCP ACK 探测到端口被屏蔽:
TCP ACK 探测到端口未被屏蔽:
3.4 TCP FIN/Xmas/NULL scanning
这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN 扫描向目标主机的端口发送的 TCP FIN 包或 Xmas tree 包/Null 包,如果收到对方 RST 回复包,那么说明该端口是关闭的;没有收到 RST 包说明端口可能是开放的或被屏蔽的(open|filtered),FIN 扫描发送的包只包含 FIN 标识,NULL 扫描不发送数据包上的任何字节,XMAS 扫描发送 FIN、PSH 和 URG 标识的数据包。
nmap -sF 110.130.1.43
nmap -sX 110.130.1.43
nmap -sN 110.130.1.43
其中 Xmas tree 包是指 flags 中 FIN URG PUSH 被置为 1 的 TCP 包;NULL 包是指所有 flags 都为 0 的 TCP 包。
TCP FIN 探测到主机端口是关闭的:
TCP FIN 探测到主机端口是开放或屏蔽的:
3.5 UDP scanning
UDP 扫描方式用于判断 UDP 端口的情况。
nmap -sU 192.168.1.1
向目标主机的 UDP 端口发送探测包,如果收到回复“ICMP port unreachable”就说明该端口是关闭的;如果没有收到回复,那说明 UDP 端口可能是开放的或屏蔽的。
因此,通过反向排除法的方式来断定哪些 UDP 端口是可能出于开放状态。
UDP 端口关闭:
UDP 端口开放或被屏蔽: