一.前言
上面我们已经能够通过多种渠道来获取ip地址和域名信息了,最后还差端口的扫描和分析,接下来我们 就通过Nmap进行端口的扫描。
Nmap (网络映射器)是Gordon Lyon最初编写的一种安全扫描器,用于发现计算机网络上的主机和服 务,从而创建网络的"映射"。为了实现其目标,Nmap将特定数据包发送到目标主机,然后分析响 应.NMAP强大的网络工具,用于枚举和测试网络,功能灵活强大,支持多种目标,大量计算机的同时扫 描。并且开源,相关帮助文档十分详细,由于其具有强大的扫描机探测功能,已被成千上万安全专家使 用,Nmap参数众多,难以一一记忆。masscan:https://github.com/robertdavidgraham/masscan
功能介绍:
http://blog.sina.com.cn/s/blog_811d9fdd0101ey07.html 功能介绍http://www.cnblogs.com/c4isr/archive/2012/12/07/2807491.html 10种扫描方式解释
NMAP的功能包括
主机发现 - 识别网络上的主机。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。
端口扫描 - 枚举目标主机上的开放端口。
版本检测 - 询问远程设备上的网络服务以确定应用程序名称和版本号。
OS检测 - 确定网络设备的操作系统和硬件特性。
可与脚本进行脚本交互 - 使用Nmap脚本引擎(NSE)和Lua编程语言。
漏洞检测
NMAP可以提供有关目标的更多信息,包括反向DNS名称,设备类型和MAC地址.Nmap的典型用途:
通过识别可以进行的或通过它的网络连接来审计设备或防火墙的安全性。
识别目标主机上的开放端口以准备审计。
网络库存,网络映射,维护和资产管理。
通过识别新服务器来审计网络的安全性。
为网络上的主机生成流量。
nmap语法
Nmap <扫描选项> <扫描目标>
二.主机发现
主机发现的原理与Ping命令类似,但是手段不限于ping,发送探测包到目标主机,如果收到回复,那么 说明目标主机是开启的。Nmap支持十多种不同的主机探测方式,比如发送ICMP 的ECHO/TIMESTAMP/NETMASK报文、发送TCP的SYN/ACK包、发送SCTP的 INIT/COOKIE-ECHO包,用 户可以在不同的条件下灵活选用不同的方式来探测目标机。有些时候ping是无法检测出对方主机是否存 活的,因为对方主机可以通过防火墙禁用ping,那么你就ping不同它。 比如windows的防火墙,一旦打 开就不能ping通了。能ping通表示肯定在线,ping不通就说不准了。telnet也可以判断某个主机的端口 是否开放了,比如 telnet 192.168.2.111 22 、 telnet 192.168.2.111 445 。telnet是一种应用层 协议,建立在tcp\ip协议之上。icmp协议是网络层协议。SCTP是传输层协议,兼顾了udp和tcp的特点。
基本用法:
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
-sn: Ping Scan 只进行主机发现,不进行端口扫描。 用的多。不仅仅发送ping探测包还会自动发送其他 类型的数据包进行探测
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。直接探测端口,通过端口探测结果判断主机是否 存活
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
# nmap -PS 192.168.2.0/24 #不指定端口的话会自动扫描常用端口(1000个),速度会慢一些。
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。
-PO[protocollist]: 使用IP协议包探测对方主机是否开启。
-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
--dns-servers <serv1[,serv2],...>: 指定DNS服务器。
--system-dns: 指定使用系统的DNS服务器
--traceroute: 追踪每个路由节点
参考图:
使用演示:
nmap -sn 192.168.31.1-100 扫描局域网192.168.31.1-192.168.31.100范围内哪些IP的主机是活 动的。
nmap –sn 152.136.221.1-200 扫描外网152.136.221.1-200范围内哪些ip的主机是活动的
三.端口扫描
端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。Nmap通过探测将端口划分为6个状态:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙或IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。
端口扫描方面非常强大,提供了很多的探测方式:
TCP ICMP协议探测
TCP SYN scanning
TCP connect scanning
TCP ACK scanning
TCP FIN/Xmas/NULL scanning
UDP scanning
其他方式
tcp扫描方式分类
开放扫描(全连接扫描):会产生大量的审计数据,容易被对方发现,但其可靠性高,会建立连接;例如:TCP Connect类。 效率高
隐蔽扫描:能有效的避免入侵检测系统和防火墙的检测,但扫描使数据包容易被丢弃从而产生错误的探测信 息;例如:TCP FIN类。 效率低
半开放(或者说半连接)扫描:不建立连接,隐蔽性和可靠性介于前两者之间。例如:TCP SYN类。
tcp的11种状态转换:https://blog.csdn.net/kakaka666/article/details/126355623
基本用法:
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机 进行扫描。
# nmap -sS 192.168.2.108
# nmap -sS -p500-2000 192.168.2.108
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
--scanflags <flags>: 定制TCP包的flags。
-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。
-b <FTP relay host>: 使用FTP bounce scan扫描方式
常见参数描述:
扫描类型 |
描述 |
总结 |
---|---|---|
|
TCP SYN 扫描 |
比较隐蔽,效率高,适用广泛 |
|
TCP Connect 扫描 |
由于建立完整的TCP连接会在靶机上留下记录,不隐蔽 |
|
TCP ACK 扫描 |
只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况 |
|
TCP FIN 扫描 |
到达关闭的端口,数据包会被丢弃,并且返回一个RST数据包,到达打开的端口则没返回 |
|
UDP扫描 |
收到回复说明端口关闭,没有收到回复则UDP端口可能开放 |
其他参数:
-p <port ranges> 只扫描指定端口eg:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
-F 扫描比默认扫描更少的端口
--top-posts <number> 扫描<number>数量的最常见的端口
使用演示
在此,我们以局域网中的主机192.168.0.22为例。
nmap -sS -sU -T4 -top-ports 300 192.168.0.22 内网
nmap -sS -sU -T4 -top-ports 300 152.136.221.160 外网
参数
-sS表示使用TCP SYN方式扫描TCP端口;
-sU表示扫描UDP端口;
-T4表示时间级别配置4级;
--top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)
-T参数说明:
-T参数,优化时间控制选项的功能很强大也很有效但是有些用户会被迷惑。此外往往选择合适参数的时间超过 了所需优化的扫描时间。因此Nmap提供了一些简单的方法使用6个时间模板使用时采用-T选项及数字(0~5) 或名称。模板名称有paranoid(0)、sneaky(1)、polite(2)、normal(3)、aggressive(4)、insane(5)
paranoid、sneaky模式用于IDS躲避,IDS是入侵检测系统(intrusion detection system,简称"IDS")是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备polite模式降低了扫描速度及使用更少的带宽和目标主机资源
normal为默认模式因此-T3实际上未作任何优化
aggressive模式假设用户具有合适及可靠的网络从而加速扫描
insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性
C段端口扫描
nmap -p 80,443,8000,8080 -Pn 152.136.221.120/24
-Pn: 指定ip地址段
找到漏洞列表再去搜索对应的漏洞详细使用过程。
其实很多服务的默认端口都是可以改的,比如ssh的22端口,mysql的3306端口等都是可以改的,原因 就是为了安全。
四.版本侦测
简要的介绍版本的侦测原理。版本侦测主要分为以下几个步骤
1. 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
2. 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmapservices-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机 发送的"WelcomeBanner"信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的 签名进行对比。查找对应应用程序的名字与版本信息。
3. 如果通过"Welcome Banner"无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmapservices-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测 都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
4. 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
5. 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
6. 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。
基本用法
-sV: 指定让Nmap进行版本侦测
--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准 确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息。
使用实例
nmap –sV 152.136.221.161
五.OS侦测
Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现 并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的 差异来判断操作系统的类型的。
具体实现方式如下:
Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为 进行指纹对比的样本库。分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。将探测生成的指纹与nmap-os-db中指纹进行对比,查 找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。
基本用法
-O: 指定Nmap进行OS侦测。
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。
--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在 的操作系统。
使用演示
nmap -O 152.136.221.161
六.漏洞扫描
nmap的漏洞库其实很小,没有多少能扫出来的漏洞,但是它也提供了漏洞扫描功能,我们一般用专业 的漏洞扫描工具来扫描。所以简单说一下nmap的漏洞扫描功能,知道即可。
基本用法
nmap 目标(ip地址) --script=auth,vuln # 常见的一些漏洞扫描
使用演示
nmap 192.168.0.15 --script=auth,vuln
七.总结
本章讲解了一下信息收集nmap的用法,希望大家点赞关注加收藏