记录一下nmap的使用方法,方便随时复习以及在使用时快速查找。
nmap是一款网络及漏洞扫描工具包,学习渗透测试的同学应该没有不知道nmap的吧,这里就不过多介绍了。写这篇文章的主要目的是做一些自己在学习nmap时的笔记,以便后面随时回来查看。所以,这篇文章主要只是一些记录,可能不会有太多内容。
学习及测试环境
VMware虚拟机
渗透测试端:Kali 2022.2
靶机:Matasploitable2
网络模式:NAT
子网IP:192.168.159.0
子网掩码:255.255.255.0
网关:192.168.159.2
主要功能
端口扫描、主机探测、服务及系统版本检测、操作系统检测、网络路由跟踪、脚本引擎等。
至于这些功能具体是干啥的,可以自己去网上搜一搜,要介绍起来的话就太多了。
安装及使用
1 2 3 4 | # 在root权限用户下,本文其他命令相同 apt update apt install nmap nmap -h |
简单测试
1 2 | # 首先扫描网段内存活主机: nmap -sP 192.168.159.0/24 |
终端输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-24 11:44 EDT Nmap scan report for 192.168.159.1 (192.168.159.1) Host is up (0.00071s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.159.2 (192.168.159.2) Host is up (0.00016s latency). MAC Address: 00:50:56:EF:12:63 (VMware) Nmap scan report for 192.168.159.128 (192.168.159.128) Host is up (0.00025s latency). MAC Address: 00:0C:29:2C:AF:0B (VMware) Nmap scan report for 192.168.159.254 (192.168.159.254) Host is up (0.00015s latency). MAC Address: 00:50:56:E6:BD:36 (VMware) Nmap scan report for 192.168.159.129 (192.168.159.129) Host is up. Nmap done: 256 IP addresses (5 hosts up) scanned in 2.05 seconds |
其中,192.168.159.128为靶机ip,192.168.159.129为测试机ip
得到此结果,说明nmap运行正常
1 2 | # 对靶机直接进行扫描 nmap 192.168.159.128 |
得到扫描结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-24 12:05 EDT Nmap scan report for 192.168.159.128 (192.168.159.128) Host is up (0.00099s latency). Not shown: 977 closed tcp ports (reset) PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 25/tcp open smtp 53/tcp open domain 80/tcp open http 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 512/tcp open exec 513/tcp open login 514/tcp open shell 1099/tcp open rmiregistry 1524/tcp open ingreslock 2049/tcp open nfs 2121/tcp open ccproxy-ftp 3306/tcp open mysql 5432/tcp open postgresql 5900/tcp open vnc 6000/tcp open X11 6667/tcp open irc 8009/tcp open ajp13 8180/tcp open unknown MAC Address: 00:0C:29:2C:AF:0B (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds |
端口状态
从上面的扫描结果可以看到,靶机开放了一堆端口,每个端口的状态都是"open",实际上,在nmap中,端口可能存在以下几种状态:
- 开放(open):工作于开放端口的服务器端的应用和程序可以受理TCP连接、接受UDP数据包或响应SCTP请求。
- 关闭(close):虽然可以访问相关端口,但是没有程序工作在该端口上。
- 过滤(filtered):无法确定该端口是否开放。包过滤设备屏蔽了发送的探测数据包。
- 未过滤(unfiltered):虽然可以访问到指定端口,但无法确认其开放状态。
- 打开|过滤(open|filtered):可能是开放状态或过滤状态,但无法确定。
- 关闭|过滤(close|filtered):可能是关闭状态或过滤状态,但无法确定
指定扫描目标
在简单测试一节里,我们对网段存活主机进行了扫描,以及对指定靶机进行了扫描,其用到了两种目标指定方式,分别为直接指定ip,以及指定网段,在这一节会更详细地介绍nmap的所有目标指定方法。
nmap支持以下几种目标指定方式:
- 单个主机,例如直接对ip进行扫描:nmap 192.168.159.128,表示直接对192.168.159.128进行扫描。
- 以CIDR标记法表示的地址相连的整个网段,例如:nmap 192.168.159.0/24,表示扫描从192.168.159.0到192.168.159.255的256个ip地址。
- 区间指定,例如nmap 192.168.159.3-5,8表示扫描192.168.159.3、192.168.159.4、192.168.159.5、192.168.159.8这几个地址。
- 同时指定多个目标,例如nmap 192.168.159.128 192.168.159.3-5,8表示同时对192.168.159.128、192.168.159.3、192.168.159.4、192.168.159.5、192.168.159.8这几个地址进行扫描。(在指定端口时也可以使用这种方法,参数为-p)
- 通过文件读取目标主机清单,例如nmap -iL ip.txt,表示从ip.txt中读取目标主机并执行扫描。
扫描选项
这一节将简单介绍tcp和udp在扫描时可以指定的选项。
常用TCP扫描选项
在nmap中,多数选项需要root级权限用户才能使用。在默认情况下,nmap采用TCP SYN扫描,在权限不足的情况下,nmap将进行TCP连接扫描。nmap具体其他tcp扫描方式如下:
- TCP链接扫描(-sT):指定该选项后,程序将和目标主机的每个端口进行三次完整握手。如果成功建立链接,则判断该端口为开放状态。该方式速度较慢,且可能被目标主机记录,但在权限不足的情况下,默认使用该方式进行扫描。
- SYN扫描(-sS):使用该选项后,nmap将使用带有SYN标志位(详见TCP/IP协议)的数据包进行扫描。如果目标主机回复SYN/ACK包,则说明该端口处于开放状态,如果回复RST/ACK包,则说明该端口处于关闭状态。如果没有响应,或发送了ICMP unreachable信息,则认为端口被屏蔽。这种扫描方式速度较快且隐蔽性高。在root级别权限下,默认使用这种扫描方式。
- TCP NULL(-sN)、FIN(-sF)、XMAS(-sX)扫描:NULL扫描不设置任何控制位;FIN设置FIN控制位;XMAS设置FIN、PSH和URG标识位。如果主机返回含有RET标志位的数据,则说明端口处于关闭状态,否则处于开启|过滤状态。
- TCP Maimon扫描(-sM):该模式的扫描数据包含FIN/ACK标识。如果被测端口处于关闭状态,则会回复RST。
- TCP ACK扫描(-sA):该模式可以检测目标系统是否采用了数据包状态检测技术防火墙,并可以确定哪些端口被防火墙屏蔽。如果目标主机回复中含有RST标识,则说明目标主机没有被过滤。
- TCP窗口扫描(-sW):该方式检测目标返回的RST数据包和TCP窗口字段。如果目标端口处于开放状态,该字段的值为正值,否则为0。
- TCP Idle扫描(-sI):使用该方法后将通过僵尸主机发送扫描数据包,本机不与目标主机直接通信。
nmap也可以通过--scanflags来指定扫描时使用的flag,如--scanflags URGACKPSH则表示设置URG、ACK、PSH标志位。
UDP扫描选项
使用-sU来进行UDP扫描,UDP扫描速度极慢,仅在需要UDP进行服务探测时使用。
1 2 | # 对靶机指定端口进行UDP扫描 nmap -sU 192.168.159.128 -p 22,23,53,54 |
得到以下结果:
1 2 3 4 5 6 7 8 9 10 11 12 | Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-26 00:31 EDT Nmap scan report for 192.168.159.128 (192.168.159.128) Host is up (0.00048s latency). PORT STATE SERVICE 22/udp closed ssh 23/udp closed telnet 53/udp open domain 54/udp closed xns-ch MAC Address: 00:0C:29:2C:AF:0B (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.31 seconds |
输出选项(略)
nmap的扫描结果可以以多种方式呈现,最基本的就是通过屏幕(终端)输出,通过指定-oN参数可以设置不显示警告和runtime信息。使用-oX参数可以指定使用XML文件进行输出。指定-oG参数可以输出Grep使用的文件。
在实际使用当中,可以使用xsltproc工具将xml结果转换成更易查看的html结果,使用方法如下:
1 2 | nmap -oX scan.xml 192.168.159.128 xsltproc scan.xml -o scan.html |
得到结果如下(为了防止出现问题,已经手动去除css和js,所以实际页面和这里会有区别):
Nmap Scan Report - Scanned at Tue Jul 26 00:41:49 2022
Scan Summary
Nmap 7.92 was initiated at Tue Jul 26 00:41:49 2022 with these arguments:
nmap -oX scan.xml 192.168.159.128
Verbosity: 0; Debug level 0
Nmap done at Tue Jul 26 00:41:50 2022; 1 IP address (1 host up) scanned in 0.36 seconds
192.168.159.128 / 192.168.159.128(online)
Address
- 192.168.159.128 (ipv4)
- 00:0C:29:2C:AF:0B - VMware (mac)
Hostnames
- 192.168.159.128 (PTR)
Ports
The 977 ports scanned but not shown below are in state: closed
977 ports replied with: reset
Misc Metrics
Metric | Value |
Ping Results | arp-response |
或者,也可以使用代码对xml文件进行处理,这里不再过多阐述。