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 | 在空扫描中,客户端发出的 TCP 数据包仅仅只会包含端口号而不会有其他任何的标识信息。 |
e. TCP Window扫描
扫描原理
1 | TCP 窗口扫描的流程同 ACK 扫描类似,同样是客户端向服务器发送一个带有 ACK 标识和端口号的 TCP 数据包,这种扫描能够用于发现目标服务器端口的状态。在 ACK 扫描中返回 RST 表明没有被过滤,但在窗口扫描中,当收到返回的 RST 数据包后,它会检查窗口大小的值 |
f. TCP FIN扫描
扫描原理
1 | FIN 扫描会向服务器发送带有 FIN 标识和端口号的 TCP 数据包。 |
g. TCP Xmas扫描
扫描原理
1 | 在发送的数据包中设置PSH(PUSH推送,数据包立刻发送),FIN(结束会话),URG(紧急)标志位 |
h. UDP扫描
TCP/UDP 对比
1 | TCP 是面向连接的协议,而UDP则是无连接的协议。 |
扫描原理
1 | 客户端会向服务器发送一个带有端口号的 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 | smb-vuln-ms06-025.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 |