0x00 Nmap简介

Nmap是Network Mapper的简称,于1997年9月推出,支持Linux、Windows、Solaris、BSD、Mac OS X、AmigaOS系统,官网为:https://nmap.org,主要用于主机发现 (Host Discovery)、端口扫描 (Port Scanning)、版本侦测 (Version Detection)、操作系统侦测 (Operating System Detection)。

nmap优点:

  • 灵活。支持数十种不同的扫描方式,支持多种目标对象的扫描
  • 强大:Nmap可以用于扫描互联网上大规模的计算机
  • 可移植:支持主流操作系统:Windows/Linux/Unix/MacOS等等;源码开放,方便移植
  • 简单:提供默认的操作能覆盖大部分功能,基本端口扫描nmap targetip,全面的扫描nmap –A targetip
  • 自由:Nmap作为开源软件,在GPL License的范围内可以自由的使用
  • 文档丰富:Nmap官网提供了详细的文档描述。Nmap作者及其他安全专家编写了多部Nmap参考书籍
  • 社区支持:Nmap背后有强大的社区团队支持

0x01 Nmap常用参数

下面整理了一些Nmap常用的参数和相应的解释:

点我查看Nmap常用参数

nmap –iflist : 查看本地主机的接口信息和路由信息
-A :选项用于使用进攻性方式扫描
-T4: 指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4
-oX test.xml: 将扫描结果生成 test.xml 文件,如果中断,则结果打不开
-oA test.xml:  将扫描结果生成 test.xml 文件,中断后,结果也可保存
-oG test.txt:  将扫描结果生成 test.txt 文件
-sn : 只进行主机发现,不进行端口扫描
-O : 指定Nmap进行系统版本扫描
-sV: 指定让Nmap进行服务版本扫描
-p <port ranges>: 扫描指定的端口
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况
-script <script name> : 指定扫描脚本
-sC: 等价于–script=default,使用默认类别的脚本进行扫描 可更换其他类别 
-Pn : 不进行ping扫描
-sP :  用ping扫描判断主机是否存活,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping
-PI :  设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。
-iL 1.txt : 批量扫描1.txt中的目标地址
 
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
-sO: 使用IP protocol 扫描确定目标机支持的协议类型
-PO : 使用IP协议包探测对方主机是否开启 
-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机
-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态
-e eth0:指定使用eth0网卡进行探测
-f : --mtu <val>: 指定使用分片、指定数据包的 MTU.
-b <FTP relay host>: 使用FTP bounce scan扫描方式
-g: 指定发送的端口号
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)
-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态
-n : 表示不进行DNS解析;
-D  <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址
-R :表示总是进行DNS解析。 
-F : 快速模式,仅扫描TOP 100的端口 
-S <IP_Address>: 伪装成其他 IP 地址
--ttl <val>: 设置 time-to-live 时间
--badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或 IDS/IPS)
--dns-servers  : 指定DNS服务器
--system-dns : 指定使用系统的DNS服务器   
--traceroute : 追踪每个路由节点 
--scanflags <flags>: 定制TCP包的flags
--top-ports <number> :扫描开放概率最高的number个端口
--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数
--version-trace: 显示出详细的版本侦测过程信息
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统
--data-length <num>: 填充随机数据让数据包长度达到 Num
--ip-options <options>: 使用指定的 IP 选项来发送数据包
--spoof-mac <mac address/prefix/vendor name> : 伪装 MAC 地址
--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息
nmap 192.168.1.0/24 -exclude 192.168.1.10  #扫描除192.168.1.0外的该网段的其他地址
nmap 192.168.1.0/24 -excludefile f:/1.txt  #扫描除给定文件中的地址以外的其他地址
nmap -sF -T4 192.168.1.0 #探测防火墙状态

0x02 使用Nmap扫描WEB应用防火墙

WAF探测

在目标主机(这里使用的是Kali Linux)输入以下命令:

nmap -p 80,443 --script=http-waf-detect 192.168.255.134            #验证主机是否存在WAF
nmap -p 80,443 --script=http-waf-fingerprint 192.168.255.134       #精确定位所使用的WAF产品

存在WAF:
waf1.png

0x03 绕过防火墙进行扫描

1、碎片扫描

Nmap发送8个字节的数据包绕过防火墙/IDS/IPS。这种技术已经很古老了,但是在防火墙配置不当的时候依旧有用。
命令如下:

nmap -f 192.168.255.134

MTU,最大传输单元,它是碎片化的别名,我们可以自定义数据包大小(8的倍数)。

nmap -mtu 16 192.168.255.134

2、 诱饵扫描

利用Nmap增加发起扫描的主机,你不会从这些诱饵的主机中获得任何信息,但是却增加了防火墙查找真正发起扫描主机的难度。理想状态下,我们应该启动扫描前使用足够真实的“诱饵”主机,这样就可以降低目标机器的检测力度。
命令如下:

nmap -D RND:10 192.168.255.134  #随机生成十个诱饵
nmap -D 192.168.255.122,192.168.255.123,ME -p 21,80,445 -Pn 192.168.255.134
#-D开关表示实施一次诱饵扫描,-D后面紧跟选择好的诱饵主机的IP地址列表并且这些主机都在线。
#-Pn不发ping请求包,-p选择扫描的端口范围。“ME”可以用来代替输入自己主机的IP。

通过wireshark抓包可以查看到流量记录(也可使用tcpdump -i interface命令):
wireshark.png

3、空闲扫描

3.1、认识空闲主机

空闲主机是一台可用作欺骗目标IP地址且具有可预设的IP ID序列号的机器。

3.2、扫描空闲主机

  • 方法一:
    使用MSF的ipidseq模块,启动MSF在终端里输入use auxiliary/scanner/ip/ipidseq,将Required为yes的项填好后run即可进行扫描:

msf_ipidseq.png

  • 方法二:
    使用nmap提供的ipidseq脚本,命令如下:
nmap -p80 –open –script ipidseq <your ip>/24   #主机所在的网段进行探测
nmap -p80 –open –script ipidseq -iR 200        #网上随机寻找空闲主机

3.3、开启空闲扫描

命令如下:

nmap –P0 -sI zombie target

4、源端口哄骗

每个TCP数据包带有源端口号。默认情况下Nmap会随机选择一个可用的传出源端口来探测目标。该–source-port选项将强制Nmap使用指定的端口作为源端口。这种技术是利用了盲目地接受基于特定端口号的传入流量的防火墙的弱点。端口21(FTP),端口53(DNS)和67(DHCP)是这种扫描类型的常见端口。
命令如下:

nmap --source-port port target

nmap_source_port.png

5、发送报文时附加随机数据

许多防火墙通过检查数据包的大小来识别潜伏中的端口扫描。这是因为许多扫描器会发送具有特定大小的数据包。为了躲避那种检测,我们可以使用命令–data-length增加额外的数据,以便与默认大小不同。在下图中,我们通过加入25多个字节改变数据包大小。
命令如下:

nmap --data-length length target

data_length.png

6、随机化目标扫描顺序

--randomize-hosts选项告诉Nmap在扫描主机前对每个组中的主机随机排列,最多可达8096个主机。这会使得扫描针对防火墙和入侵检测系统检测来说变得不是很明显。
命令如下:

nmap --randomize-hosts targets

7、MAC地址哄骗

每台机器都有自己独特的mac地址。–spoof-MAC选项使您能够从一个特定的供应商选择一个MAC地址,选择一个随机的MAC地址,或者设定您所选择的特定MAC地址。 MAC地址欺骗的另一个优点是,你让你的扫描隐蔽,因为你的实际MAC地址就不会出现在防火墙的日志文件。
MAC地址有如下格式:

参数功能
0 (零)生成一个完全随机的MAC地址
指定MAC地址将使用指定的MAC地址
供应商名称从指定的供应商(例如Apple,Dell,3Com等)生成MAC地址

命令如下:

map -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target

8、发送错误的校验

在某些防火墙和IDS / IPS,只会检查有正确校验包的数据包。因此,攻击者通过发送错误校验欺骗IDS / IPS。
命令格式如下:

nmap --badsum target

9、Sun-RPC Grind扫描

什么是Sun RPC?

Sun RPC(远程过程调用)是用于实现包括NFS在内的许多服务的Unix协议。最初由Sun开发,但是现在可以在其他平台(包括Digital Unix)上广泛使用。也称为开放网络计算(ONC)。

Sun RPC软件包具有一个RPC编译器(rpcgen),该编译器会自动生成客户机和服务器的存根。

Nmap带有一个包含近600个RPC程序的数据库。许多RPC服务使用高端口编号或UDP传输协议,RPC程序(和基础结构库本身)也有长期的严重可远程利用的安全漏洞历史。因此,网络管理员和安全审核员通常希望了解有关其网络上任何RPC程序的更多信息。
我们可以通过以下命令获得RPC 的详细信息:

rpcinfo
或
rpcinfo -p host

rpc.png

Nmap可以通过以下三个步骤与开放的RPC端口直接通信来确定所有信息:

使用TCP或UDP扫描开放的端口。
-sV选项扫描使用Sun RPC协议的开放端口。
RPC暴力破解引擎会逐一向nmap-rpc数据库中记录的端口发送空命令,来判断RPC程序。当nmap猜测错误,会收到一条错误消息,指出请求的端口并没有运行PRC程序。当nmap耗尽了所有已知的记录,或者端口返回了非RPC的数据包,nmap才会放弃。

Last modification:March 27th, 2020 at 01:45 pm
如果觉得我的文章对你有用,请随意赞赏