nmap简单使用方法学习笔记(上)

发布于 2022-07-26  55 次阅读


记录一下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

Port State (toggle closed [0] | filtered [0]) Service Reason Product Version Extra info
21 tcp open ftp  syn-ack      
22 tcp open ssh  syn-ack      
23 tcp open telnet  syn-ack      
25 tcp open smtp  syn-ack      
53 tcp open domain  syn-ack      
80 tcp open http  syn-ack      
111 tcp open rpcbind  syn-ack      
139 tcp open netbios-ssn  syn-ack      
445 tcp open microsoft-ds  syn-ack      
512 tcp open exec  syn-ack      
513 tcp open login  syn-ack      
514 tcp open shell  syn-ack      
1099 tcp open rmiregistry  syn-ack      
1524 tcp open ingreslock  syn-ack      
2049 tcp open nfs  syn-ack      
2121 tcp open ccproxy-ftp  syn-ack      
3306 tcp open mysql  syn-ack      
5432 tcp open postgresql  syn-ack      
5900 tcp open vnc  syn-ack      
6000 tcp open X11  syn-ack      
6667 tcp open irc  syn-ack      
8009 tcp open ajp13  syn-ack      
8180 tcp open unknown  syn-ack      

Misc Metrics (click to expand)

或者,也可以使用代码对xml文件进行处理,这里不再过多阐述。


学而不思则罔,思而不学则殆