nmap使用教程
一、简介
Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些 主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。
//如果是前期进行信息收集的情况下,建议使用网上在线的扫描工具,如:端口扫描、超级ping
二、主要功能
(1)检测主机是否在线。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。
(2)扫描指定主机/主机列表端口开放状态,枚举目标主机上的开放端口。
(3)检测主机运行服务类型及版本,检测远程设备上的网络服务以确定应用程序名称和版本号。
(4)检测操作系统版本和设备类型 ,确定网络设备的操作系统和硬件特性。
(5)可与脚本进行脚本交互,使用Nmap脚本引擎(NSE)和Lua编程语言。
三、扫描方法
扫描目标通常为ip或者ip列表:
单个ip:192.168.31.100
ip列表:192.168.0-255.0-255
ip网段:192.168.1.0/24
主机发现
(一)-sL(列表扫描)
- 命令:nmap -sL [扫描目标]
- 用法:显示扫描的所有主机的列表,仅仅列出指定网络上的每台主机,不发送任何报文到目标主机
//个人感觉没啥用
(二)-sn、-sP(ping扫描)
- 命令:nmap -sn [扫描目标]
- 用法:单独用于主机发现,不会进行端口扫描
- 特点:速度快,容易被防火墙屏蔽、导致扫描不出结果
(三)-n(不进行DNS解析)
- 命令:nmap -n [扫描目标]
- 用法:用于单纯扫描一段ip的时候,不需要知道ip所部署了什么网站,节省扫描时间
(四)-R(总是进行DNS解析)
- 命令:nmap -R [扫描目标]
- 用法:为所有的目标主机进行域名解析,可以了解到ip部署了什么网站,有哪些域名
(五)--system-dns
- 命令:nmap -system-dns [扫描目标]
- 用法:使用主机系统自带的DNS解析器,而不是其自身内部的方法,一般用于IPv6扫描
(六)--dns-servers
- 命令:nmap -dns-server [server1] [server2] [扫描目标]
- 用法:用于扫描时手动指定DNS服务器(例如:8.8.8.8、114.114.114.114)进行查询
(七)-6
- 命令:nmap -6 [ipv6地址]
- 用法:对ipv6地址的主机进行扫描
端口扫描
端口状态:
open: 端口是开放的。
closed: 端口是关闭的。
filtered: 端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered: 端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered: 端口是开放的或被屏蔽。
closed|filtered : 端口是关闭的或被屏蔽。
(一)基本快速扫描
- 命令:nmap [扫描目标]
- 用法:发送一个arp的ping数据包,来探测目标主机在1-10000范围内所开放的端口
(二)-iL(扫描文件内ip)
- 命令:nmap -iL [文件路径]
- 用法:扫描该文件里面的ip地址
(三)-Pn、-P0(不ping扫描)
- 命令:nmap -Pn [扫描目标]
- 用法:不检测主机存活,即不进行ping命令扫描,直接跳过主机发现而进行端口扫描
- 特点:有些网络的防火墙不允许ICMP echo请求穿过,使用这个选项可以对这些网络进行扫描
(四)-p(指定端口扫描)
- 命令:nmap -p [port]
- 用法:
指定端口范围使用-p参数,如果不指定要扫描的端口,Nmap默认扫描从1到1024再加上nmap-services列出的端口。
可以指定一个端口80,也可以指定一个范围,如:-p 20-30,139,60000-,扫描20到30号端口,139号端口以及所有大于60000的端口。
全端口扫描-p1-65535
扫描方式
官方参考说明:https://nmap.org/man/zh/man-port-scanning-techniques.html
-sT:TCP connect()扫描,这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听, connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sS:TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
-sU:UDP扫描,发送0字节UDP包,快速扫描Windows的UDP端口如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。
-sP:ping扫描,有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。
-sA:ACK扫描 TCP ACK扫描,当防火墙开启时,查看防火墙有未过虑某端口,这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。
-sW:滑动窗口扫描,这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。
-sR:RPC扫描,和其他不同的端口扫描方法结合使用。
-b:FTP反弹攻击(FTP Bounce attack) 外网用户通过FTP渗透内网
服务版本
官方参考说明:https://nmap.org/man/zh/man-version-detection.html
- 命令:nmap -sV [扫描目标]
- 用法:查看各个端口服务的版本
操作系统
- 命令:nmap -O --fuzzy [扫描目标]
- 用法:检测出目的ip所使用的操作系统,--fuzzy使得Nmap的推测更加有效
时序设置
- 命令:nmap -T[数字0-5] [扫描目标]
- 用法:指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4
- 选项:
-T0(偏执的):非常慢的扫描,用于IDS逃避.
-T1(鬼崇的):缓慢的扫描,用于IDS逃避.
-T2(文雅的):降低速度以降低对带宽的消耗,此选项一般不常用.
-T3(普通的):默认,根据目标的反应自动调整时间.
-T4(野蛮的):快速扫描,常用扫描方式,需要在很好的网络环境下进行扫描,请求可能会淹没目标.
-T5(疯狂的):急速扫描,这种扫描方式以牺牲准确度来提升扫描速度.
强度设置
- 命令:nmap --version-intensity[数字1-9] [扫描目标]
- 用法:数值越高, 服务越有可能被正确识别,但所花费的时间也越长,默认强度为9
- 别名: --version-light 强度2的别名,使得版本扫描快许多。--version-all 强度9的别名,保证对每个端口尝试每个探测报文。
放弃低速目标主机
- 命令:nmap --host-timeout 1800000ms
- 原因:由于性能较差或不可靠的网络硬件或软件,带宽限制严格的防火墙等原因,一些主机需要很长的时间扫描,而且这些极少数的主机扫描往往占据了大部分的扫描时间。所以有时候我们可以忽略这些主机,这时可以使用该选项设置一个超时时间。
- 用法:设置一个1800000ms(30分钟)的限制时间
路由跟踪扫描
- 命令:nmap -traceroute www.baidu.com/183.232.231.172
- 用法:能够帮网络管理员了解网络通行情况,可以轻松的查处从我们电脑所在地到目标地之间所经的网络节点
进攻性(Aggressive)扫描
- 命令:nmap -A [扫描目标]
- 用法:该扫描包含了1-10000的端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测
- 特点:扫描强度大,耗时长
绕过防火墙和IDS
官方参考说明:https://nmap.org/man/zh/man-bypass-firewalls-ids.html
(一)报文分段扫描
- 命令:nmap -f [扫描目标]
- 用法:将一个包分段发送,降低目标IP的检测和拦截几率
(二)诱饵隐蔽扫描
- 命令:namp -D 诱饵IP,诱饵IP,...,主机IP [扫描目标] 或者 nmap -D RND:诱饵主机数量 [扫描目标]
- 用法:每次我们扫描目标主机的时候都可能会产生一个记录,免被对方主机发现我们而将我们IP进行封锁,伪造多个主机一起发送请求
- 注意:
(1)在版本检测(-sV)和TCP连接扫描(-sT)时,无法使用诱饵主机。
(2)使用太多的诱饵并没有太大意义,反而会造成扫描结果的不准确,一般使用十个左右的诱饵数量,将主机IP放在第六个以后最好,因为很多常用的端口扫描检测器不会报告第六个位置之后的IP
(三)源端口欺骗
- 命令:nmap -g [伪装端口] [扫描目标]
- 用法:伪造成指定端口发出的数据,找到一个被遗忘在安全检查机制之外的端口,就可以使用源端口欺骗技术进行扫描,个人防火墙会默认运行53(DNS)端口,WindowsXP系统自带的防火墙会允许88(Kerberos)端口,也可以试试3306
格式化输出
官方参考说明:https://nmap.org/man/zh/man-output.html
nmap提供以下几种输出格式
(1)保存为文本文件
nmap -sn -oN "保存路径" [扫描目标]
例如:nmap -sn -oN D:\nmap\文本文件.txt 192.168.31.1/24
(2)保存为XML文件
nmap -sn -oX "保存路径" [扫描目标]
(3)保存为grep文件
nmap -sn -oG "保存路径" [扫描目标]
扩展脚本
Nmap扩展脚本: NSE(Nmap Scripts Extend),极大的增强了Nmap的使用场景,这是Nmap脱颖而出的关键技术,Nmap扩展脚本基于lua语言开发,内部封装的lua解释器,所以我们如果想要自己写一个Nmap扩展脚本,需要使用lua开发,不过你不会lua也不要担心,nmap为我们准备了数百个已经写好的脚本供我们日常使用。Nmap默认将脚本存放在\Nmap\scripts路径中。
(一)脚本说明
我们可以在Zenmap中配置编辑器中查看脚本及其说明
(二)脚本分类
分类 | 描述 |
---|---|
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 |
(三)使用命令
在命令行中我们使用脚本有多重方式,--script <文件名> | <类别> | <目录> | <表达式>
文件名: nmap --script http-git 152.32.251.110 (用于发现git服务)
目录: nmap --script D:\nmap\scripts 152.32.251.110
类别: 默认(default)类别。nmap --script default 152.32.251.110
(四)脚本传参
- 命令:--script-args
我们也可以利用文件的形式进行传传参:--script-args-file - 例子:
nmap --script http-methods --script-args http.useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)" 192.168.31.1/24
//http-methods的脚本的http.useragent脚本参数用于修改请求头中的User-Agent参数
nmap --script http-methods --script-args-file D:\nmap\nmap脚本参数.txt 114.67.84.105
//nmap脚本参数.txt:Mozilla/5.0 (Windows NT 10.0; Win64; x64) - 用途:防止对方在请求信息中发现我们在用nmap服务器扫描,将请求信息中的User-Agent参数伪造成在浏览器中访问,除了可以修改http-methods的脚本的http.useragent脚本参数,也可以修改其他参数信息
nmap参考指南:https://nmap.org/man/zh/index.html