三、基础知识
3.1 什么是Nmap
Nmap — 网络探测工具和安全/端口扫描器
Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工 具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。Nmap以 新颖的方式使用原始IP报文来发现网络上有哪些主机,哪些主机提供什么服务(应用程序名 和版本),哪些服务运行在什么操作系统(包括版本信息),
它们使用什么类型的报文过滤器/ 防火墙,以及一堆其它功能。
虽然Nmap通常用于安全审核, 许多系统管理员和网络管理 员也用它来做一些日常的工作,比如查看整个网络的信息,管理服务升级计划,以及监视 主机和服务的运行。
Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使 用的选项。 “所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和 状态。
状态可能是
open(开放的),
filtered(被过滤的),
closed(关闭的),
或者unfiltered(未 被过滤的)。
Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。 filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,
Nmap无 法得知 它是 open(开放的) 还是 closed(关闭的)。
closed(关闭的) 端口没有应用程序在它上 面监听,但是他们随时可能开放。
当端口对Nmap的探测做出响应,但是Nmap无法确定它 们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的) 如果Nmap报告状态组 合 open|filtered 和 closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一 个状态。
当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行IP协议 扫描时 (sO),
Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。 除了所感兴趣的端口表,
Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系 统猜测,设备类型,和MAC地址。
3.2 Nmap主要功能
主机探测 端口扫描 版本检测
系统检测 支持探测脚本的编写(lua语言)
(1)首先用户需要进行主机发现,找出活动的主机。然后,确定活动主机上端口状况。
(2)根据端口扫描,以确定端口上具体运行的应用程序与版本信息。 (3)对版本信息侦测后,对操作系统进行侦测。 在这四项基本功能的基础上,Nmap提供防火墙与IDS(IntrusionDetection System,入侵 检测系统)的规避技巧,可以综合应用到四个基本功能的各个阶段;另外Nmap提供强大的 NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。
3.3 Nmap扫描类型
ping扫描:用来检查是否与网络连通 | 端口扫描 |
TCP SYN扫描:判断通信端口状态
UDP扫描:用于扫描对方端口上是否有程序在运行 | 操作系统识别 | 隐蔽扫描
SYN扫描和UDP扫描的区别
代码语言:javascript复制:https://blog.csdn.net/changjiangbuxi/article/details/21295175
3.4 扫描基础知识
当目标主机上使用了防火墙、路由器、代理服务或其它安全设备时,使用Nmap扫描结果可能会存 在一些偏差。或者当扫描的远程目标主机不在本地网络内时,也有可能会出现误导信息。
在使用Nmap实施扫描时,一些选项需要提升权限。
在Unix和Linux系统中,必须使用root登录或者 使用sudo命令执行Nmap命令。
3.5 法律边界问题
在实施网络扫描时,需要考虑一些法律边界问题。如下所示:
在扫描互联网服务提供商网络时(如政府或秘密服务器网站),如果没有被允许的话,不要进行扫 描。否则,会惹上法律麻烦。 全面扫描某些主机时,可能会导致主机崩溃、停机或数据丢失等不良结果。所以,在扫描关键任务 时要小心谨慎。
3.6 端口
端口范围为:0~65535 按端口号可分为3大类:
(1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常 这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
(2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有 许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024 左右开始。
(3)动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为 服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从 32768开始。
四、Nmap扫描
4.1 Nmap扫描单个主机
4.4 Nmap扫描随机目标
Nmap工具提供了一个iR选项,可以用来选择随机的互联网主机来扫描。
Nmap工具将会随机的生 成指定数量的目标进行扫描。其中,语法格式如下所示:
代码语言:javascript复制nmap iR [主机数量]
一般情况下,不建议用户实施随机扫描。除非,你是在做一个研究项目。否则,经常实施随机扫描 可能会给自己的互联网服务提供商带来麻烦。
4.5 Nmap IP地址范围扫描
用户在指定扫描范围时,可以通过IP地址或子网的方式来实现。使用IP地址指定扫描范围的方法语 法格式如下所示:
代码语言:javascript复制nmap [IP地址范围]
在以上语法中,IP地址范围之间使用短连字符()。
4,6 Nmap 整个子网扫描
Nmap也可以使用CIDR(无类别域间路由,Classless InterDomain Routing)格式来扫描整个子 网。CIDR将多个IP网络结合在一起,使用一种无类别的域际路由选择算法,可以减少由核心路由器 运载的路由选择信息的数量。其中,语法格式如下所示:
代码语言:javascript复制nmap [CIDR格式的网络地址]
以上语法中的CIDR是由网络地址和子网掩码两部分组成,并且中间使用斜杠(/)分割。 使用Nmap扫描192.168.1.1/24整个子网中的所有主机。执行命令如下所示:
4.7 Nmap扫描排除扫描目标
当用户指定一个扫描范围时(如局域网),在该范围内可能会包括自己的主机,或者是自己搭建的 一些服务等。这时,用户为了安全及节约时间,可能不希望扫描这些主机。此时,用户就可以使 用–exclude命令将这些主机排除。其中,排除单个目标的语法格式如下所示:
代码语言:javascript复制nmap [目标] –exclude [目标]
扫描192.168.1.1/24网络内除192.168.1.101以外的所有主机。执行命令如下所示:
代码语言:javascript复制root@localhost:~# nmap 192.168.1.1/24 --exclude 192.168.1.101
用户使用–exclude选项,可以指定排除单个主机、范围或者整个网络块(使用CIDR格式)。
例 如,扫描192.168.1.1/24网络内,
除192.168.1.100192.168.1.103之外的所有主机。
则执行命令如 下所示:
代码语言:javascript复制root@localhost:~# nmap 192.168.1.1/24 --exclude 192.168.1.100-103
4.8 Nmap扫描排除列表中的目标
当用户排除扫描的目标很多时,也可以将这些目标主机的IP地址写入到一个文本文件中。然后,使 用–excludefile选项来指定排除扫描的目标。其中,排除扫描列表中目标的语法格式如下所示:
代码语言:javascript复制nmap [目标] –excludefile [目标列表]
使用Nmap扫描192.168.1.0/24网络内主机,但是排除list.txt文件列表中指定的目标。具体操作步骤 如下所示:
(1)创建list.txt文件,并写入要排除扫描目标的IP地址。如下所示:
代码语言:javascript复制root@localhost:~#vi list.txt
(2)实施扫描。执行命令如下所示:
代码语言:javascript复制root@localhost:~# nmap 192.168.1.0/24 --excludefile list.txt
4.9 Nmap扫描实施全面扫描
在使用Nmap工具实施扫描时,使用不同的选项,则扫描结果不同。用户可以使用不同的选项,单 独扫描目标主机上的端口、应用程序版本或操作系统类型等。但是,大部分人又不太喜欢记这些选 项。这时候,用户只需要记一个选项A即可。该选项可以对目标主机实施全面扫描,扫描结果中包 括各种类型的信息。其中,实施全面扫描的语法格式如下所示:
代码语言:javascript复制nmap A [目标]
【示例212】使用Nmap工具对目标主机192.168.1.105实施全面扫描。则执行命令如下所示:
从以上输出的信息,可以明显看出比前面例子扫描结果更详细。在以上输出信息中,可以看到目标 主机上开启的端口、服务器、版本、操作系统版本、内核、系统类型等。
五、Nmap命令
5.1 Nmap主机发现
详解 :https://blog.csdn.net/github_35068711/article/details/51530422
通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊 应用(例如确定大型局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。
无ping扫描:常用于防火墙禁止ping的情况,可穿透防火墙
TCP SYN Ping扫描(默认80号端口,nmap通过SYN/ACK和RST的响应来判断,防火墙可能会丢弃RST 包)
TCP ACK Ping扫描(很多防火墙会封锁SYN报文,此时可以使用TCP ACK ping扫描)
ARP Ping扫描(一般用于扫描局域网) 禁止反向域名解析(永远不对目标ip地址作反向域名解析,单纯扫描一段ip时,使用该选项可以减少扫 描时间) 路由跟踪(需要root权限)
SCTP INIT Ping扫描(流控制传输协议,向目标发送INIT包,需要root权限)
sL (列表扫描) 列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机,不发送任何报文到目标主 机。默认情况下,Nmap仍然对主机进行反向域名解析以获取它们的名字。简单的主机名能给出的 有用信息常常令人惊讶。
sP (Ping扫描) 该选项告诉Nmap仅仅进行ping扫描 (主机发现),然后打印出对扫描做出响应的那些主机。
P0 (无ping) 该选项完全跳过Nmap发现阶段。 通常Nmap在进行高强度的扫描时用它确定正在运行的机器。 默 认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描,版本探测,或者操作系统探 测。用P0禁止主机发现会使Nmap对每一个指定的目标IP地址进行所要求的扫描。P0的第二个字 符是数字0而不是字母O。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表, 而 是继续执行所要求的功能,就好像每个IP都是活动的。
n (不用域名解析) 告诉Nmap 永不对它发现的活动IP地址进行反向域名解析。
R (为所有目标解析域名) 告诉Nmap永远对目标IP地址作反向域名解析。一般只有当发现机器正在运行时才进行这项操作。
systemdns (使用系统域名解析器) 默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器来解析域名。
为了提高性能,许多请求 (一般几十个 ) 并发执行。如果您希望使用系统自带的解析器,就指定该选项 (通过 getnameinfo()调用一次解析一个IP)。除非Nmap的DNS代码有bug–如果是这样,请联系我们。一 般不使用该选项,因为它慢多了。系统解析器总是用于IPv6扫描。
实例 探测局域网内活动主机
扫描局域网192.168.1.100192.168.1.120范围内哪些IP的主机是活动的。 命令如下:
代码语言:javascript复制 nmap –sn 192.168.1.100120
5.2 端口扫描
详解 :https://blog.csdn.net/github_35068711/article/details/51530422
open 表示服务正在监听这个端口上的连接
close 表示已经收到探测,但是这个端口没有服务运行
filterd 表示没有收到探测信息,无法建立连接,同时表明探针可能被一些过滤器(防火墙) 终止了
unfiltered 表示端口对探测做出相应,但是nmap无法确定它们是关闭还是开发。
open/filtered 端口被过滤或者开放的
nmap无法做出判断。
close/filtered 端口被过滤或者是关闭,nmap无法做判断
时序选项:
T0(偏执的):非常慢的扫描,用于IDS逃避
T1(鬼祟的):缓慢的扫描,用于IDS逃避
T2(文雅的):降低速度以降低对带宽的消耗,一般不同
T3(普通的):默认,根据目标的反应自动调整时间
T4(野蛮的):快速扫描,常用,需要在很好的网络环境下进行扫描,请求可能会淹没目标
T5(疯狂的):极速扫描,以牺牲准确度来提升扫描速度 nmap T4 172.20.62.150
指定端口扫描:
代码语言:javascript复制 nmap p 80 172.20.62.150 nmap p 801000 172.20.62.150
TCP SYN扫描:又称为半开放扫描,常见扫描方式,扫描速度较快 由于未进行TCP连接,比较隐蔽,很难背防火墙或管理员发现 nmap sS 172.20.62.150(需要root权限)
隐蔽扫描 sN是Null扫描 sF是Fin扫描(发送FIN包) sX是Xmas扫描(将数据包的FIN/PSH/URG都标记为1)
TCP ACK扫描 致命缺点:无法确定端口是否开放还是被过滤
5.3 服务和版本探测
sV 开放版本探测,可以直接使用A同时打开操作系统探测和版本探测
–versionintensity “level” 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数 值越高,服务越有可能被正确识别。默认是7
–versionlight 打开轻量级模式,为–versionintensity 2的别名
–versionall 尝试所有探测,为–versionintensity 9的别名
–versiontrace 显示出详细的版本侦测过程信息
实例:对主机192.168.1.100进行版本侦测。
5.4 OS识别
O 启用操作系统检测,A来同时启用操作系统检测和版本检测
–osscanlimit 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和 closed的端口)
–osscanguess 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能 地提供最相近的匹配,Nmap默认进行这种匹配
实例:指定O选项后先进行主机发现与端口扫描,根据扫描到端口来进行进一步的OS侦测。
5.5 防火墙/IDS躲避和哄骗
f; –mtu value 指定使用分片、指定数据包的MTU.
D decoy1,decoy2,ME 使用诱饵隐蔽扫描
S IPADDRESS 源地址欺骗
e interface 使用指定的接口
g/ –sourceport PROTNUM 使用指定源端口
–proxies url1,[url2],… 使用HTTP或者SOCKS4的代理
–datalength NUM 填充随机数据让数据包长度达到NUM
–ipoptions OPTIONS 使用指定的IP选项来发送数据包
–ttl VALUE 设置IP timetolive域
–spoofmac ADDR/PREFIX/VEBDOR MAC地址伪装
–badsum 使用错误的checksum来发送数据包
防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发 现目标主机的状况。
Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)。
规避原理
1、分片(Fragmentation) 将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了 加快处理速度可能不会进行重组检查,以此避开其检查。
2、 IP诱骗(IP decoys) 在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量 数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或 IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通 过统计分析仍然可以追踪出扫描者真实IP地址。
3 、 IP伪装(IP Spoofing) 顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其 他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局 域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用 idle scan或匿名代理(如TOR)等网络技术。
4、 指定源端口 某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21 号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类 情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。
5、 扫描延时 某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率 (例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该 情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。
实例:
代码语言:javascript复制nmap v F Pn D192.168.1.106,192.168.1.100,ME e eth0 g 3355 192.168.1.100
其中,F表示快速扫描100个端口;Pn表示不进行Ping扫描;D表示使用IP诱骗方式掩盖 自己真实IP(其中ME表示自己IP);e eth0表示使用eth0网卡发送该数据包;g 3355表 示自己的源端口使用3355;192.168.1.100是被扫描的目标IP地址
5.6 Nmap 输出
oN 将标准输出直接写入指定的文件
oX 输出xml文件
oS 将所有的输出都改为大写
oG 输出便于通过bash或者perl处理的格式,非xml oA BASENAME 可将扫描结果以标准格式、XML格式和Grep格式一次性输出 v 提高输出信息的详细度 d level 设置debug级别,最高是9 –reason 显示端口处于带确认状态的原因 –open 只输出端口状态为open的端口 –packettrace 显示所有发送或者接收到的数据包
–iflist 显示路由信息和接口,便于调试
–logerrors 把日志等级为errors/warings的日志输出
–appendoutput 追加到指定的文件
–resume FILENAME 恢复已停止的扫描
–stylesheet PATH/URL 设置XSL样式表,转换XML输出
–webxml 从namp.org得到XML的样式
–nosytlesheet 忽略XML声明的XSL样式表
5.7 其他nmap选项
6 开启IPv6 A OS识别,版本探测,脚本扫描和traceroute
–datedir DIRNAME 说明用户Nmap数据文件位置
–sendeth / –sendip 使用原以太网帧发送/在原IP层发送
–privileged 假定用户具有全部权限
–unprovoleged 假定用户不具有全部权限,创建原始套接字需要root权限 V 打印版本信息 h 输出帮助
组合查询:
精准查询:nmap T4 A v
UDP 强烈扫描: nmap sS sU T4 A v 强烈扫描所有tcp端口:nmap p 165535 T4 A v
强烈扫描不ping :nmap T4 A v Pn
ping 扫描:nmap sn
快速扫描:nmap T4 F
快速路由追踪:nmap sn traceroute