“诸神之眼”——Nmap端口扫描工具使用小手册


“诸神之眼”——Nmap端口扫描工具使用小手册

在这里插入图片描述

1.Nmap介绍

1.1.Nmap简介

  1. Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的网络探测和安全审核的工具。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。
  2. Nmap作为一个网络连接端扫描软件,在网络中具有强大信息收集能力,用来扫描网上电脑开放的网络连接端,确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。它可用以评估网络系统安全,是网络管理员必用的软件之一。

1.2.Nmap四大基本功能

  1. 主机探测(Host Discovery):识别网络上的主机。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。

  2. 端口扫描(Port Scanning):枚举目标主机上的开放端口。

  3. 服务/版本检测(Version Detection):询问远程设备上的网络服务以确定应用程序名称和版本号。

  4. 操作系统检测(Operating System Detection):确定网络设备的操作系统和硬件特性。
    在这里插入图片描述

    通常情况下,这四个基本功能按顺序进行探测:首先需要进行主机发现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。
    而在四项基本功能的基础上,Nmap提供“防火墙与入侵检测系统”的规避技巧,可以综合应用到四个基本功能的各个阶段。
    另外Nmap提供强大的NSE脚本引擎功能。

1.3.Nmap优点

  1. 灵活:支持数十种不同的扫描方式,支持多种目标对象的扫描
  2. 强大:Nmap可以用于扫描互联网上大规模的计算机
  3. 可移植:支持主流操作系统:Windows/Linux/Unix/MacOS等等;源码开放,方便移植
  4. 简单:提供默认的操作能覆盖大部分功能
    5.自由:Nmap作为开源软件,在GPL License的范围内可以自由的使用
  1. 社区支持:Nmap背后有强大的社区团队支持
  2. 流行:目前Nmap已经被成千上万的安全专家列为必备的工具之一

2.Nmap安装

2.1.Windows下Nmap下载:(kali系统已自带Nmap)

  1. 首先从网站上面下载nmap的安装包:https://nmap.org/(官网)
  2. 选择下载windows 二进制的
  3. 下载回来,双击即可弹出软件的安装界面
  4. 刚打开的界面可以选择安装上哪些功能,如果没有特别的需求,默认即可
  5. 选择软件安装的位置,根据个人磁盘情况而定
  6. 继续安装并提示相关的软件依赖包的关联,一路默认即可
  7. 安装完成后的快捷方式以及提示已经完成安装
  8. 点击桌面的快捷方式Zenmap即可启动nmap安全扫描工具了。
    如有不懂可参考此网站:
    https://jingyan.baidu.com/article/5bbb5a1b1e0a7713eba179cb.html

2.2.Zenmap——Nmap的图形化界面

  1. Zenmap是用Python开发的Nmap图形化界面,通常随Nmap的安装包发布,开源免费,能够运行在不同操作系统平台上(Windows/Linux/Unix/Mac
    OS等)。Zenmap旨在为nmap提供更加简单的操作方式。

  1. 基本使用:
    a) 在Target输入目标地址或域名
    b) 在Profile选择一种扫描方式
    c) 在Command对扫描的参数进行调整
    d) 点击Scan开始扫扫描
    e) 在Nmap Output可以查看扫描结果

  2. Zenmap是Nmap的图形化工具,界面友好,使用方便,但我们还是要掌握各条命令、参数,接下来我们将在“CMD命令行”下根据Nmap四大功能仔细介绍其命令参数使用方法。
    注:在win10系统下使用Nmap,如果有人出现如下情况:

    此问题有两种可能形成原因:

    a) 没有下载winpcap驱动程序,或者没有更新到最新版本,或者驱动版本与系统不兼容
    b) Win10运行Nmap时如果弹出如下图中的弹窗,要点击否,才能运行Nmap

    此问题形成的原因:在下不才,没能整明白!欢迎各位读者留言,与我们交流讨论!

3.Nmap基本扫描方法

3.1.主机探测

3.1.1.主机探测原理

主机探测:即用于探测网络上的主机是否在线。类似于ping,发送探测包给目标主机,收到回复即说明目标主机在线。用户可以根据不同情况下选择不同方式来探测主机:可以通过发送ICMP ECHO/TIMESTAMP/NETMASK报文、CPSYN/ACK包、SCTP INIT/COOKIE-ECHO包进行主机探测。
如下图以ICMP echo方式为例:

3.1.2.主机探测用法
-sL	仅仅是显示扫描的IP数目,不会进行任何扫描
-sn	ping扫描,即主机发现
-Pn	不检测主机存活,跳过主机发现过程,视所有主机为开启
-PS/PA/PU/PY[portlist]	TCP SYN Ping/TCP ACK Ping/UDP Ping发现
-PE/PP/PM	使用ICMP echo, timestamp and netmask 请求包发现主机
-PO[prococol list]	使用IP协议包探测对方主机是否开启
-n/-R	-n表示不进行DNS解析;-R表示总是进行DNS解析。
3.1.3.使用演示
  1. Nmap -sn+目标地址(只进行主机发现,不进行端口扫描)
  2. Nmap -Pn+目标地址(跳过主机发现而进行端口扫描)

3.2.端口扫描

端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。
默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。
Nmap通过探测将端口划分为6个状态:

open	端口是开放的
closed	端口是关闭的
filtered	端口被防火墙IDS/IPS屏蔽,无法确定其状态
unfiltered	端口没有被屏蔽,但是否开放需要进一步确定
open|filtered	端口是开放的或被屏蔽
closed|filtered	端口是关闭的或被屏蔽
3.2.1.端口扫描原理
3.2.1.1.TCP connect scanning

使用TCP连接扫描,对目标主机所有端口进行完整的三次握手,如果成功建立连接则端口是开放的
TCP connect探测到端口关闭:

TCP connect探测到端口开放:

3.2.1.2.TCP SYN scanning

使用半开连接(SYN stealth)扫描,使用SYN标记位的数据包进行端口探测,收到SYN/ACK包则 端口是开放的,收到RST/ACK包则端口是关闭的。
TCP SYN探测到端口关闭:

TCP SYN探测到端口开放:

3.2.1.3.TCP ACK scanning

TCP ACK扫描使用ACK标志位数据包,若目标主机回复RST数据包,则目标端口没有被过滤(用于发现防火墙的过滤规则)。
TCP ACK探测到端口被屏蔽:

TCP ACK探测到端口未被屏蔽:

3.2.1.4.TCP FIN/Xmas/NULL scanning
  1. TCP FIN扫描只设置FIN标志位。若返回RST数据包则端口是关闭的,否则端口是打开|过滤状态。
  2. TCP XMAS扫描设置FIN、PSH、URG标志位,若返回RST数据包则端口是关闭的,否则端口是打 开|过滤状态。
  3. TCP NULL扫描不设置标志位,标志头是0,返回RST数据包则端口是关闭的,否则端口是打开|过滤状态
    TCP FIN探测到主机端口是关闭的:

    TCP FIN探测到主机端口是开放或屏蔽的:
3.2.1.5.UDP scanning

使用UDP数据包经行扫描,返回UDP报文,则端口是开放的;返回不可达则端口处于关闭或过 滤状态
UDP端口关闭:

UDP端口开放或被屏蔽:
#### 3.2.2.端口扫描用法及参数详解
TCP/UDP扫描选项:

-sS/sT/sA	指定使用 TCP SYN/Connect/ACK scans的方式来对目标主机进行扫描
-sU	使用UDP数据包经行扫描
-sN/sF/sX	指定使用TCP Null/FIN/Xmas scans秘密扫描方式来协助探测对方的TCP端口状态
-sM	TCP Maimon扫描使用FIN/ACK标识的数据包,端口开放就丢弃数据包,端口关闭则回复RST(BSD)
-sW	TCP窗口扫描,检测目标返回的RST数据包的TCP窗口字段,字段值是正值说明端口是开放状态,字段值 为0,则端口关闭
-sI	TCP Idle扫描,使用这种技术,将通过僵尸主机发送数据包与目标主机通信
-sP	Ping扫描,Nmap在扫描端口时,默认都会使用ping扫描,只有主机存活,Nmap才会继续扫描

Nmap目标端口选项:

-p	扫描指定的端口 
-F	快速扫描100个常用的端口
-r	顺序扫描,按从小到大的顺序进行端口扫描

Nmap输出选项:

-oN	标准输出为指定的文件
-oX	生成XML格式文件可以转换成HTML文件
3.2.3.端口扫描演示
  1. Nmap -sS +目标地址(使用半开连接扫描)
  2. Nmap -sT -F +目标地址(使用TCP连接快速扫描100个常用端口)
  3. Nmap -sU+目标地址 -p+端口号(使用UDP数据包扫描指定端口)

3.3.版本检测

nmap-services文件可以识别知名的2200个服务,nmap-services文件主要基于端口识别。但是这种识别是不可靠的,即使是正确的信息也不可靠,了解运行在端口上的服务版本更重要,这有助于确定服务易受攻击的类型。这就需要服务和版本探测,来探测具体的信息

3.3.1.版本检测使用原理

通过服务指纹(签名)对比进行匹配,Nmap内部包含了几千种常见服务指纹的数据库(nmap-service-probes),对目标端口进行连接通信,产生当前端口的服务指纹,再与指纹数据库对比,寻找出匹配的服务类型。
简要的介绍版本的检测原理,版本检测主要分为以下几个步骤

  1. Nmap首先根据选项执行端口扫描,然后将所有open 或者 open|filtered的TCP and/or UDP端口传递到服务扫描模块,然后这些端口被并行探测,检查端口是否在Exclude列表内。如果在Exclude列表,不进行探测。
  2. 如果端口是TCP,Nmap尝试连接它,如果连接成功,那么端口状态会由open|filtered转换成open,一旦TCP连接建立,Nmap会监听5秒钟(NULL Probes),通过欢迎信息确定他们的服务类型。
  3. 如果通过欢迎信息无法确定应用程序版本,那么nmap再尝试发送从nmap-services-probes中挑选合适的probe探测包,将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
  4. 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
3.3.2.版本检测的用法
-sV: 指定让Nmap进行版本检测,可以直接使用-A同时打开操作系统探测和版本探测
	--version-intensity <level>: 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。默认是7。
	--version-light: 指定使用轻量级模式 (intensity 2)
	--version-all: 尝试使用全端口版本检测(intensity 9)
	--version-trace: 显示出详细的版本检测过程信息。
3.3.3.版本检测演示

Nmap -sV +目标地址

3.4.系统版本侦测

系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。

3.4.1.系统侦测原理

Nmap系统侦测是基于指纹进行识别的,根据不同系统不同服务具有不同的TCP/IP协议栈来判断
具体实现方式如下:

  1. 向目标的open和closed端口分别发送经过精心设计的TCP/UDP/ICMP数据包,Nmap会根据返回的数据包生成一份系统指纹。
  2. Nmap在文件nmap-os-db文件中包含了2600多已知系统的指纹特征,将探测生成的指纹与内部指纹进行对比,查找匹配的系统。但识别不是万能的,有时无法匹配,这就导致无法正确识别。
3.4.2.系统侦测用法
-O: 启用操作系统检测,-A来同时启用操作系统检测和版本检测(存在误报)
	--osscan-limit: 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和closed的端口)。
	--osscan-guess: 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配
3.4.3.系统侦测演示

Nmap -O+目标地址

4.Nmap高级用法

4.1.Nmap脚本引擎

  1. Nmap不仅用于端口扫描、服务检测等,Nmap还有强大的脚本引擎——NSE脚本引擎(Nmap Scripting
    Engine),是Nmap最强大最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能。
  2. 在Nmap安装目录下存在Script文件夹,在Script文件夹中存在许多“.nse”后缀结尾的文本文件,即Nmap自带的脚本引擎,你也可以自己编写Nmap
    Script。Nmap Script实现许多不同的功能,其中包含漏洞扫描、漏洞利用、目录扫描等实用功能。
4.1.1.利用Nmap脚本扫描漏洞

命令格式:nmap --script=<类别参数>
脚本扫描参数:|

broadcas t:	在局域网内探查更多服务开启状况,如dhcp/dns/sql server等服务
brute	提供暴力破解方式,针对常见的应用如http/snmp等
default	使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery	获取网络更多的信息,如SMB枚举、SNMP查询等
exploit	利用已知的漏洞入侵系统
fuzzer	模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞
intrusive:	入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware:	探测目标机是否感染了病毒、开启了后门等信息 safe: 此类与intrusive相反,属于安全性脚本
version	负责增强服务与版本扫描(Version Detection)功能的脚本
vuln:	负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
4.1.2.利用Nmap脚本扫描漏洞演示

Nmap --script=vuln+目标地址

在渗透测试中,用好Nmap脚本引擎是一大助力,你可以自由地利用每个参数进行扫描和探测,其使用非常灵活。

4.2.防火墙/IDS规避

防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况。
Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)

4.2.1.规避原理
  • 分片 将可疑探测包分成多个处理,某些简单防火墙为了快速处理可能不会进行重组检查
  • IP诱骗 将真实IP地址与其他主机IP(必须存活)地址混合使用,让防火墙或IDS检查到大量不同IP数据包,降低被追踪的概率
  • IP伪装 伪装成其他主机IP地址
  • 指定源端口 某些目标主机只允许来自特定端口的数据包通过防火墙,可以指定Nmap将发送的数据包的源端口都设置特定的端口
  • 扫描延时 某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽
  • 其他技术 指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)。

更多信息 http://nmap.org/book/man-bypass-firewalls-ids.html

4.1.2.规避用法
-f; --mtu <value>	指定使用分片、指定数据包的MTU.
-D <decoy1,decoy2[,ME]>	使用诱饵隐蔽扫描
-S <IP-Address>	伪装成其他IP地址
-e <interface>	使用特定的网络接口
-g/--source-port <portnum>	使用指定源端口
--proxies url1,[url2],...	使用HTTP或者SOCKS4的代理
--data-length <num>	填充随机数据让数据包长度达到Num
--ip-options <options>	使用指定的IP选项来发送数据包
--ttl <val>	设置time-to-live时间
--spoof-mac <mac address/prefix/vendor name>	伪装MAC地址
--badsum	使用错误的checksum来发送数据包

5.结语

Nmap所提供的命令非常丰富、灵活,只需要几个参数即可进行快速扫描。学习Nmap最重要的是掌握参数的含义,每个参数都有不同的用法,参数结合起来又有不同的效果,只有掌握了这些用法,才能更高的发挥Nmap强大的功能。我们不需要完全掌握这些参数,但要掌握一些常用的参数。Nmap是每一位安全研究者必备的工具之一,掌握Nmap各模块的使用方法,对我们帮助甚大。
下面是一些参考网址:

  1. 国内的一篇讲Nmap的,写的很好,本文许多地方参考于此于此
    https://blog.csdn.net/aspirationflow/article/details/7694274?tdsourcetag=s_pctim_aiomsg
  2. Nmap 速查手册,速查命令参数:
    http://highon.coffee/docs/nmap/
  3. Nmap官网的完整手册
    https://svn.nmap.org/nmap/docs/nmap.usage.txt
    侵刪!
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值