Nmap简介
Nmap 也称 Network Mapper,是一款多平台的网络连接扫描软件,可以探测计算机网络上的主机和服务。在渗透出其为了绘制目标网络拓补图,需用到Nmap对目标网络发送特定的数据包,对返回的数据报进行分析。
Nmap 在网络扫描中的常见作用
1、查看存活主机。
2、扫描目标主机开放端口
3、鉴别安全过滤机制
4、识别目标主机的操作系统
5、查看目标主机服务的版本信息
6、利用脚本扫描漏洞
Nmap 主要使用平台
Windows系统,MAC OS X 系统,Linux系统
Nmap常见运行方式
Zenmap GUI方式
命令行方式
Nmap 主要参数
Nmap 的功能参数主要分为以下几大类
1、目标说明
2、主机发现
3、端口扫描
4、端口说明和扫描顺序
5、服务与版本探测
6、脚本扫描
7、操作系统探测
8、时间和性能
9、防火墙/IDS规避和欺骗
10、输出选项
1、TARGET SPECIFICATION 目标说明
-iL 从主机地址列表文件中导入扫描地址
-iR 随机选择目标进行扫描,num hosts表示数目,设置为0则无休止扫描
--exclude 排除某个主机地址
--excludefile 排除主机地址列表文件中的地址
范例:创建一个文件 ip.txt
使用nmap 扫描
2、HOST DISCOVERY 主机发现
-sL 列表扫描,仅将指定的目标 IP 列举出来,不进行主机发现
-sn 和 -sP 一样,只利用 ping 扫描进行主机发现,不扫描主机的端口
-Pn 将所有指定的主机视为已开启状态,跳过主机发现过程
-PS TCP SYN ping,发下哦那个一个 SYN 标志位的空 TCP 报文,默认端口为 80,也可指定端口
-PA TCP ACK ping,发送一个设置了 ACK 标志位的空 TCP 报文,默认端口为 80,也可指定端口
-PU UDP ping,发送一个空的 UDP 保温到指定端口,可穿透只过滤 TCP 的防火墙
-P0 使用 IP 协议 ping
-PR 使用 IP 协议 ping
-n/-R -n 不用域名解析,加速扫描,-R 为目标 IP 做反向域名解析,扫描较慢一些
-dns-servers 自定义域名解析服务器地址
-traceroute 目标主机路由追踪
3、SCAN TECHNIQUES 端口扫描
Nmap 产生结果是基于目标机器的响应报文的,而这些主机可能是不可信任的,会产生迷惑或者误导Nmap的报文。
Nmap 将目标端口分为 6 种状态
open (开放的)
closed (关闭的)
filtered (被过滤的)
unfiltered (未被过滤)可访问但不确定开放情况
open|filered (开放或者被过滤)无法确定端口是开放的还是被过滤的
closed|filtered (关闭或者被过滤)无法确定端口是关闭的还是被过滤的
-sS TCP SYN 扫描,半开放扫描,速度快隐蔽性好(不完成 TCP 连接),能够明确区分端口状态
-sT TCP 连接扫描,容易产生记录,效率低
-sA TCP ACK 扫描,只设置 ACK 标志位,区别被过滤与未被过滤的
-sU UDP 服务扫描,例如 DNS/DHCP 等,效率低
-sN;-sF;-sX TCP Null,Fin,Xmas 扫描,从 RFC 挖掘微妙方法来区分开放关闭端口
-sl 利用僵尸主机上已知 IP 分段 ID 序列生成算法来探测目标上开放端口的信息,极端隐蔽
-sO IP 协议扫描,可以确定目标主机支持哪些 IP 协议,例如 TCP/ICMP 等
4、PORT SPECIFICATION AND SCAN ORDER 端口说明和扫描顺序
-p 指定扫描的端口,可以是单个端口,也可以是端口范围,可以指定UDP或TCP协议扫描特定端口
-p <name> 指定扫描的协议,例如-p http 即可扫描http协议的端口状态
--exclude-ports 排除指定端口不扫描
-F 快速模式,仅扫描100个常用端口
5、SERVICE/VERSION DETECTION 服务与版本探测
Nmap-services 包含大量的数据库,Nmap通过查询该数据库可以报告那些端口可能对应于什么服务,但不一定正确
-sV 进行服务版本探测
--version-intensity<level> 设置版本扫描强度,范围为0-9,默认是7,强度越高,时间越长,服务越可能被正确识别
6、SCRIPT SCAN 扫描
允许用户自己编写脚本来执行自动化的操作或扩展 Nmap 的功能,使用 Lua 脚本语言
-sC 使用默认类别的脚本呢进行扫描
--script=<Lua scripts> 使用某个或某类脚本进行扫描,支持通配符描述
7、OS DETECTION 操作系统探测
用 TCP/IP 协议栈 fingerprinting 进行探测,Nmap 发送一系列 TCP 和 UDP 报文到远程主机,检查相应种的每一个比特。测试后Nmap把结果和数据库种超过 1500 个已知的 fingerprints 比较,如匹配则输出结果
-O 启用操作系统探测
-A 同时启用操作系统探测和服务版本探测
--osscan-limit 针对指定的目标进行操作系统检测
--osscan-guess 当Nmap无法确定所检测的操作系统时,尽可能地提供最相近的匹配
8、TIMING AND PERFORMANCE 时间和性能
Nmap 开发的最高优先级是性能,但实际应用中很多因素会增加扫描时间,比如特定的扫描选项,防火墙配置以及版本扫描等。
-T <0-5> 设置时间模板级数,在0-5种选择。T0、T1用户IDS规避,T2降低了扫描速度使用更少的带宽和资源。默认为T3,未做任何优化。T4假设具有合适及可靠的网络从而加速扫描。T5假设具有特别快的网络或者愿为速度牺牲准确性
-host-timeout <time> 放弃低速目标主机,时间单位为毫秒
9、FIREWALL/IDS EVASION AND SPOOFING 防火墙/IDS规避和欺骗
-f(报文分段); --mtu(使用指定的MTU)将TCP头分段在几个包中,使得包过滤器、IDS以及其它工具的检测更加困难
-D <decoy1 [,decoy2] [,ME]...> 隐蔽扫描;使用逗号分隔每个诱饵主机,用自己真实IP作为诱饵使用ME选项。如在6号或更后的位置使用ME选项,一些检测器就不报告真实IP。如不使用ME,真实IP将随机放置
-S <IP_Address> 伪造数据包的源地址
-source-port<portnumber> / -g <portnumber> 伪造源端口
10、OUTPUT 输出选项
-oN 标准输出
-oX XML输出写入指定的文件
-oS 脚本小子输出,类似于交互工具输出
-oG Grep输出
-oA 输出至所有格式
-v 提高输出信息的详细度
-resume <filename> 继续中断的扫描
Nmap常用扫描技巧
1、扫描单一目标主机
nmap 192.168.0.1
nmap www.baidu.com
2、扫描整个子网
nmap 192.168.0.1/24
3、扫描多个目标
nmap 192.168.0.1 www.baidu.com
4、扫描一个范围内的目标
nmap 192.168.0.1-200
5、导入IP列表进行扫描
nmap -iL ip.txt (要求在Nmap目录)
6、列举目标地址,但不进行扫描
nmap -sL 192.168.0.1/24
7、排除某 IP 进行扫描
nmap 192.168.0.1/24 -exclude 192.168.0.1
nmap 192.168.0.1/24 -exclude file ip.txt
8、扫描特定主机的特定端口
nmap -p80,21,8080,135 192.168.0.1
nmap -p50-900 192.168.0.1
9、简单扫描,详细输出返回结果
nmap -vv 192.168.0.1
10、简单扫描并进行路由跟踪
nmap -traceroute baidu.com
11、ping扫描,不扫描端口(需要root权限)
nmap -sP 192.168.0.1
nmap -sn 192.168.0.1
12、探测操作系统类型
nmap -O 192.168.0.1
13、Nmap 万能开关 -A 参数
nmap -A 192.168.0.1
-A包含1-10000端口的ping扫描,操作系统扫描。脚本扫描,路由跟踪,服务探测
14、混合命令扫描
nmap -vv -p1-1000 -O 192.168.0.1/24 -exclude 192.168.0.1
15、半开放TCP SYNC端口扫描
nmap -sS 192.168.0.1
16、扫描UDP服务端口
nmap -sU 192.168.0.1
17、TCP连接扫描端口
nmap -sT 192.168.0.1
18、由于IDS/IPS系统的存在,防火墙可能会阻止掉
SYN数据包,此时可发送设置了FIN标指的数据包,不需要完成TCP握手,不会在目标产生日志
nmap -sF maizitime.com
19、服务版本探测
nmap -sV 192.168.0.1
Nmap脚本扫描
Nmap 允许用户自己编写脚本进行自动化扫描操作,或扩展 Nmap 现有的功能
脚本文件的默认目录为:/usr/share/nmap/scripts
-sC 参数等价于 -sC=default 使用默认类别的脚本进行扫描,可更换其他脚本类别
--script-args=<n1=v1,[n2=v2]...> 为脚本提供默认参数
--script-args-file=filename 使用文件来为脚本提供参数
--script-updated 更新脚本数据库
--script-trace 显示脚本执行过程中所有数据的发送与接收
--script-help=<scripts> 显示脚本的帮助信息
Nmap的脚本主要分为以下几大类,扫描过程中可以使用-script=类别名称 这种方式进行扫描
auth:负责处理鉴权证书(绕开鉴权)的脚本
broadcast:在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute:提供暴力破解方式,针对常见的应用如http/snmp等
default:使用-sC或-A选项扫描时默认的脚本,提供基本脚本扫描能力
discovery:对网络进行更多的信息,如SMB枚举、SNMP查询等
dos:用户进行拒绝服务攻击
exploit:利用已知的漏洞入侵系统
external:利用第三方的数据库或资源,例如进行whois解析
fuzzer:模糊测试的脚本, 发送异常的包到目标机,探测出潜在漏洞
intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware:探测目标机是否感染了病毒、开启了后门等信息
safe:此类与intrusive相反,属于安全性脚本
version:负责增强服务与版本扫描(Version Detection)功能的脚本
vuln:负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
扫描实例演示:
使用auth脚本进行扫描,处理鉴权证书方面的脚本呢,也可以作为部分弱口令的检测
Nmap --script=auth <target IP>