功能架构图
检测活在网络上的主机(主机发现)
检测主机上开放的端口(端口发现或枚举)
检测到相应的端口(服务发现)的软件和版本
检测操作系统,硬件地址,以及软件版本
检测脆弱性的漏洞(Nmap的脚本)
一些常用命令
nmap 192.168.0.10-20 扫描范围IP地址
nmap 192.168.0.1/24 扫描IP所在网段
nmap -iL 绝对路径 将多个IP放入文本中进行扫描,要跟绝对路径
nmap 192.168.0.10/24 -exclude 192.168.0.11 扫描 除192.168.0.11之外的其他IP
nmap 192.168.0.10 -p 21,22 扫描指定端口
nmap 192.168.0.10 --top-ports 1000 扫描钱一千个端口
nmap --traceroute 192.168.0.10 对目标地址进行路由跟踪
扫描选项
******
-sT 当不能进行SYN扫描时,TCP连接扫描是默认扫描类型。
-sS 此标志是SYN扫描,是扫描时默认选项,相对隐蔽的扫描类型,不完成TCP三次握手,只发送SYN包。
-sU UDP扫描,向每个目标端口发送UDP数据包来工作。
-sV 版本扫描,探测目标端口正在运行的特定应用程序或服务的版本。
-O 探测目标主机操作系统
******
-Pn 不进行ping主机,假设目标已启动。跳过主机发现。
-PB 默认探测,扫描80,443向目标发送ICMP协议
-Pe 使用ICMP协议来探测目标
-PP 使用ICMP时间戳请求
*****
-sC 使用默认脚本对目标进行扫描,相当于--script = default
--script = vuln 扫描常见漏洞
nmap --script=auth 进行弱口令扫描
-----------------------------------------------------------------------------------------------------------------------------------
主机发现原理
主机发现发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的
用法
-sn: Ping Scan 只进行主机发现,不进行端口扫描。
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
比较常用的使用的是-sn,表示只单独进行主机发现过程;-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。
端口扫描
端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。
默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。
Nmap通过探测将端口划分为6个状态:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。
端口扫描原理
1、TCP SYN scanning
通常被称作半开放扫描(Half-open scanning)。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)。
因为该方式仅发送SYN包对目标主机的特定端口,但不建立的完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
2、TCP connect scanning
tcp全连接。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标机上留下记录信息,不够隐蔽。所以,TCP connect是TCP SYN无法使用才考虑选择的方式。
3、TCP ACK scanning
向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。
该方式只能用于确定防火墙是否屏蔽某个端口
,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。
4、UDP scanning
向目标主机的UDP端口发送探测包,如果收到回复“ICMP port unreachable”就说明该端口是关闭的;如果没有收到回复,那说明UDP端口可能是开放的或屏蔽的。因此,通过反向排除法的方式来断定哪些UDP端口是可能出于开放状态。
确定端口状况
只列出端口情况 nmap默认发送一个ARP的PING数据包,来探测目标主机1-10000范围内所开放的所有端口
nmap targethost
完整全面的扫描
nmap –T4 –A –v targethost
其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4
版本侦测原理
版本侦测主要分为以下几个步骤:
1、首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
2、如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
3、如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
4、如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
5、如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
6、如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。
OS侦测原理
Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。
具体实现方式如下:
1、Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。
2、分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。
3、将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。
OS侦测用法
OS侦测的用法简单
-O: 指定Nmap进行OS侦测。
–osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。
–osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。
资料:
https://www.e-learn.cn/content/qita/2645559
https://blog.csdn.net/qq_34398519/article/details/89055991
绕过防火墙的的扫描方式:
https://blog.csdn.net/qq_29277155/article/details/51175015