说明:该篇笔记作用于 Nmap 渗透测试工具的使用以及参考
author:Tripse
updateTime:2022.2.9
PS:
.xml格式转换.html:xsltproc myscan.xml -o myscan.html
功能介绍
除了端口扫描外,Nmap还具备如下功能。
● 主机探测:Nmap 可査找目标网络中的在线主机。默认情况下,Nmap 通过4种方式——ICMP echo 请求(ping)、向443端口发送TCP SYN 包、向80端口发送TCP ACK包和ICMP时间戳请求——发现目标主机。
● 服务/版本检测:在发现开放端口后,Nmap 可进一步检查目标主机的检测服务协议、应用程序名称、版本号等信息。
● 操作系统检测:Nmap 向远程主机发送一系列数据包,并能够将远程主机的响应与操作系统指纹数据库进行比较。如果发现了匹配结果,它就会显示匹配的操作系统。它确实可能无法识别目标主机的操作系统;在这种情况下,如果您知道目标系统上使用的何种操作系统,可在它提供的 URL 里提交有关信息,更新它的操作系统指纹数据库。
● 网络路由跟踪:它通过多种协议访问目标主机的不同端口,以尽可能访问目标主机。Nmap路由跟踪功能从TTL的高值开始测试,逐步递减TTL,直到它到零为止。
● Nmap 脚本引擎:这个功能扩充了Nmap 的用途。如果您要使用Nmap 实现它(在默认情况下)没有的检测功能,可利用它的脚本引擎手写一个检测脚本。目前,Nmap可检査网络服务的漏洞,还可以枚举目标系统的资源。
端口识别状态介绍
● 开放:工作于开放端口的服务器端的应用程序可以受理TCP 连接、接收UDP 数据包或者响应SCTP(流控制传输协议)请求。
● 关闭:虽然我们确实可以访问有关的端口,但是没有应用程序工作于该端口上。
● 过滤:Nmap 不能确定该端口是否开放。包过滤设备屏蔽了我们向目标发送的探测包。
● 未过滤:虽然可以访问到指定端口,但Nmap 不能确定该端口是否处于开放状态。
● 打开|过滤:Nmap 认为指定端口处于开放状态或过滤状态,但是不能确定处于两者之中的哪种状态。在遇到没有响应的开放端口时,Nmap 会作出这种判断。这可以是由于防火墙丢弃数据包造成的。
● 关闭|过滤:Nmap 认为指定端口处于关闭状态或过滤状态,但是不能确定处于两者之中的哪种状态。
扫描形式介绍
TCP 扫描选项
● TCP 连接扫描(-sT):指定这个选项后,程序将和目标主机的每个端口都进行完整的三次握手。如果成功建立连接,则判定该端口是开放端口。由于在检测每个端口时都需要进行三次握手,所以这种扫描方式比较慢,而且扫描行为很可能被目标主机记录下来。如果启动Nmap的用户的权限不足,那么默认情况下Nmap程序将以这种模式进行扫描。
● SYN 扫描(-sS):该选项也称为半开连接或者SYN stealth。采用该选项后,Nmap将使用含有SYN标志位的数据包进行端口探测。如果目标主机回复了SYN/ACK包,则说明该端口处于开放状态:如果回复的是RST/ACK包,则说明这个端口处于关闭状态;如果没有任何响应或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了。SYN模式的扫描速度非常好。而且由于这种模式不会进行三次握手,所以是一种十分隐蔽的扫描方式。如果启动Nmap的用户有高级别权限,那么在默认情况下Nmap程序将以这种模式进行扫描。
● TCP NULL(-sN)、FIN(-sF)及XMAS(-sX)扫描:NULL 扫描不设置任何控制位;FIN扫描仅设置FIN标志位:XMAS扫描设置FIN、PSH和URG的标识位。如果目标主机返回了含有 RST 标识位的响应数据,则说明该端口处于关闭状态;如果目标主机没有任何回应,则该端口处于打开|过滤状态。
● TCP Maimon扫描(-sM):Uriel Maimon 首先发现了TCP Maimom扫描方式。这种模式的探测数据包含有FIN/ACK标识。对于BSD衍生出来的各种操作系统来说,如果被测端口处于开放状态,主机将会丢弃这种探测数据包;如果被测端口处于关闭状态,那么主机将会回复RST。
● TCPACK 扫描(-sA):这种扫描模式可以检测目标系统是否采用了数据包状态监测技术(stateful)防火墙,并能确定哪些端口被防火墙屏蔽。这种类型的数据包只有一个ACK标识位。如果目标主机的回复中含有RST标识,则说明目标主机没有被过滤。
● TCP 窗口扫描(-sW):这种扫描方式检测目标返回的RST数据包的TCP窗口字段。如果目标端口处于开放状态,这个字段的值将是正值;否则它的值应当是0。
● TCP Idle 扫描(-sI):采用这种技术后,您将通过指定的僵尸主机发送扫描数据包。本机并不与目标主机直接通信。如果对方网络里有IDS,IDS将认为发起扫描的主机是僵尸主机。
UDP 扫描选项
Nmap有多种TCP扫描方式,而UDP扫描仅有一种扫描方式(-sU)。虽然UDP扫描结果没有TCP扫描结果的可靠度高,但渗透测试人员不能因此而轻视UDP扫描,毕竟UDP端口代表着可能会有价值的服务端程序。
UDP扫描的最大问题是性能问题。由干Linux内核限制1秒内最多发送一次ICMP Port Unreachable信息。按照这个速度,对一台主机的65536个UDP端口进行完整扫描,总耗时必定会超过18个小时。这也是为什么 Nmap 扫描有时候会比较慢的原因
改善扫描速度的方式主要有:
● 进行并发的UDP 扫描;
● 优先扫描常用端口;
● 在防火墙后面扫描;
● 启用--host-timeout 选项以跳过响应过慢的主机。
这些方法能够减少UDP端口扫描所需的总体时间。
假如我们需要找到目标主机开放了哪些 UDP 端口。为提高扫描速度,我们仅扫描 53端口(DNS)和161端口(SNMP)。此时需要使用下述指令。
nmap -sU 192.168.56.103 -p 53,161
上述指令的返回结果如下。
Nmap scan report for 192.168.56.103
Host is up (0.0016s latency).
PORT STATE SERVICE
53/udp open domain
161/udp closed snmp
NSE 脚本引擎介绍
Nmap 本身就是功能强大的网络探测工具。而它的脚本引擎功能(Nmap Scripting Engine,NSE)更让 Nmap 如虎添翼。NSE 可使用户的各种网络检査工作更为自动化,有助于识别应用程序中新发现的漏洞、检测程序版本等Nmap原本不具有的功能。虽然Nmap软件包具有各种功能的脚本,但是为了满足用户的特定需求,它还支持用户撰写自定义脚本。
从进阶操作手法章节开始,我们将慢慢揭开 nmap 的面纱!
NSE自带的脚本由Lua语言(http://www.lua.org)编写。这些脚本可以分成12个类别。
● auth:此类脚本使用暴力破解等技术找出目标系统上的认证信息。
● default:启用--sC 或者-A 选项时运行此类脚本。这类脚本同时具有下述特点:
执行速度快;
输出的信息有指导下一步操作的价值;
输出信息内容丰富、形式简洁;
必须可靠;
不会侵入目标系统;
能泄露信息给第三方。
● discovery:该类脚本用于探索网络。
● dos:该类脚本可能使目标系统拒绝服务,请谨慎使用。
● exploit:该类脚本利用目标系统的安全漏洞。在运行这类脚本之前,渗透测试人员需要获取被测单位的行动许可。
● external:该类脚本可能泄露信息给第三方。
● fuzzer:该类脚本用于对目标系统进行模糊测试。
● instrusive:该类脚本可能导致目标系统崩溃,或耗尽目标系统的所有资源。
● malware:该类脚本检査目标系统上是否存在恶意软件或后门。
● safe:该类脚本不会导致目标服务崩溃、拒绝服务且不利用漏洞。
● version:配合版本检测选项(-sV),这类脚本对目标系统的服务程序进行深入的版本检测。
● vuln:该类脚本可检测检査目标系统上的安全漏洞。
在Kali Linux系统中,Nmap脚本位于目录/usr/share/nmap/scripts。目前,Kali Linux收录的6.25版的Nmap带有430多个脚本。
常用指令汇总解析
code | explanation |
nmap 10.10.10.19 | 默认扫描(扫描所有端口,探测简单服务) |
nmap -iL testip | 读取清单扫描(同时采用默认扫描。当然,我们可以在其后追加我们需要扫描的参数,以详细扫描出结果) |
nmap -sV -oA testPortVersion 10.10.10.19 | 端口服务探针 |
nmap -A 10.10.10.19 -oN nmap.all | 全面扫描(不推荐适用) |
nmap -sS -sV -p- -O 10.10.10.19 -oN nmap.all | 全面扫描(推荐使用),后期根据端口服务探针操作 Script 精确识别服务漏洞,该操作方法应当经常于 nmap 其他操作手法相互配合 该笔记为具体演示其他参数引用,而不会指定该参数使用 |
nmap -6 fe80::a00:27ff:fe43:1518 | IPv6 目标扫描方式 |
nmap -Pn 10.10.10.19 | cross firewall for ICMP |
nmap -f --mtu 64 10.10.10.19 | 减少数据包以防止被识别为 Nmap 指纹 |
nmap -D 192.168.179.189 10.10.10.19 | 指定诱饵主机,混淆目标 IPS/IDS 识别本机 nmap 扫描 |
nmap -g 80 10.10.10.19 | 利用防火墙特性:只允许某源端口流量访问本机,则操作该手法 |
nmap --data-length 10 10.10.10.19 | 修改 Nmap 数据包长度与 -f --mtu 相似同样避免被 firewall 识别为 nmap 指纹 |
nmap --max-parallelism 10 10.10.10.19 | 限制Nmap 并发扫描的最大连接数以免被 CC 流量防护限制 |
nmap --scan-delay 2 10.10.10.19 | 与上一个命令原理相同,增加数据包发送延迟,减少 IPS/IDS CC 流量防护检测和限制 |
常用 NSE 脚本指令汇总解析
code | explanation |
nmap --script-updatedb | 更新 NSE 脚本数据库,需要记住,每安装一个 NSE 脚本在 Nmap /usr/share/nmap/scripts 目录下,均需要更新指令 |
nmap -sC 10.10.10.19 | NSE 默认类扫描目标, |
nmap --script http-enum,http-headers,http-methods,http-php-version -p 80 10.10.10.19 | 启用 NSE 脚本进行 web 目录信息探针、HEAD 头部信息探针、PHP version 探针、HTTP 请求方法探针 |
nmap -sV --script vulners 10.10.10.19 | 启用 NSE 脚本识别已知服务信息来源探针漏洞数据 |
nmap --script vulscan/vulscan.nse -sV 10.10.10.19 -oA nmap.vulscan | 启用 vulscan NSE ,该 NSE 脚本与上一个 NSE 相同,但是所探针的漏洞信息更为全面且详细 |
基础操作手法
默认扫描
默认扫描会扫描目标机器的所有端口,以及端口的简单识别
利用命令
nmap 10.10.10.19 |
利用过程
┌──(root 标签:指南,Nmap,tcp,10.19,nmap,10.10,操作,open From: https://blog.51cto.com/u_15531827/5733444