搜索公众号:白帽子左一,领配套练手靶场,全套安全课程及工具
一、Nmap简介
Nmap是一款网络扫描和主机检测的非常有用的工具。
可以用于收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。
主要功能有:
检测活在网络上的主机(主机发现)
检测主机上开放的端口(端口发现或枚举)
检测到相应的端口(服务发现)的软件和版本
检测操作系统,硬件地址,以及软件版本
检测脆弱性的漏洞(Nmap的脚本)
下载地址:https://nmap.org/download.html
(也可文末扫码找助教领取安装包)
环境:Windows、Linux、Mac OS
二、常用命令
-A:综合性扫描
-T4:指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4
-O : 指定Nmap进行系统版本扫描
-sV: 指定让Nmap进行服务版本扫描
-p <port ranges>: 扫描指定的端口
-script <script name> : 指定扫描脚本
-Pn :不进行ping扫描
-iL 1.txt : 批量扫描1.txt中的目标地址
-PO : 使用IP协议包探测对方主机是6否开启
-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机
-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现
-e eth0:指定使用eth0网卡进行探测
-f : —mtu <val>: 指定使用分片、指定数据包的 MTU.
-b <FTP relay host>: 使用FTP bounce scan扫描方式
-g:指定发送的端口号
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)
-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态
-n : 表示不进行DNS解析;
-D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址
-R :表示总是进行DNS解析。
-F : 快速模式,仅扫描TOP 100的端口
-S <IP_Address>: 伪装成其他 IP 地址
—ttl <val>: 设置 time-to-live 时间
—badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或 IDS/IPS)
—dns-servers : 指定DNS服务器
—system-dns : 指定使用系统的DNS服务器
—traceroute : 追踪每个路由节点
—scanflags <flags>: 定制TCP包的flags
—top-ports <number> :扫描开放概率最高的number个端口
—port-ratio <ratio>: 扫描指定频率以上的端口。与上述—top-ports类似,这里以概率作为参数
—version-trace: 显示出详细的版本侦测过程信息
—osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)
—osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统
—data-length <num>: 填充随机数据让数据包长度达到 Num
—ip-options <options>: 使用指定的 IP 选项来发送数据包
—spoof-mac <mac address/prefix/vendor name> : 伪装 MAC 地址
—version-intensity <level>: 指定版本侦测强度(0-9),默认为7。
数值越高,探测出的服务越准确,但是运行时间会比较长。
—version-light: 指定使用轻量侦测方式 (intensity 2)
—version-all: 尝试使用所有的probes进行侦测 (intensity 9)
—version-trace: 显示出详细的版本侦测过程信息
三、常用扫描类型
-sn: 只进行主机发现,不进行端口扫描
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
-sO: 使用IP protocol 扫描确定目标机支持的协议类型
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况
-sP: Ping扫描 快速发现网络
-sR:PRC扫描 定位PRC,对成功扫描的机器记录
-sI: 闲置扫描 僵尸主机扫描,非常隐蔽
基本扫描
我们先尝试扫描一下社区,只进行简单的扫描,确定社区开放了哪些端口,使用-A进行扫描
nmap -A bbs.zkaq.cn
可以发现,社区开放了TCP的80端口,以及443端口。
隐蔽扫描
网络扫描的过程包括发送特殊够早的数据包给目标主机和对返回的结果进行基于某种标准的检查。从扫描结果中,我们可以知道那些主机在线,运行了哪些服务以及这些服务的版本信息等。
在一个安全的网络中,我们有可能根据需要来对抗IDS的异常行为捕捉。发送数据包的数量和速度,流量是否异常等,防火墙一般都会标记。为减少被检测到的概率,我们可以采取一些措施控制时间。
nmap控制扫描时间选项:
-T(0~5):控制扫描进度,避免被检测的最简单形式。0是最温和的,5是最激进的,只能在局域网中使用。
–max_hostgroup:将扫描的主机数量限制在每次一个。
–max_retries:一般不需要修改此选项,如果是紧急情况且不在意扫描过程中可能错过一个包含潜在漏洞的主机,可以将这个选项设为0.
max_parallelism 10:一次仅允许10个探测请求。
scan_delay 两次探测之间停顿。
SYN扫描
使用-sS选项对我们的社区发起一个完全开发的扫描。
结果如下:
从结果来看,社区仍然只开放两个端口,我们实战时要确保使用不同类型的扫描对目标网络扫描,否则可能错失一些重要信息。
NULL扫描
使用NULL扫描,对社区进行扫描,再来看看结果:
很遗憾,没有得到有效信息,我们可以猜测社区应该是安装了防火墙。
ACK扫描
在有防火墙的情况下,如果没从NULL扫描获取到什么信息的话,现在进行ACK扫描
很遗憾,仍然没有扫描到什么有效信息。看来社区防护还是做得很不错。(社区邀请码文末扫码领)
空闲扫描
为了降低被检测到的机率,我们通常需要转嫁责任,这时可以使用空闲扫描(idle scan),让一个僵尸主机承担扫描任务。
nmap.org官网上详细讲述了空闲扫描的原理,
可以在http://nmap.org/book/idlescan.html 了解空闲扫描的所有信息。
使用空闲扫描(-sI)需要注意一个问题,就是要找一台TCP序列预测成功率高的僵尸主机,这个僵尸主机必须尽可能的空闲,比如说网络打印机就是一个很好地选择,因为网络打印机不仅存在着恒定的网络资源,而且很难预测它们的TCP序列。
空闲扫描的原理:
向僵尸主机放松SYN/ACK数据包,获得带有分片ID(IPID)的RST报文。
发送使用僵尸主机IP地址的伪数据包给目标主机。
如果目标主机端口关闭,就会向僵尸主机响应RST报文。如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文,此时IPID号开始增长。
通过向僵尸主机发送另一个SYN/ACK报文已退出上述循环并检查将是主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1。
重复上述步骤直到检测完所有的端口。
寻找僵尸主机
空闲扫描的第一步就是寻找僵尸主机
我们可以通过下面这条命令(-v 详细信息,-O 系统检测,-Pn 无ping,-n 无域名解析)来获得主机的TCP序列预测率。
·# nmap -v -O -Pn -n .***.***.
idle扫描应用
使用以下命令扫描,并启动wireshark抓包。
··# nmap -p 22,23,53,80,443,8888,3960 -Pn -sI ***.***.***.***(僵尸主机IP)
***.***.***.***(目标主机IP)
使用-p启动已知TCP端口的扫描,节省时间;
通过-Pn强调不适用ping(默认是使用的),-sI启动空闲扫描,后面依次是僵尸主机和目标主机的ip地址。
四、常用命令组合
扫描一个小范围
nmap 192.168.230.120-128
root@kali:~# nmap 192.168.230.120-128
Starting Nmap 7.80 ( https://nmap.org ) at 2021-08-26 15:33 CST
Nmap scan report for 192.168.230.128
Host is up (0.0019s latency).
Not shown: 988 closed ports
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
3389/tcp open ms-wbt