nmap 使用

常用选项

  1. -sn 只判断主机是否在线,不扫描端口
  2. -sV 判断服务软件版本
  3. -O 判断操作系统
  4. -Pn 当主机禁ping后使用,否则会被跳过
  5. -A 强力检测,包含以下:

服务版本识别(-sV)
操作系统识别(-O)
脚本扫描(-sC)
Traceroute(–traceroute)

TCP扫描选项

  1. TCP连接扫描(-sT):指定这个选项后,程序将和目标主机的每个端口都进行完整的三次握手。如果成功建立连接,则判定该端口是开放端口。由于在检测每个端口时都需要进行三 次握手,所以这种扫描方式比较慢,而且扫描行为很可能被目标主机记录下来。如果启动 Nmap的用户的权限不足,那么默认情况下Nmap程序将以这种模式进行扫描。

  2. ​SYN扫描(-sS):该选项也称为半开连接或者SYN stealth。采用该选项后,Nmap将使用含有SYN标志位的数据包进行端口探测。如果目标主机回复了SYN/ACK包,则说明该端口处 于开放状态:如果回复的是RST/ACK包,则说明这个端口处于关闭状态;如果没有任何响应 或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了。SYN模式的扫描速度非常好。而且由于这种模式不会进行三次握手,所以是一种十分隐蔽的扫描方式。如果启动Nmap的用户有高级别权限,那么在默认情况下Nmap程序将以这种模式进行扫描。

  3. TCP NULL(-sN)、FIN(-sF)及XMAS(-sX)扫描:NULL 扫描不设置任何控制位;FIN扫描仅设置FIN标志位:XMAS扫描设置FIN、PSH和URG的标识位。如果目标主机返回 了含有RST标识位的响应数据,则说明该端口处于关闭状态;如果目标主机没有任何回应, 则该端口处于打开|过滤状态。

  4. TCP Maimon扫描(-sM):Uriel Maimon 首先发现了TCP Maimom扫描方式。这种模式的探测数据包含有FIN/ACK标识。对于BSD衍生出来的各种操作系统来说,如果被测端口处于 开放状态,主机将会丢弃这种探测数据包;如果被测端口处于关闭状态,那么主机将会回复 RST。

  5. TCPACK扫描(-sA):这种扫描模式可以检测目标系统是否采用了数据包状态监测技术(stateful)防火墙,并能确定哪些端口被防火墙屏蔽。这种类型的数据包只有一个ACK标识位。如果目标主机的回复中含有RST标识,则说明目标主机没有被过滤。

  6. TCP窗口扫描(-sW):这种扫描方式检测目标返回的RST数据包的TCP窗口字段。如果目标端口处于开放状态,这个字段的值将是正值;否则它的值应当是0。

  7. TCP Idle扫描(-sI):采用这种技术后,您将通过指定的僵尸主机发送扫描数据包。本机并不与目标主机直接通信。如果对方网络里有IDS,IDS将认为发起扫描的主机是僵尸主机。

UDP扫描

UDP扫描只有一个-sU选项,由于Linux内核只能进行1秒1次的UDP报文发送,所以必须有针对性的优化扫描

  1. 对常见端口进行扫描
  2. 并行扫描
  3. 在防火墙后方扫描
  4. 使用–host-timeout跳过超时主机

端口目标选项

  • -p 指定端口
  • -F 快速扫描,仅扫描常用的100个端口
  • -r 顺序扫描,不随机
  • --top-ports 扫描排名前N的端口
  • --port-ratio 扫描前百分比的端口

版本探测

  • sV 打开版本探测
  • --version-intensity <intensity> 设置版本扫描强度, 设置强度的值在 0~9之间,默认是7

输出选项

  1. -oN Normal,不显示runtime和警告信息
  2. -oX xml
  3. -oG gnmap,方便Grep
  4. -oA 以上三种一起输出

时间排程控制

-T 有6个等级

paranoid(0):每5分钟发送一次数据包,且不会以并行方式同时发送多组数据。这种模式的扫描不会被IDS检测到。

sneaky(1):每隔15秒发送一个数据包,且不会以并行方式同时发送多组数据。

polite(2):每0.4秒发送一个数据包,且不会以并行方式同时发送多组数据。

normal(3):此模式同时向多个目标发送多个数据包,为 Nmap默认的模式,该模式能自动在扫描时间和网络负载之间进行平衡。

aggressive(4):在这种模式下,Nmap 对每个既定的主机只扫描5分钟,然后扫描下一台主机。它等待响应的时间不超过1.25秒。

insane(5):在这种模式下,Nmap对每个既定的主机仅扫描74秒,然后扫描下一台主机。它等待响应的时间不超过0.3秒。

脚本引擎

NSE(Nmap Script Engine)可以扩展nmap的使用范围,并且用户可以自定义自己的脚本实现针对性的扫描

-sC 或–script=default:启动默认类NSE脚本。

在Kali Linux系统中,Nmap脚本位于目录/usr/share/nmap/scripts。

--script <filename>|<category>|<directories>:根据指定的文件名、类别名、目录名,执行相应的脚本。

--script-args <args> :这个选项用于给脚本指定参数。例如,在使用认证类脚本时,可通过这个选项指定用户名和密码

类型 描述
auth 此类脚本使用暴力破解等技术找出目标系统上的认证信息。
default 启用–sC 或者-A 选项时运行此类脚本。这类脚本同时具有: 执行速度快;输出的信息有指导下一步操作的价值;输出信息内容丰富、形式简洁;必须可靠;不会侵入目标系统;能泄露信息给第三方。
discovery 该类脚本用于探索网络。
dos 该类脚本可能使目标系统拒绝服务,请谨慎使用。
exploit 该类脚本利用目标系统的安全漏洞。在运行这类脚本之前,渗透测试人员需要获取 被测单位的行动许可。
external 该类脚本可能泄露信息给第三方。
fuzzer 该类脚本用于对目标系统进行模糊测试。
instrusive 该类脚本可能导致目标系统崩溃,或耗尽目标系统的所有资源。
malware 该类脚本检査目标系统上是否存在恶意软件或后门。
safe 该类脚本不会导致目标服务崩溃、拒绝服务且不利用漏洞。
version 配合版本检测选项(-sV),这类脚本对目标系统的服务程序进行深入的版本检 测。
vuln 该类脚本可检测检査目标系统上的安全漏洞。
  • –script-help 打印帮助
nmap --script-help "(vuln) and *smb*"

规避检测选项

真实环境中探测目标往往都在IDS之后,所以有必要针对网络环境选择规避检测的选项

-f(使用小数据包):这个选项可避免对方识别出我们探测的数据包。指定这个选项之后, Nmap将使用8字节甚至更小数据体的数据包。

–mtu:这个选项用来调整数据包的包大小。MTU(Maximum Transmission Unit,最大传输单元)必须是8的整数倍,否则Nmap将报错。

-D(诱饵):这个选项应指定假 IP,即诱饵的IP。启用这个选项之后,Nmap 在发送侦测 数据包的时候会掺杂一些源地址是假IP(诱饵)的数据包。这种功能意在以藏木于林的方法 掩盖本机的真实 IP。也就是说,对方的log还会记录下本机的真实IP。您可使用RND生成随机 的假IP地址,或者用RND:number的参数生成N个假IP地址。您所指定的诱饵主机 应当在线,否则很容易击溃目标主机。另外,使用了过多的诱饵可能造成网络拥堵。尤其是在扫描客户的网络的时候,您应当极力避免上述情况。

--source-port <portnumber>或-g(模拟源端口):如果防火墙只允许某些源端口的入站流量,这个选项就非常有用。

–data-length:这个选项用于改变Nmap 发送数据包的默认数据长度,以避免被识别出来是Nmap的扫描数据。

–max-parallelism:这个选项可限制Nmap并发扫描的最大连接数。

--scan-delay <time>:这个选项用于控制发送探测数据的时间间隔,以避免达到IDS/IPS端 口扫描规则的阈值。

常用命令构造

端口扫描

常见端口扫描

nmap -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 -T4 #{RHOST}

HTTP端口扫描

nmap -p80,443,8000-8100,8443 -T4 #{RHOST}

数据库中top1000端口扫描

nmap -sV -sC -O -T4 -n -Pn -oA fastscan #{RHOST}

使用版本扫描(-sV),使用default脚本(-sC),开启系统版本检测(-O),扫描强度4级(-T4),不递归DNS(-n),不检测主机是否ping通(-Pn),全文件类型输出(-oA)

将检测到打开的端口放在环境变量中

ports=$(nmap -p- --min-rate=1000 -T4 #{RHOST} | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)

脚本使用

查找脚本并打印使用说明

# 搜索default version safe 类型的模块
locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | grep #{module}

# 打印说明 nmap --script-help "(default or version) and *#{module}*"

使用漏洞扫描

nmap -sV -O -p --script vuln #{RHOST}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com