Nmap渗透测试必备的工具,主要用于列举网络主机清单,监控主机或服务运行情况,探测目标主机是否在线,端口开放情况,探测运行的服务类型及其版本信息。,这里我就汇总一下关于Nmap的大多数常用功能以及用法。
Nmap包含四项基本功能:
1.主机发现(Host Discovery)
2.端口扫描(Port Scanning)
3.版本探测(Version Detection)
4.操作系统探测(Operating System Detection)
这四项功能之间存在着依赖关系,首先需要进行主机发现,随后确定端口状态,然后确定端口上运行的具体应用程序和版本信息,然后可以进行操作系统的侦探,Nmap提供防火墙和IDS的规避技巧,可以综合应用四个基本功能,另外Nmap还提供了强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。
Nmap的基本参数:
代码语言:javascript复制nmap -iflist: 查看本地主机的接口信息和路由信息
-A:选定用于使用进攻性方式扫描
-T4:指定扫描过程使用的时序
一共有6个级别(0-5),级别越高,扫描速度越快,但是也容易被防火墙或者IDS检测并屏蔽。
在网络通讯状况比较好的情况下推荐使用T4
-oX test.html:将扫描结果生成 test.html文件,如果中断,则结果也打不开
-oA test.xml:将结果生成 test.xml文件,如果中断,结果也可以保存
-oG test.txt:将扫描结果生成 test.txt文件
-p <port ranges>:扫描指定的端口
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式
来对目标主机进行扫描
-sP:用ping扫描判断主机是否存活,只有主机存活,nmap才会继续扫描,一般最好不加
因为有的主机会禁止ping
-PI : 设置这个选项,让nmap使用真正的ping(ICMP echo请求)
来扫描目标主机是否正在运行。
-iL 1.txt : 批量扫描1.txt中的目标地址
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
-sO: 使用IP protocol 扫描确定目标机支持的协议类型
-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机
-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans
秘密扫描方式来协助探测对方的TCP端口状态
-f : --mtu <val>: 指定使用分片、指定数据包的 MTU.
-b <FTP relay host>: 使用FTP bounce scan扫描方式
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描
以让nmap的扫描不易被对方防火墙检测到)
-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态
-D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入
自己的 IP 地址
-S <IP_Address>: 伪装成其他 IP 地址
--ttl <val>: 设置 time-to-live 时间
--badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃
如果收到回复,说明回复来自防火墙或 IDS/IPS)
--dns-servers : 指定DNS服务器
--system-dns : 指定使用系统的DNS服务器
--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: 显示出详细的版本侦测过程信息
nmap 192.168.1.0/24 -exclude 192.168.1.10
# 扫描除192.168.1.0外的该网段的其他地址
nmap 192.168.1.0/24 -excludefile f:/1.txt
# 扫描除给定文件中的地址以外的其他地址
nmap -sF -T4 192.168.1.0 #探测防火墙状态
1.探测目标主机是否在线
主机发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明主机是开启的。Nmap支持十多种不同的主机探测方式,用户可以在不同的条件下灵活选用不同的方式来探测目标主机,主机发现的常用参数如下:
代码语言:javascript复制-sn: Ping Scan只进行主机扫描,不进行端口扫描
-PE/PP/PM:使用ICMP echo,ICMP timestamp,ICMP netmask请求包发现主机
-PS/PA/PU/PY[portlist]:使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现
-sL:List Scan列表扫描,仅指定的目标的IP列举出来,不进行主机发现
-Pn:将所有指定的主机视作开启的,跳过主机发现的过程
-PO[portpcollist]:使用IP协议包探测对方主机是否开启
-n/-R:-n表示不进行DNS解析;-R表示总是进行DNS解析
--dns-servsers <serv1[,serv2],...>:指定DNS服务器
--system-dns:指定使用系统的DNS服务器
1.1当探测公网IP时
代码语言:javascript复制nmap -sn
Nmap会发送四种不同类型的数据包来探测目标主机是否在线
代码语言:javascript复制1.ICMP echo request
2.a TCP SYN packet to port 443(https)
3.a TCP ACK packet to port 80(http)
4.an ICMP timestamp request
例如:namp -sn 101.xxx.xxx.xxx **声明:这是我自己的服务器,并未对任何他人/企业的服务器进行扫。
依次发送四个报文探测目标主机是否开启,只要收到其中一个包的回复,那就证明目标主机开启,使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。 通常主机发下并不单独使用,而只是作为端口扫描,版本探测,OS探测的先行步骤,而在某些特殊应用(例如确定大型局域网内活动主机的数量)可能会单独专门使用主机发现来完成。
nmap -PE/-PP/-PM 1.-PE的ICMP Echo扫描简单来说是通过向目标服务器发送ICMP Echo数据包来探测目测主机是否存活,但由于许多主机的防火墙会禁止这些报文,所以说仅仅ICMP扫描往往是不够的。 2.-PP的ICMP time stamp时间戳扫描在大多数防火墙不当时可能会得到回复,可以以此方式来判断主机是否存活,倘若目标主机在线,该命令还会探测其他开放的端口以及运行的服务。
代码语言:javascript复制20/tcp open ftp-data
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
24/tcp open priv-mail
25/tcp open smtp
26/tcp open rsftp
42/tcp open nameserver
43/tcp open whois
.....
3.-PM的ICMP address maskPing地址掩码扫描会试图用备选的ICMP等级Ping指定主机,通常有不错的效果。
1.2当探测内网IP时
代码语言:javascript复制nmap -sn
使用该命令进行内网IP探测时,这个命令会发送ARP请求包探测目标IP是否在线,如果有ARP包回复,则说明在线,此命令可以探测目标主机是否在线,如果在线,还可以得到其他MAC地址,但是不会探测其开放的端口。
代码语言:javascript复制nmap -PE/-PP/-PM
使用Nmap探测内网IP主机的开放情况,使用的是ARP请求报文,如果有ARP回复报文,说明主机在线,-PP/-PE/-PM命令探测到主机在线后,还会探测主机的端口开启状态以及运行的服务。 探测该主机所在网段内所有主机的在线情况,使用的是:
代码语言:javascript复制nmap -sn 网段/子网掩码
nmap -sn 10.96.10.0/24
或者
nmap -sn 10.96.10.100-200
探测10.96.10.0这个网段内主机的在线情况,返回在线主机的IP和MAC地址。
2.端口扫描及其原理
端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/IP端口的开放情况。 默认情况下,Nmap会扫描1000个最有可能开放的TCP端口 Nmap通过探测将端口分为6个状态:
代码语言:javascript复制1.open:端口开放
2.closed:端口关闭
3.filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态
4.unfiltered:端口没有被屏蔽,但是是否开放需要进一步确定
5.open|filtered:端口是开放的或者被屏蔽,Nmap识别不了
6.closed|unfiltered:端口是关闭的还是被屏蔽,Nmap确定不了
TCP SYN 扫描:-sS
这是Nmap默认的扫描方式,通常被称作半开放扫描,该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么可以判断为端口是开放的,如果收到RST包,说明端口是关闭的,如果没有收到回复,那么可以判断该端口被屏蔽了,因为该方式仅仅是发送SYN包对目标主机的特定窗口,但不建立完整的TCP连接,所以相对比较隐蔽,效率也高,适用范围广。
TCP connect扫描:-sT
TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无连接,说明该端口关闭。该方法扫描速度比较慢,由于建立了TCP连接会在主机上留下记录信息,不够隐蔽,所以这是半连接扫描无法使用的时候才能用的方式。
TCP ACK 扫描:-sA
向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被没有被目标主机屏蔽,没有收到RST包,说明被屏蔽了。**该方式只适用于确定防火墙是否屏蔽了某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的情况。
TCP FIN/Xmas/NULL 扫描:-sN/sF/sX
这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN 包或Xmas tree包或NULL包,如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包。
UDP扫描:-sU
UDP扫描用于判断UDP端口扫描的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的,如果没有收到回复,那说明该UDP端口是开放的或者被屏蔽了。因此可以通过反向排除法来判断哪些UDP端口是可能处于开放的状态。
其他方式
除了以上几种常用的方式外,Nmap还支持多种其他的探测方式。例如使用SCTP INIT/Cookie-ECHO方式是来探测SCTP的端口开放情况;使用IP protocol方式来探测目标主机支持的协议类型(tcp/udp/icmp/sctp等等);使用idle scan方式借助僵尸主机来扫描目标主机,以达到隐蔽自己的目的;或者使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐蔽自己的目的。
3.端口扫描用法
1.扫描方式选项
代码语言:javascript复制-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式
来对目标主机进行扫描。
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans
秘密扫描方式来协助探测对方的TCP端口状态。
--scanflags <flags>: 定制TCP包的flags。
-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机
(前提需要找到合适的zombie host)
代码语言:javascript复制-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。
-b <FTP relay host>: 使用FTP bounce scan扫描方式
2.端口参数与扫描顺序
代码语言:javascript复制-p <port ranges>: 扫描指定的端口
实例: -p 22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)
-F: Fast mode – 快速模式,仅扫描TOP 100的端口
-r: 不进行端口随机打乱的操作
如无该参数,nmap会将要扫描的端口以随机方式扫描,让nmap的扫描不易被对方防火墙检测到
--top-ports <number>:扫描开放概率最高的number个端口
nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。
以此排列出最有可能开放端口的列表
具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)
--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似
这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。
显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件
3.1简单扫描
代码语言:javascript复制nmap 212.xxx.xxx.xxx
这个命令会按照nmap-services文件中指定的端口进行扫描,然后列出目标主机开放的端口号,以及端口上的服务,在一次简单的扫描中,Nmap会默认TCP SYN扫描方式进行扫描,仅判断目标端口是否开放,若开放,则列出端口对应的服务名称。
测试端口的开放过程:确定主机在线之后,Nmap会按照文件的端口号发送TCP SYN报文给主机相应的端口,如果主机回复一个包含TCP SYN,ACK的报文,则说明该端口开放,Nmap会再回复一个TCP RST清除连接复位。
3.2全面扫描
代码语言:javascript复制namp -A 212.xxx.xxx.xxx
这个命令不仅列出目标主机开放的端口,对应的服务,还较为详细的列出服务的版本,其支持的命令,到达目标主机的每一跳路由等信息。在进行完全扫描时,扫描机与主机之间存在大量的数据流交互,扫描时长随之增加。完全扫描不仅仅是TCP协议上的通信交互,还有ICMP,HTTP,NBSS,TDS,POP等协议的交互,这些交互是因为在完全扫描开始时首先对目标主机的开放端口进行了确认,之后再根据不同对应不同服务器进行服务器版本信息探测,账户信息探测等。
1.探测主机是否在线 2.探测端口是否开启 3.探测端口服务具体版本 4.探测主机系统
代码语言:javascript复制nmap -T4 -A -v xx.xx.xx.xx
1.-A 选项用户使用进攻性方式扫描 2.-T4 指定扫描过程使用的程序,有6个级别,级别越高扫描越快,但是容易被WAF或者IDS屏蔽 3.-v表示显示冗余信息,在扫描过程中显示扫描细节
全面扫描的时候可以配合wireshark数据流量包的分析,确定了哪些端口的协议开启了之后,可以进行更加深入的检测。
3.3探测指定端口的开放状态
在默认情况下,Nmap对端口的扫描方式是从小到大的,或者是参照nmap-services中列出的端口进行扫描。 -p:选定可以指定一个端口或者一个端口范围,若既想扫描TCP端口又想扫描UDP端口,则需要在端口上面加上T或U来分别代表TCP和UDP协议。注意,既要扫描TCP又要扫描UDP,则需要指定-sU及至少一个TCP扫描类型(-sS半连接扫描)(-sT全连接扫描)等。如果没有给定协议限定符,端口号会被加到所有协议类别。
代码语言:javascript复制nmap -p 20-445 101.xxx.xxx.xxx
扫描目标主机20-445端口的开放情况
从上面的图可以看到,若只是简单的指定一个端口的范围。Nmap会默认以TCP SYN方式扫描目标端口,若即想扫描目标TCP端口又想扫描UDP端口,则需要指定扫描方式及端口。
代码语言:javascript复制nmap -sS -sU -p T:80,U:445 101.xxx.xxx.xxx
TCP SYN 半连接方式扫描80 UDP方式扫描445
3.4探测N个最有可能开放的端口
代码语言:javascript复制nmap -sS -sU -T4 --top-ports 100.xxx.xxx.xxx
参数-sS表示使用TCP SYN方式扫描TCP端口;-sU表示扫描UDP端口;--top-ports 100表示扫描最有可能开放的100个端口(TCP,UDP分别100个端口)
4.版本探测
版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。
Nmap提供的版本侦测具有如下的优点:
1.高速并行地进行套接字操作,实现一组高效的探测匹配定义语法。 2.尽可能地确定应用名字与版本名字。 3.支持TCP/UDP协议,支持文本格式与二进制格式。 4.支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。 5.如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。 6.如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号。 7.支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。 8.通用平台枚举功能(CPE) 9.广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。
4.1版本侦测原理
1.首先检查open和open|filtered状态的端口是否在排除端口列表内,如果在排除列表则将端口剔除 2.如果是TCP端口则建立TCP连接,通常6秒(namp-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进一步探测具体服务。
4.2版本侦测用法
比如目标主机把SSH的22号端口改成了2222端口,那么如果使用普通扫描只会发现2222端口是开启的,并不能知道2222号端口上运行的程序,通过加参数 -sV 进行版本扫描,可以探测到目标主机上2222端口运行的是SSH服务
代码语言:javascript复制--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。
数值越高,探测出的服务越准确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息
例: nmap -sV 10.96.10.246
5.OS侦测
操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。 Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。
5.1 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中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。
5.2 OS侦测用法
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口) --osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统
代码语言:javascript复制nmap -O 101.xxx.xxx.xxx
6.Nmap高级用法
6.1防火墙/IDS规避
防火墙与IDS规避为用于绕开防火墙与IDS的检测与屏蔽,以便能够更加详细地发现目标主机的状况。nmap提供了多种规避技巧通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)和时序变换(Timing Change)。
6.2 分片
将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。
6.3 IP诱骗(IP decoys)
在进行扫描时,将真实IP地址在和其他主机的IP地址混合使用(其他主机需要在线,否则目标主机将回复大量数据包到不存在的数主机,从而实质构成了DOS攻击),以此让目标主机的防火墙或IDS追踪大量的不同IP地址的数据包,降低其追查到自身的概率。但是,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实的IP地址。
6.4 指定源端口
某些目标主机只允许来自特定端口的数据包通过防火墙。例如,FTP服务器的配置为允许源端口为21号的TCP包通过防火墙与FTP服务器通信,但是源端口为其他的数据包被屏蔽。所以,在此类情况下,可以指定数据包的源端口。
6.5 扫描延时
某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率。所以,我们可以降低发包的频率和发包延时以此降低目标主机的审查强度。
6.6 其他技术
nmap还提供其他多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址,使用错误检查。
-f; --mtu <val>: 指定使用分片、指定数据包的 MTU. -D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址。 -S <IP_Address>: 伪装成其他 IP 地址 -g/--source-port <portnum>: 使用指定源端口 --data-length <num>: 填充随机数据让数据包长度达到 Num。 --ip-options <options>: 使用指定的 IP 选项来发送数据包。 --ttl <val>: 设置 time-to-live 时间。 --spoof-mac <mac address/prefix/vendor name>: 伪装 MAC 地址 --badsum: 使用错误的 checksum 来发送数据包 (正常情况下,该类数据包被抛弃,如果收到回复,说明回复来组防火墙 IDS/IPS)
代码语言:javascript复制nmap -F -Pn -D 10.96.10.100,10.96.10.110,ME -e eth0
-g 5555 202.207.236.3
-F参数表示快速扫描100个端口
-Pn不进行ping扫描
-D表示使用ip诱骗方式掩饰真实ip使用的是10.96.10.100和10.96.10.110
ME表示自己真实的ip,这里是10.96.10.234
-e 参数指定eth0网卡发送数据包
-g参数指定发送的端口号
6.7 NSE脚本使用
NSE脚本引擎(Nmap Scripting Engine)是Nmap最强大,最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能。
nmap的脚本库的路径:/usr/share/nmap/scripts 或 /xx/nmap/scripts/ ,该目录下的文件都是nse脚本。
NSE使用Lua脚本语言,并且默认提供了丰富的脚本库,目前已经包含了14个类别的350多个脚本。NSE的设计初衷主要考虑以下几个方面
1.网络发现(Network Discovery) 2.更加复杂的版本侦测(例如 skype 软件) 3.漏洞侦测(Vulnerability Detection) 4.后门侦测(Backdoor Detection) 5.漏洞利用(Vulnerability Exploitation)
Nmap脚本主要分为以下几类:
1.Auth:负责处理鉴权证书(绕过鉴权)的脚本 2.Broadcast:在局域网内探查更多服务去开启情况,如DHCP/DNS等 3.Brute:针对常见的应用提供暴力破解方式,如HTTP/HTTPS 4.Default:使用-sC或-A选项扫描时默认的脚本,提供基本的脚本扫描能力 5.Discovery:对网络进行更多的信息搜集,如SMB枚举,SNMP查询等 6.Dos:用于进行拒绝服务攻击 7.Exploit:利用已知的漏洞入侵系统 8.External:利用第三方的数据库或资源 。如,进行whois解析 9.Fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞 10.Intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽 11.Malware:探测目标是否感染了病毒,开启后门等 12.Safe:与Intrusive相反,属于安全性脚本 13.Version:负责增强服务与版本扫描功能的脚本 14.Vuln:负责检查目标机是否有常见漏洞,如MS08-067
代码语言:javascript复制nmap -script smb-vuln-ms17-010 192.168.10.34
# 可以探测该主机是否存在ms17_010漏洞
nmap --max-parallelism 800 --script http-slowloris scanme.nmap.org
# 可以探测该主机是否存在http拒绝服务攻击漏洞
nmap -script http-iis-short-name-brute 192.168.10.34
# 探测是否存在IIS短文件名漏洞
nmap -script mysql-empty-password 192.168.10.34
# 验证mysql匿名访问
nmap -p 443 -script ssl-ccs-injection 192.168.10.34
# 验证是否存在openssl CCS注入漏洞
--script=http-waf-detect # 验证主机是否存在WAF
--script=http-waf-fingerprint # 验证主机是否存在WAF
nmap --script-brute 192.168.1.1
# nmap可对数据库、SMB、SNMP等进行简单密码的暴力破解
nmap --script-vuln 192.168.1.1
# 扫描是否有常见漏洞
--script-updatedb
# 更新脚本数据库
--script-help
# 输入脚本对应的使用方法