nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。
Nmap 常被跟评估系统漏洞软件Nessus 混为一谈。Nmap 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作。
Nmap使用其实特别简单,只需咋需要下输入nmap +目标地址就可以执行扫描任务,如下:
nmap 192.168.0.1
Starting Nmap 7.30 ( https://nmap.org ) at 2018-11-25 14:21 CST
Nmap scan report for 192.168.0.1
Host is up (0.0049s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.50 seconds
在扫描的结果中,生成了关于192.168.0.1主机的报告信息。包括:主机是up的,说明这台主机目前处于联网状态,并且有一个80端口是处于开放状态并可以提供http服务进行访问。
nmap -sn 192.168.0.1-255
备注: sn参数表示主机是否活跃
Starting Nmap 7.30 ( https://nmap.org ) at 2018-11-25 15:26 CST
Nmap scan report for 192.168.0.1
Host is up (0.0077s latency).
Nmap scan report for 192.168.0.103
Host is up (0.049s latency).
Nmap done: 250 IP addresses (2 hosts up) scanned in 20.02 seconds
命令语法:nmap [ip地址/子网掩码]
nmap -sn 192.168.0.1/24
命令语法:nmap 【扫描段1 扫描段2 扫描段3】
nmap -sn 192.168.0.1 192.168.0.99 192.168.0.111
命令语法:nmap 【目标地址】 —exclude [目标地址]
nmap -sn 192.168.0.0/24 --exclude 192.168.0.111
命令语法:nmap -iL [文本文件]
nmap -sn -iL ip.txt
备注: ip.txt 需要制定路径
命令语法:nmap -iR [目标的数量]
nmap -sn -iR 5
备注: 随机的对互联网5个地址进行扫描
ARP协议位于TCP/IP协议的数据链路层和网络层中间的协议,该协议主要目的是物理地址和逻辑地址的转换工作。我们都知道在网络上同一网段的主机进行通讯使用逻辑地址(mac地址),不同网段的主机通讯需要使用逻辑地址通讯(IP地址)。而ARP在中间起到桥梁的作用。
nmap基于ARP活跃主机探测的原理:通过构造ARP广播数据包,如果得到对方的回应说明主机为活跃主机。
这种方式的优点是精准度高,几乎没有噪音。缺点是:扩展性差,不能对扩网段主机进行扫描
ARP探测命令语法:nmap -PR [目标主机]
ARP探测实例:nmap -PR 172.16.1.
icmp不管是运维还是开发人员应用最为广泛的协议,几乎每天都在使用。icmp报文可以分为两类:1、是差错;2、是查询。而查询是我们应用非常多的。包括请求和应答
请求和应答又包括响应请求和应答,时间戳请求和应答,地址掩码请求和应答。
该种方式主要是使用icmp协议。发送请求,如果得到对方主机的回应,说明主机处于活跃状态。其实就是使用的ping命令来完成的。
这种方式的优点是:方便、快捷,系统集成工具,缺点是:在互联网上基本被防火墙过滤造成准确度很低
基于ICMP协议探测命令语法:nmap -PE 【目标】
实例:nmap -PE 172.16.26.55
这种方式的优点是:方便、快捷,缺点是:在互联网上基本被防火墙过滤造成准确度很低
命令语法:nmap -PP [目标]
实例:nmap -PP -sn 172.16.26.55
命令语法:nmap -PM 【目标】
实例:nmap -PM 172.16.1.55
tcp是面向连接的、基于字节流的传输层通讯协议,tcp之所以是连接可靠的协议是因为基于三次握手协商。
在nmap中常用的tcp扫描有两种,分别是tcp ack扫描和tcp syn扫描。
nmap中使用 -PS选项向目标主机发送一个syn标志的数据包,默认探测的目标端口是80(端口可以更改),内容为空。如果收到数据包说明目标主机在线,如果没有收到数据包,说明主机不在线。
基于tcp扫描是最强的扫描技术,服务器,可能会过滤icmp协议。但是几乎没有服务器会屏蔽tcp的syn数据包,因为这是网络通讯所必须使用的协议。
命令语法:nmap -PS 【端口1,端口2,端口3】【目标主机IP】
案例:nmap -PS 172.16.1.55
备注: 使用默认的端口进行探测
tcp ack扫描使用的是tcp三次握手中的ACK标志位,而tcp syn 使用的是SYN标志位。在实际环境中只有A向B发送syn之后,B才会回应ACK数据包。这种方式是A直接发送ACK给B,B因为没有收到syn一般回复RST,这种通讯模式不符合tcp通讯的逻辑规律,所以该种模式非常容易被防火墙拦截。
命令语法:nmap -PA 172.16.1.55
UDP协议是一个传输层协议,与TCP相反,UDP是一个面向无连接的协议。该协议简单很多,没有tcp协议的三次握手,导致业务中经常出现的对udp端口无法进行扫描,不能确定其是否开放。但是nmap的强大之处是可以使用nmap对主机进行发现和探测,当一个udp端口收到一个udp数据包时候,如果该端口是关闭的,就给源发送一个icmp端口不可达数据包,如果该端口是开放的,就丢弃数据包,不返回任何信息。这种方式就可以完成udp主机探测,缺点是扫描结果可靠性非常低。
命令语法:nmap -PU 【目标】
案例:nmap -sn -PU 10.10.26.55
IP协议是tcpip协议的载体,tcp、udp、icmp以及应用层协议都是封装成IP数据包在网络上进行传输。ip数据包的格式如下:
在ip协议中有一个协议部分,用于标识是哪个协议向ip传送数据,比如:tcp、udp、icmp等。
在nmap中允许向目标主机发送IP数据包来探测对方主机是否处于活跃状态。
命令语法:nmap -sn -PO 【协议编号】 【目标IP地址】
案例:nmap -sn -PO 1,6 10.10.26.55
这种形式发送的数据包内容是空的,非常容易被防火墙等安全设备检测并过滤,为了解决这个问题,可以指定数据大小添加随机生成的数据
命令语法:nmap --data-length [长度数值] [目标IP地址]
案例:nmap --data-length 66 172.16.36.6
nmap是一个非常强大的工具,以后还会持续的更新。
其实研究nmap一点要研究他的本质,在nmpa中提供了一种方法—pachket-trace选项,通过它可以观察nmap发出去那些包,收到哪些数据包,可以让你更深入的研究nmap。
使用sctp的PY选项对目标主机进行扫描
root@ubuntu1:/# nmap -sn -PY 122.114.9.2
Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 02:48 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.06 seconds
通过扫描发现该主机是不活跃的,但是真实的情况这台主机是处于活跃状态的,导致原因是目标主机不支持sctp协议。如下源主机发送的请求但是没有收到对方的回复数据包。
root@ubuntu1:/# nmap -sn -PY 122.114.9.2 --packet-trace
Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 02:59 UTC
SENT (0.0244s) SCTP 172.16.36.185:44449 > 122.114.19.242:80 ttl=48 id=25483 iplen=52
SENT (1.0255s) SCTP 172.16.36.185:44450 > 122.114.19.242:80 ttl=44 id=15676 iplen=52
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.05 seconds
使用同样的方法对内网主机进行扫描,被扫描的主机也没有安装sctp协议。但是结果却大大出乎我们的意料之外
root@ubuntu1:/# nmap -sn -PY 172.16.36.6
Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 03:02 UTC
Nmap scan report for bogon (172.16.36.6)
Host is up (0.00046s latency).
MAC Address: FA:16:3E:18:4B:2F (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
同时是没有安装sctp协议,为什么内网主机就有回复的数据包呢,可以使用—packet-trace看一下究竟是什么原因导致的。
root@ubuntu1:/# nmap -sn -PY 172.16.36.6 --packet-trace
Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 03:02 UTC
SENT (0.0272s) ARP who-has 172.16.36.6 tell 172.16.36.185
RCVD (0.0277s) ARP reply 172.16.36.6 is-at FA:16:3E:18:47:2F
Nmap scan report for bogon (172.16.36.6)
Host is up (0.00048s latency).
MAC Address: FA:16:3E:18:4B:2F (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
通过以上分析,你就更加明白nmap的原理了。
nmap不管在何种情况下都会探测是否属于统一子网环境,如果是处于统一子网环境nmap直接使用arp进行探测,因为nmap认为在局域网中arp是最为精准的。
下一次介绍nmap端口扫描
参考书籍:《诸神之眼 nmap网络安全审计技术解密》