Nmap扫描指南

Nmap扫描原理、脚本引擎介绍及实用指南...

0x01 端口扫描

1. 端口状态

以下为Nmap对端口状态的划分及说明

状态 描述
open(开放的) 应用程序正在该端口接收TCP连接或者UDP报文,有应用程序在监听这个端口,可以被访问
closed(关闭的) 关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听
filtered(被过滤的) 由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放
unfiltered(未被过滤的) 端口可访问,但Nmap无法准确判断端口是否开放,ACK扫描中出现
open/filtered(开放或者被过滤的) 无法确定端口是开放还是被过滤的,如开放的端口不响应;UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类
closed/filtered(关闭或者被过滤的) 用于Nmap不能确定端口是关闭的还是被过滤的,只可能出现在IPID Idle扫描中

2. 扫描方式

TPC报文表头

Refer: wikipedia/Transmission_Control_Protocol

a. TCP 全连接扫描

扫描原理

1
TCP Connect扫描又称为全连接扫描,客户端与服务器建立 TCP 连接要进行一次三次握手,如果进行了一次成功的三次握手,则说明端口开放
1
客户端会发送一个带有SYN标识和端口号的TCP数据包给服务器,如果服务器这个端口是开放的,则会接受这个连接并返回一个带有SYN和ACK标识的数据包给客户端,随后客户端会发送带有ACK和RST标识的数据包给服务点,此时客户端与服务器建立了连接

1
当客户端发送一个带有 SYN 标识和端口号的 TCP 数据包给服务器后,如果服务器端返回一个带 RST 标识的数据包,则说明端口处于关闭状态

b. TCP SYN扫描

扫描原理

1
TCP SYN扫描又称半开式扫描,该过程不会和服务端建立完整的连接;SYN扫描是直接发RST,而TCP全连接扫描是发ACK和RST
1
客户端会发送一个带有SYN标识和端口号的TCP数据包给服务器,如果服务器这个端口是开放的,则会接受这个连接并返回一个带有SYN和ACK标识的数据包给客户端,随后客户端会返回带有RST标识的数据包而不是返回一个带有ACK和RST标识的数据包

1
如果目标端口处于关闭状态,则服务端会返回一个RST标识的数据包

c. TCP ACK扫描

扫描原理

1
ACK扫描返回两种状态: unfiltered/filtered;当发送给对方一个含有 ACK 表示的TCP报文的时候,都返回含有RST标志的报文,使用TCP ACK扫描来确定端口是否开放或者关闭;但可以利用它来扫描防火墙的配置,来发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的
1
向服务端发送一个带有 ACK 标识的数据包,如果收到带有 RST 标识的响应,则说明服务端没有过滤,不存在状态防火墙

1
端口不响应,或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的);服务器REJECT掉数据包,客户端会有个ICMP包返回,如果是直接DROP掉,就会什么也不会返回

d. TCP Null扫描

扫描原理

1
2
3
4
5
6
7
在空扫描中,客户端发出的 TCP 数据包仅仅只会包含端口号而不会有其他任何的标识信息。

1)如果目标端口是开放的则不会回复任何信息

2)如果服务器返回了一个 RST(或者RST+ACK) 数据包,则说明目标端口是关闭的

3)如果返回 ICMP 错误类型3且代码为1,2,3,9,10或13的数据包,则说明端口被服务器过滤了
e. TCP Window扫描

扫描原理

1
2
3
4
5
TCP 窗口扫描的流程同 ACK 扫描类似,同样是客户端向服务器发送一个带有 ACK 标识和端口号的 TCP 数据包,这种扫描能够用于发现目标服务器端口的状态。在 ACK 扫描中返回 RST 表明没有被过滤,但在窗口扫描中,当收到返回的 RST 数据包后,它会检查窗口大小的值

1) 如果窗口大小的值是个非零值,则说明目标端口是开放的

2) 如果返回的 RST 数据包中的窗口大小为0,则说明目标端口是关闭的
f. TCP FIN扫描

扫描原理

1
2
3
4
5
6
7
FIN 扫描会向服务器发送带有 FIN 标识和端口号的 TCP 数据包。

1)如果没有服务器端回应则说明端口开放

2)如果服务器返回一个 RST 数据包,则说明目标端口是关闭的

3)如果服务器返回了一个 ICMP 数据包,其中包含 ICMP 目标不可达错误类型3以及 ICMP 代码为1,2,3,9,10或13,则说明目标端口被过滤了无法确定端口状态
g. TCP Xmas扫描

扫描原理

1
2
3
4
5
6
7
在发送的数据包中设置PSH(PUSH推送,数据包立刻发送),FIN(结束会话),URG(紧急)标志位

1)如果目标端口是开放的则不会回复任何信息

2)如果目标端口关闭则会返回一个RST+ACK的数据包

3)如果服务器返回了一个 ICMP 数据包,其中包含 ICMP 目标不可达错误类型3以及 ICMP 状态码为1,2,3,9,10或13,则说明目标端口被过滤了无法确定是否处于开放状态
h. UDP扫描

TCP/UDP 对比

1
2
3
4
5
TCP 是面向连接的协议,而UDP则是无连接的协议。

面向连接的协议会先在客户端和服务器之间建立通信信道,然后才会开始传输数据。如果客户端和服务器之间没有建立通信信道,则不会有任何产生任何通信数据。

无连接的协议则不会事先建立客户端和服务器之间的通信信道,只要客户端到服务器存在可用信道,就会假设目标是可达的然后向对方发送数据

扫描原理

1
2
3
4
5
6
7
8
9
客户端会向服务器发送一个带有端口号的 UDP 数据包

1)如果服务器回复了 UDP 数据包,则目标端口是开放的

2)如果服务器返回了一个 ICMP 目标不可达的错误和代码3,则意味着目标端口处于关闭状态

3)如果服务器返回一个 ICMP 错误类型3且代码为1,2,9,10或13的数据包,则说明目标端口被服务器过滤了

4)如果服务器没有任何相应客户端的 UDP 请求,则可以断定目标端口可能是开放或被过滤的,无法判断端口的最终状态

3. 端口渗透

总计一些常用端口的渗透用途

端口 服务 渗透用途
21 ftp/tftp/vsftpd文件传输协议 爆破/嗅探/溢出/后门
22 ssh远程连接 爆破/OpenSSH漏洞
23 Telnet远程连接 爆破/嗅探
25 SMTP邮件服务 邮件伪造
53 DNS域名解析系统 DNS区域传输/劫持/缓存投毒/欺骗; 利用DNS隧道技术刺透防火墙
67/68 dhcp服务 劫持/欺骗
69 tftp(简单文件传输协议,无认证) 尝试下载目标重要配置文件
110 pop3 爆破/嗅探
137/139 Samba服务 爆破/未授权访问/远程代码执行
143 Imap协议 爆破
161 SNMP协议 爆破/搜集目标内网信息
389 Ldap目录访问协议 注入/未授权访问/弱口令/匿名访问
445 smb ms17-010/端口溢出
512/513/514 Linux Rexec服务 爆破/Rlogin登陆
873 Rsync服务 文件上传/匿名访问
1080 socket 爆破/内网渗透
1099 JAVA RMI 反序列化远程命令执行漏洞
1194 openvpn 获取vpn账号,进内网
1352 Lotus domino邮件服务 爆破/弱口令/信息泄漏
1433 mssql 爆破/注入攻击/提权/sa弱口令
1500 ispmanager主机控制面板 弱口令
1521 oracle 注入攻击/TNS爆破/弹shell
1723 pptp 爆破/获取vpn账号,进内网
2049 Nfs服务 配置不当
2082,2083 cpanel主机管理面板登录 弱口令
2181 zookeeper服务 未授权访问
2375 docker remote api 未授权访问
2601,2604 zebra路由 默认密码zerbra
3128 squid代理服务 弱口令
3306 mysql 爆破/注入/拒绝服务/提取
3389 Rdp远程桌面连接 爆破/shift后门/ms12-020
3690 svn服务 svn泄露/未授权访问
4848 GlassFish控制台 爆破/认证绕过
5000 sybase/DB2数据库 爆破/注入
5432 postgresql 爆破/注入/缓冲区溢出
5632 pcanywhere服务 拒绝服务/代码执行
5900,5901,5902 vnc 弱口令爆破
5984 CouchDB 未授权访问导致任意指令执行
6379 Redis数据库 未授权访问/爆破
6443 Kubernetes API Server 未授权访问
7001/7002 weblogic java反序列化/控制台弱口令/控制台上传webshell/SSRF
80-89,443 http/https web应用漏洞/OpenSSL心脏滴血
8000 JDWP 远程命令执行漏洞
8069 zabbix服务 远程命令执行/注入
8080-8089 Jboss/Tomcat/Jenkins/Resin/Jetty 控制台弱口令/反序列化/远程文件读取
8083/8086 influxDB 未授权访问
8161 ActiveMQ 弱口令/任意文件写入/反序列化
9000 fastcgi 远程命令执行
9080-9081,9090 Websphere控制台 java反序列化/弱口令
9200/9300 elasticsearch 未授权访问/远程代码执行
11211 memcached 未授权访问
27017/27018 mongodb 未授权访问/爆破
50000 SAP 远程代码执行
50070,50030 hadoop 默认端口未授权访问

Refer: http://www.91ri.org/15441.html

0x02 Nmap基础

1. 参数总结

功能 参数 描述
目标选取 -iL inputfilename (从列表中输入)

-iR hostnum (随机选择目标)

–exclude <host1[,host2][,host3],…> (排除主机/网络)

–excludefile excludefile (排除文件中的列表)
指定目标范围
主机发现 a. -sL (列表扫描)

b. -sP (Ping扫描)

c. -P0 (无ping)

d. -PS [portlist] (TCP SYN Ping)

e. -PA [portlist] (TCP ACK Ping)

f. -PU [portlist] (UDP Ping)

g. -PE; -PP; -PM (ICMP Ping Types)

h. -PR (ARP Ping)

i. -n (不用域名解析)

j. -R (为所有目标解析域名)

k. –system-dns (使用系统域名解析器)
a. 列出指定网络上的每台主机, 不发送任何报文到目标主机

b. 默认情况下, 发送一个ICMP回声请求和一个TCP报文到80端口

c. 禁止主机发现,使Nmap对每一个指定的目标IP地址进行扫描

d. 发送一个设置了SYN标志位的空TCP报文,适用于突破有状态的规则来封锁非预期的报文的防火墙

e. 设置TCP的ACK标志位,适用于突破无状态防火墙规则

f. 可穿越只过滤TCP的防火墙和过滤器,默认端口31338

g. -PE选项打开该回声请求功能,时间戳和地址掩码查询可以分别用-PP和-PM选项发送

h. ARP扫描比基于IP的扫描更快更可靠,常用于扫描一个以太局域网,不想要ARP扫描,指定–send-ip

i. 不对发现的活动IP地址进行反向域名解析,提升探测速度

j. 对目标IP地址作反向域名解析,当发现机器正在运行时进行这项操作

k. 执行较慢,多用于IPv6扫描
端口扫描 a. -sS (TCP SYN扫描)

b. -sT (TCP connect()扫描)

c. -sU (UDP扫描)

d. -sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)

e. -sA (TCP ACK扫描)

f. -sW (TCP窗口扫描)

g. -sM (TCP Maimon扫描)

h. –scanflags (定制的TCP扫描)

i. -sI <zombie host[:probeport]> (Idlescan)

j. -sO (IP协议扫描)

k. -b [ftp relay host] (FTP弹跳扫描)
a. 半开放扫描,发送一个SYN报文,然后等待响应, SYN/ACK表示端口在监听 (开放),RST (复位)表示没有监听者

b. 全连接扫描,通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,连接易被记录

c. 常用UDP服务:DNS,SNMP,和DHCP (注册的端口是53,161/162,和67/68);UDP扫描发送空的UDP报头到每个目标端口,若服务响应一个UDP报文,证明该端口是open(开放的);扫描较慢

d. 如果收到一个RST报文,该端口被认为是 closed(关闭的),没有响应则意味着端口是open/filtered(开放或者被过滤的);收到ICMP不可到达错误(类型 3,代号 1,2,3,9,10,或者13),该端口就被标记为被过滤的

e. 设置ACK标志位, open(开放的)和closed(关闭的) 端口都会返回RST报文,标记为 unfiltered(未被过滤的);不响应的端口或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)

f. 根据TCP窗口值是正数还是0,分别把端口标记为open或者 closed

g. 探测报文是FIN/ACK,其余与Null,FIN,以及Xmas扫描完全一样

h. 通过指定任意TCP标志位来设计自己的扫描

i. 允许对目标进行真正的TCP端口盲扫描,无报文从所用真实IP地址发送到目标

j. 确定目标机支持哪些IP协议 (TCP,ICMP,IGMP,等等)

k. 请求FTP服务器轮流发送一个文件到目标主机上的所感兴趣的端口,错误消息会描述端口是开放还是关闭的
服务/版本探测 a. -sV (版本探测)

b. –allports (不为版本探测排除任何端口)

c. –version-intensity [intensity] (设置版本扫描强度)

d. –version-light (打开轻量级模式)

e. –version-all (尝试每个探测)

f. –version-trace (跟踪版本扫描活动)

g. -sR (RPC扫描)
a. 可以用-A同时打开操作系统探测和版本探测

b. 指定–allports扫描所有端口,默认情况下,Nmap版本探测会跳过9100TCP端口(打印机服务)

c. 进行版本扫描(-sV)时,nmap发送一系列探测报文 ,每个报文都被赋予一个1到9之间的值,数值越高, 服务越有可能被正确识别;强度值必须在0和9之间,默认是7

d. –version-intensity 2的别名,使版本扫描快许多,但它识别服务的可能性也略微小一点

e. –version-intensity 9的别名, 保证对每个端口尝试每个探测报文

f. 打印出详细的关于正在进行的扫描的调试信息,是用–packet-trace所得到的信息的子集

g. 对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图 确定它们是否RPC端口,被-sV版本探测包括
操作系统探测 a. -O (启用操作系统检测)

b. –osscan-limit (针对指定的目标进行操作系统检测)

c. –osscan-guess; –fuzzy (推测操作系统检测结果)
a. 可以使用-A来同时启用操作系统检测和版本检测

b. 只对满足条件的主机进行操作系统检测,可以节约时间,特别在使用-P0扫描多个主机时

c. 当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配
时间/性能 a. –min-hostgroup [milliseconds]; –max-hostgroup [milliseconds] (调整并行扫描组的大小)

b. –min-parallelism [milliseconds]; –max-parallelism [milliseconds] (调整探测报文的并行度)

c. –min-rtt-timeout [milliseconds], –max-rtt-timeout [milliseconds], –initial-rtt-timeout [milliseconds] (调整探测报文超时)

d. –host-timeout [milliseconds] (放弃低速目标主机)

e. –scan-delay [milliseconds]; –max-scan-delay [milliseconds] (调整探测报文的时间间隔)

f. -T [Paranoid/Sneaky/Polite/Normal/Aggressive/Insane] (设置时间模板)
a. 将多个目标IP地址空间分成组,然后在同一时间对一个组进行扫描;主要用途是说明一个最小组的大小,使得整个扫描更加快速,通常选择256来扫描C类网段

b. 控制用于主机组的探测报文数量,可用于端口扫描和主机发现;–max-parallelism选项通常设为1,以防止Nmap在同一时间 向主机发送多个探测报文

c. 如果所有的主机都在本地网络,对于–max-rtt-timeout值来说,100毫秒比较合适。如果存在路由,使用ICMP ping工具ping主机,查看大约10个包的最大往返时间,然后将 –initial-rtt-timeout设成这个时间的2倍,–max-rtt-timeout 可设成这个时间值的3倍或4倍。不管ping的时间是多少,最大的rtt值不得小于100ms, 不能超过1000ms

d. 使用 –host-timeout选项来说明等待的时间(毫秒)

e. 用于控制针对一个主机发送探测报文的等待时间(毫秒)

f. Nmap使用6个时间模板,采用-T选项及数字(0 - 5) 或模板名称paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)优化扫描时间;默认模式为Normal(-T3),-T4选项较常用,可适当加速扫描
隐蔽扫描 a. -f (报文分段); –mtu (使用指定的MTU)

b. -D <decoy1 [,decoy2][,ME],…> (使用诱饵隐蔽扫描)

c. -S [IP_Address] (源地址哄骗)

d. -e [interface] (使用指定的接口)

e. –source-port [portnumber]; -g [portnumber] (源端口哄骗)

–spoof-mac [mac address,prefix,or vendor name] (MAC地址哄骗)
a. -f选项要求扫描时(包挺ping扫描)使用 小的IP包分段,使用–mtu选项可 以自定义偏移的大小,使用时不需要-f,偏移量必须 是8的倍数

b. 使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵,使用ME选项说明。如果在第6个位置或更后的位置使用ME选项,一些常用端口扫描检测器(如Solar Designer’s excellent scanlogd)就不会报告这个真实IP

c. -S选项并说明所需发送包的接口IP地址

d. 告诉Nmap使用哪个接口发送和接收报文

e. -g和–source-port选项从指定端口发送数据

在发送原以太网帧时使用指定的MAC地址,这个选项隐含了 –send-eth选项,以保证Nmap真正发送以太网包
输出 a. -oN [filespec] (标准输出)

b. -oX [filespec] (XML输出)

c. –append-output (在输出文件中添加)

d. –resume [filename] (继续中断的扫描)

e. –stylesheet [path or URL] (设置XSL样式表,转换XML输出)
a. 将标准输出直接写入指定的文件

b. 要求XML输出直接写入指定的文件

c. 保留现有内容,将结果添加在现 有文件后面,-oN选项有效

d. 标准扫描 (-oN)或Grep扫描(-oG)日志被保留,使用选项 –resume并说明标准/Grep扫描输出文件,不允许使用其它参数,Nmap会解析输出文件并使用原来的格式输出

e. Nmap提从了XSL样式表nmap.xsl,用于查看或转换XML输出至HTML
细节信息 a. -v (提高输出信息的详细度)

b. -d [level] (提高或设置调试级别)

c. –packet-trace (跟踪发送和接收的报文)

d. –iflist (列举接口和路由)
a. 此选项使用两次,会提供更详细的信息

b. 使用细节选项(-v)时,可启用命令行参数 (-d),多次使用可提高调试级别

c. 要求Nmap打印发送和接收的每个报文的摘要,通常用于调试;为避免输出过多的行,可以限制扫描的端口数,如-p20-30;如果只需进行版本检测,使用–version-trace

d. 输出Nmap检测到的接口列表和系统路由,用于调试路由问题或设备描述失误

2. 端口选项

1
默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services 文件中列出的更高的端口在扫描
选项 描述
-p [port ranges] (只扫描指定的端口) 指定想扫描的端口,覆盖默认值; -p U:53,111,137,T:21-25,80,139,8080:将扫描UDP 端口53,111,和137,同时扫描列出的TCP端口
-F (快速 (有限的端口) 扫描) nmap-services 文件中(对于-sO,是协议文件)指定您想要扫描的端口
-r (不要按随机顺序扫描端口) 默认情况下,Nmap按随机顺序扫描端口,可以指定-r来顺序端口扫描

3. 基本用法

全面扫描目标主机的所有信息

1
$ nmap -A  -v 192.168.1.233

扫描目标机器详细服务

1
$ nmap -sV -sT -Pn --open -v 192.168.1.233

探测目标操作系统类型

1
$ namp -O -v 192.168.0.233

扫描指定的常用端口

1
$ namp -p U:53,111,137,T:21-25,80,139,8080 192.168.1.233

内网arp扫描,探测内网存活主机

1
$ nmap -sn -PR 192.168.1.0/24

快速扫描整个C段

1
$ nmap -T5 --open 192.168.1.0/24

观察扫描时的详细发包过程

1
$ nmap --packet-trace  192.168.1.0/24

扫描目标机器服务banner信息

1
$ nmap -sT -Pn --open -v banner.nse 192.168.1.233

常用组合语法

1
$ nmap --open -p port -Pn -v -sT -sV --script script_name ip/domain/cidr

0x03 脚本引擎

1. 脚本分类

类别 描述
auth 负责处理鉴权证书(绕开鉴权)的脚本
broadcast 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute 提供暴力破解方式,针对常见的应用如http/snmp等
default 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos 用于进行拒绝服务攻击
exploit 利用已知的漏洞入侵系统
external 利用第三方的数据库或资源,例如进行whois解析
fuzze 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware 探测目标机是否感染了病毒、开启了后门等信息
safe 此类与intrusive相反,属于安全性脚本
version 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln 负责检查目标机是否有常见的漏洞(Vulnerability)

2. 脚本选项

选项 描述
-sC/–script=default 使用默认的脚本进行扫描
–script= 使用某个脚本进行扫描
–script-args=x=x,y=y 为脚本提供参数
–script-args-file=filename 使用文件来为脚本提供参数
–script-trace 显示脚本执行过程中发送与接收的数据
–script-updatedb 更新脚本数据库
–script-help=[Lua scripts] 显示脚本的帮助信息

0x04 实用脚本

1. FTP扫描脚本

1
$ nmap -p 21 --script ftp-bounce.nse -v 192.168.1.233
脚本 描述
ftp-anon.nse 检查目标ftp是否允许匿名登录
ftp-bounce.nse 检查目标ftp是否允许使用弹跳法进行端口扫描
ftp-brute.nse ftp爆破脚本
ftp-libopie 检查FTP是否存在CVE-2010-1938 (OPIE off-by-one 堆栈溢出)漏洞
ftp-vuln-cve2010-4221 ProFTPD 1.3.3c之前的netio.c文件中的pr_netio_telnet_gets函数中存在多个栈溢出

2. SSH扫描脚本

1
$ nmap -p 22 --script ssh-brute.nse -v 192.168.1.233
脚本 描述
ssh-brute.nse SSH爆破脚本
ssh-publickey-acceptance.nse 公钥认证缺陷扫描
ssh-run.nse SSH远程命令执行验证
sshv1.nse 检查是否存在sshv1低版本漏洞

3. Telnet扫描脚本

1
$ nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst,telnet-brute.timeout=8s -v 192.168.1.0/24
脚本 描述
telnet-brute.nse telnet爆破脚本

4. SMTP扫描脚本

1
$ nmap -p  25 --script smtp-brute.nse 192.168.1.233
脚本 描述
smtp-brute.nse SMTP爆破脚本
smtp-enum-users 枚举目标smtp服务器的邮件用户名,需目标要存在此错误配置
smtp-vuln-cve2010-4344 Exim 4.70之前版本中的string.c文件中的string_vformat函数中存在堆溢出
smtp-vuln-cve2011-1720 Postfix 2.5.13之前版本,2.6.10之前的2.6.x版本,2.7.4之前的2.7.x版本和2.8.3之前的2.8.x版本,存在溢出
smtp-vuln-cve2011-1764 Exim “dkim_exim_verify_finish()” 存在格式字符串漏洞

5. POP3扫描脚本

1
$ nmap -p 110 --script pop3-brute.nse -v 192.168.1.233
脚本 描述
pop3-brute pop简单弱口令爆破脚本

6. IMAP扫描脚本

1
$ nmap -p 143,993 --script imap-brute.nse -v 192.168.1.233
脚本 描述
imap-brute imap简单弱口令爆破

7. DNS利用脚本

1
$ nmap -p 53 --script dns-zone-transfer.nse --script-args dns-zone-transfer.domain=target.org -v 192.168.1.233
脚本 描述
dns-brute.nse 尝试通过暴力猜测常见子域来枚举DNS主机名
dns-fuzz.nse 对DNS服务器发起DNS模糊攻击
dns-random-srcport.nse 检查DNS服务器是否存在可预测的端口递归漏洞(CVE-2008-1447)
dns-zone-transfer 检查目标ns服务器是否允许传送

8. SNMP扫描脚本

1
$ nmap -sU --script snmp-brute --script-args snmp-brute.communitiesdb=user.txt 192.168.1.0/24
脚本 描述
snmp-brute SNMP暴力破解

9. LDAP扫描脚本

1
$ nmap -p 389 --script ldap-brute --script-args ldap.base='"cn=users,dc=cqure,dc=net"' 192.168.1.0/24
脚本 描述
ldap-brute 尝试强行进行LDAP认证爆破
ldap-search 尝试执行LDAP搜索并返回所有匹配项

10. Web利用脚本

脚本 描述 实例
xmpp-brute.nse xmpp爆破 $ nmap -p 5222 –script xmpp-brute.nse 192.168.1.0/24
http-iis-short-name-brute.nse 短文件扫描 $ nmap -p80 –script http-iis-short-name-brute.nse 192.168.1.0/24
http-shellshock.nse bash远程执行 $ nmap -sV -p- –script http-shellshock –script-args uri=/cgi-bin/bin,cmd=ls 192.168.1.0/24
http-svn-info.nse 探测目标svn $ nmap –script http-svn-info 192.168.1.0/24
http-wordpress-brute.nse wordpress爆破 $ nmap -p80 -sV –script http-wordpress-brute –script-args ‘userdb=users.txt,passdb=passwds.txt,http-wordpress-brute.hostname=domain.com,http-wordpress-brute.threads=3,brute.firstonly=true’ 192.168.1.0/24
http-backup-finder.nse 扫描目标网站备份 $ nmap -p80 –script=http-backup-finder 192.168.1.0/24
http-vuln-cve2015-1635.nse iis6.0远程代码执行 $ nmap -sV –script http-vuln-cve* –script-args uri=’/anotheruri/‘ 192.168.1.0/24

11. 数据库利用脚本

脚本 描述 实例
informix-brute.nse informix爆破脚本 $ nmap -p 9088 –script informix-brute.nse 192.168.1.233
mysql-empty-password.nse mysql 扫描root空密码 $ nmap -p 3306 –script mysql-empty-password.nse -v 192.168.1.233
mysql-brute.nse mysql root弱口令简单爆破 $ nmap -p 3306 –script mysql-brute.nse -v 192.168.1.233
mysql-dump-hashes.nse 导出mysql中所有用户的hash $ nmap -p 3306 –script mysql-dump-hashes –script-args=’username=root,password=root’ 192.168.1.233
mysql-vuln-cve2012-2122.nse Mysql身份认证漏洞[MariaDB and MySQL 5.1.61,5.2.11, 5.3.5, 5.5.22],利用条件有些苛刻 [需要目标的mysql是自己源码编译安装] $ nmap -p 3306 –script mysql-vuln-cve2012-2122.nse -v 192.168.1.233
ms-sql-info.nse 扫描C段mssql $ nmap -p 1433 –script ms-sql-info.nse –script-args mssql.instance-port=1433 -v 192.168.1.0/24
ms-sql-empty-password.nse 扫描mssql sa空密码 $ nmap -p 1433 –script ms-sql-empty-password.nse -v 192.168.1.0/24
ms-sql-brute.nse sa弱口令爆破 $ nmap -p 1433 –script ms-sql-brute.nse -v 192.168.1.0/24
ms-sql-xp-cmdshell.nse 利用xp_cmdshell,远程执行系统命令 $ nmap -p 1433 –script ms-sql-xp-cmdshell –script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd=”net user test test /add” 192.168.1.0/24
ms-sql-dump-hashes.nse 导出mssql中所有的数据库用户及密码hash $ nmap -p 1433 –script ms-sql-dump-hashes -v 192.168.1.0/24
pgsql-brute.nse 尝试爆破postgresql $ nmap -p 5432 –script pgsql-brute -v 192.168.1.0/24
oracle-brute-stealth.nse 尝试爆破oracle $ nmap –script oracle-brute-stealth -p 1521 –script-args oracle-brute-stealth.sid=ORCL -v 192.168.1.0/24
oracle-brute.nse Oracle数据库爆破 $ nmap –script oracle-brute -p 1521 –script-args oracle-brute.sid=ORCL -v 192.168.1.0/24
mongodb-brute.nse 尝试爆破mongdb $ nmap -p 27017 –script mongodb-brute 192.168.1.0/24
redis-brute.nse redis爆破 $ nmap -p 6379 –script redis-brute.nse 192.168.1.0/24

12. VPN利用脚本

脚本 描述 实例
pptp-version.nse 识别目标pptp版本 $ nmap -p 1723 –script pptp-version.nse 192.168.1.0/24

13. SMB利用脚本

SMB远程执行漏洞脚本

1
2
3
4
5
6
7
smb-vuln-ms06-025.nse
smb-vuln-ms07-029.nse
smb-vuln-ms08-067.nse
smb-vuln-ms10-054.nse
smb-vuln-ms10-061.nse
smb-vuln-ms17-010.nse

1
$ nmap -p445 --script smb-vuln-ms17-010.nse 192.168.1.0/24

14. 其他脚本

脚本 描述 实例
rsync-brute.nse 爆破目标的rsync $ nmap -p 873 –script rsync-brute –script-args ‘rsync-brute.module=www’ 192.168.1.0/24
rlogin-brute.nse 爆破目标的rlogin $ nmap -p 513 –script rlogin-brute 192.168.1.0/24
vnc-brute.nse 爆破目标的vnc $ nmap –script vnc-brute -p 5900 192.168.1.0/24
pcanywhere-brute.nse 爆破pcanywhere $ nmap -p 5631 –script=pcanywhere-brute 192.168.1.0/24
nexpose-brute.nse 爆破nexpose $ nmap –script nexpose-brute -p 3780 192.168.1.0/24
shodan-api.nse 配合shodan接口进行扫描 $ nmap –script shodan-api –script-args ‘shodan-api.target=192.168.1.0/24,shodan-api.apikey=SHODANAPIKEY’

0x05 扫描实战

1
依据目标系统端口及服务,选取对应扫描脚本进行扫描探测

目标C段常规漏洞扫描

1
$ nmap -sT -Pn -v --script dns-zone-transfer.nse,ftp-anon.nse,ftp-proftpd-backdoor.nse,ftp-vsftpd-backdoor.nse,ftp-vuln-cve2010-4221.nse,http-backup-finder.nse,http-cisco-anyconnect.nse,http-iis-short-name-brute.nse,http-put.nse,http-php-version.nse,http-shellshock.nse,http-robots.txt.nse,http-svn-enum.nse,http-webdav-scan.nse,iis-buffer-overflow.nse,iax2-version.nse,memcached-info.nse,mongodb-info.nse,msrpc-enum.nse,ms-sql-info.nse,mysql-info.nse,nrpe-enum.nse,pptp-version.nse,redis-info.nse,rpcinfo.nse,samba-vuln-cve-2012-1182.nse,smb-vuln-ms08-067.nse,smb-vuln-ms17-010.nse,snmp-info.nse,sshv1.nse,xmpp-info.nse,tftp-enum.nse,teamspeak2-version.nse 192.168.1.0/24

目标C段弱口令爆破

1
$ nmap -sT -v -Pn --script ftp-brute.nse,imap-brute.nse,smtp-brute.nse,pop3-brute.nse,mongodb-brute.nse,redis-brute.nse,ms-sql-brute.nse,rlogin-brute.nse,rsync-brute.nse,mysql-brute.nse,pgsql-brute.nse,oracle-sid-brute.nse,oracle-brute.nse,rtsp-url-brute.nse,snmp-brute.nse,svn-brute.nse,telnet-brute.nse,vnc-brute.nse,xmpp-brute.nse 192.168.1.0/24

0xFF Reference


本文涉及内容,仅限于网络安全从业者学习交流,切勿用于非法用途...