Nmap使用教程(初级篇)

基本扫描技术

扫描单个网络

1
nmap 192.168.1.1/www.baidu.com

扫描多个网络/目标

1
nmap 192.168.1.1 192.168.1.2                #将扫描同个网段内不同的ip地址。

扫描连续的IP地址

1
2
nmap 192.168.2.1-192.168.2.100                #将扫描同个网段内不同的ip地址。
nmap 192.168.2.1/24 #nmap也可以用使用CIDR(无类别域间路由)表示法整个子网。

扫描目标列表

1
nmap -iL [LIST.txt]                #如果你有大量的系统进行扫描,就可以在文本文件中输入IP地址(或主机名),并使用该文件作为输入。

扫描随机目标

1
2
nmap -ir [主机数]                #该-IR参数可以用来选择随机Internet主机进行扫描。 NMAP会随机生成目标的指定数量,并试图对其进行扫描。
nmap 192.168.2.1/24 -exclude 192.168.2.10 # 该-exclude选项与用于从NMAP的扫描中排除主机。

侵入性扫描

1
nmap -A 主机                #最常用的选项,试图用一个简单字母A的替代长字符串。它也会执行路由跟踪等。

使用nmap探索

使用NMAP探索是非常有趣且对渗透测试非常有帮助。在发现过程中可以了解服务,端口号,防火墙的存在,协议,操作系统等,我们将一个接一个讨论。

不进行Ping

1
nmap -Pn 目标                #该-Pn选项指示nmap跳过默认的发现检查并对执行对目标的完整端口扫描。当扫描被阻止ping探针的防火墙保护的主机时,这是非常有用的。

仅进行Ping扫描

1
nmap -sP 目标                #选项-sP让NMAP仅对主机进行ping。当要探测一批ip地址中哪些是可达的时候非常有用。通过指定特定的目标,你可以得到更多的信息,比如MAC地址。

TCP SYN扫描

在我们开始之前,我们必须知道SYN数据包是什么?

基本上是一个SYN包被用于启动两个主机之间的连接。

TCP SYN握手连接时,Ping发送一个SYN包到目标系统,并监听响应。这种替代探索方法对被配置为阻止标准ICMP ping消息主机是有用的。

1
nmap -PS主机                #该-PS选项进行TCP SYN Ping。

TCP Ack Ping扫描

这种类型的扫描将只扫描确认(ACK)数据包。

1
nmap -PA 目标                #选项-PA对指定主机进行TCP Ack Ping扫描。

UDP Ping 扫描

1
nmap -PU 目标                #选项-PU对指定主机进行UDP Ack Ping扫描。

SCTP初始化Ping

1
nmap -PY 目标                #选项-PY指示的Nmap执行一个SCTP INIT Ping。此选项将包含一个最小的INIT块的SCTP包。这一探索方法试图找到使用流控制传输协议(SCTP)主机。 SCTP通常用于对基于IP的电话系统。

ICMP Echo ping

1
nmap -PE 目标                #选项-PE将对指定主机执行ICMP(互联网控制消息协议)回显Ping。

ICMP 时间戳 ping

1
nmap -PP 目标                #选项-PP执行一次ICMP时间戳ping。

ICMP 地址掩码 ping

1
nmap –PM 目标                #选项-PM 进行ICMP 地址掩码 ping.

IP 协议 Ping
一个IP协议的ping发送带有指定的协议目标的数据包。如果没有指定的协议,则默认的协议1(ICMP)、2(IGMP)和4(IP中的IP)的使用。

1
nmap -PO 目标                #选项-PO执行IP协议Ping扫描

ARP Ping扫描

1
nmap -PR 目标               #该-PR选项指示的Nmap对指定目标执行ARP(地址解析协议)ping操作。

扫描本地网络时,-PR选项会自动暗中启用。这种类型的发现是比其它Ping的方法快得多。

路由跟踪

1
nmap -traceroute 目标               #选项-traceroute可被用于跟踪的网络路径指定的主机。

强制反向DNS解析

1
nmap -r 目标               #选项-r指示的Nmap始终执行对目标IP地址的反向DNS解析。

选项-r在对一个IP段进行侦查时非常有用,Nmap将尝试查询每个ip地址的反向DNS信息

禁用反向DNS解析

1
nmap -n 目标               #选项-n用于禁用反向DNS解析

反向dns解析会很明显的减慢Nmap扫描的过程。使用-n选项大大降低了扫描时间,尤其是扫描大量主机的时候。如果你不关心目标系统的DNS信息,并愿意执行产生更快的结果扫描此选项很有用。

选择DNS查找方法

1
nmap -system-dns 目标               #选项-system-dns指示NMAP使用主机系统自带的DNS解析器,而不是其自身内部的方法。

手动指定DNS服务器

1
nmap -dns-server server1 server2 目标               #选项-dns-servers用于扫描时手动指定DNS服务器进行查询。

选项-dns-servers允许您为nmap的查询指定一个或多个备用服务器,这对于没有配置DNS,或者如果你想防止您的扫描查找出现在您的本地配置的DNS服务器的日志文件系统非常有用。

清单扫描

1
nmap -sL 目标               #选项-sL将显示一个列表,并执行指定的IP地址反向DNS查找。

TCP SYN扫描

1
nmap -sS 目标               #它可以在不受防火墙限制的高速网络每秒扫描数千个端口 。同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接。

SYN扫描是默认的且最流行的扫描选项是有一定原因的。

TCP连接扫描

1
nmap -sT 目标               

当SYN扫描不可用的时候,TCP连接扫描是默认的TCP扫描类型。这是在用户不具有发送RAW数据包的特权的情况下。不是像大多数其他扫描器那样写原始数据包,nmap要求底层的操作系统通过发出连接系统调用来建立与目标机和端口的连接。

UDP扫描

虽然互联网上最流行的服务运行在TCP协议,但UDP服务也是广泛部署的。DNS,SNMP和DHCP(注册端口53,161/162,和67/68)这三种最常见的UDP服务。因为UDP扫描通常比TCP慢和更加困难,一些安全审计员忽略这些端口。这是一个错误,因为UDP服务是相当普遍,攻击者也不会忽略整个协议。

1
nmap -sU 目标               

选项-data-length可以用来固定长度的随机有效载荷发送到每一个端口或(如果指定0值)来禁用有效载荷。如果返回一个ICMP端口不可达错误(类型3,代码3),那么端口是关闭的。其他ICMP不可达错误(类型3,编码1,2,9,10或13)标记端口过滤。有时服务会返回一个UDP包响应以证明它是开放的。如果重发后没有收到回应,端口被列为开放或者过滤。

1
nmap -sU–data-length=value 目标

SCTP INIT扫描
SCTP是对TCP和UDP协议的相对较新的替代方案,结合TCP和UDP最具特色的部分,同时也增加了新的功能,如多宿主和多流。它主要被用于SS7 / SIGTRAN相关的服务,但有可能被用于其他用途。 SCTP INIT扫描SCTP相当于TCP SYN扫描。它可以在不受防火墙限制的高速网络每秒扫描数千个端口。像SYN扫描,扫描INIT相对不显眼的和隐蔽的,因为它永远不会完成SCTP连接。

1
nmap -sY 目标

探测防火墙状态

利用FIN扫描的方式探测防火墙的状态。FIN扫描用于识别端口是否关闭,收到RST回复则说明该端口关闭,否则就是open或filtered状态。

1
nmap -sF 目标

TCP NULL和Xmas扫描

1
2
3
4
5
6
7
· NULL扫描(-sN)

不设置任何位(TCP标志标头是0)。

· Xmas扫描(-sX)

设置FIN,PSH,URG和标志。

TCP ACK扫描

1
nmap -scanflags=value -sA 目标                #这种扫描跟其他方式不同的地方在于它没有判断端口的开放情况。用来绘制出防火墙规则,对哪些端口进行了保护。

该ACK扫描探测报文只具有ACK标志设置(除非您使用-scanflags)。当扫描未经过系统过滤,打开和关闭的端口都将返回一个RST包。 NMAP然后把它们标记为未过滤的,这意味着它们是ACK包可达的。

TCP 窗口扫描

1
nmap -sW 目标                #窗口扫描跟ACK扫描是几乎一样的,除了它利用某些系统的实现细节来区分端口的,而不是当返回一个RST时总是认为端口未经过滤。

TCP Maimon 扫描

1
nmap -sM 目标                

Maimon 扫描的名字来源于它的发现者,Uriel Maimon。他在Phrack杂志问题#49(1996年11月)中描述的技术。这种技术与NULL,FIN和Xmas扫描类似,唯一的不同之处在于探针是FIN/ ACK。

自定义的TCP扫描使用-scanflag选项

对于渗透测试,一个渗透测试人员不会使用一般的TCP扫描比如ACK、FIN等,因为这些东西可以被IDS / IPS阻断。因此他们将通过指定“-scanflag”选项使用一些不同的技术。这也可以用于绕过防火墙。

该-scanflags的参数可以是一个数字标记值如9(PSH和FIN),但使用符号名称更容易。只是URG,ACK,PSH,RST,SYN和FIN的任意组合。例如,-scanflags URGACKPSHRSTSYNFIN所有设置,虽然扫描时不是非常有用的。

1
nmap –scanflags 目标                

SCTP COOKIE ECHO扫描

SCTP COOKIE ECHO扫描是一种更先进的SCTP扫描。SCTP会默认丢弃开放端口返回的包含COOKIE ECHO数据包块,但如果端口关闭则发送中止。这种扫描方式优点是,它并不像INIT扫描一样明显。除此之外,无状态防火墙会阻断INIT块而不是COOKIE ECHO块。但一个优秀的IDS仍能够探测到SCTP COOKIE ECHO扫描SCTP COOKIE ECHO扫描的缺点是无法区分开放和过滤的端口。

1
nmap -sZ 目标                

TCP空闲扫描

这种先进的扫描方法允许对目标进行一个真正的盲目TCP端口扫描(即没有数据包从你的真实IP地址发送到目标)。相反独特的侧信道攻击利用僵尸主机上可预测的IP分段ID序列生成来收集关于目标的开放端口的信息。IDS系统只会显示扫描是从您指定的僵尸机发起。这在进行MITM(中间人攻击)非常有用的。

1
nmap -sI zombie 目标               #选项-sL将显示一个列表,并执行指定的IP地址反向DNS查找。

这里简单介绍下空闲的原理:

1
2
3
4
5
1、向僵尸主机发送SYN/ACK数据包,获得带有分片ID(IPID)的RST报文。 

2、发送使用僵尸主机IP地址的伪数据包给目标主机。 如果目标主机端口关闭,就会向僵尸主机响应RST报文。如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文,此时IPID号开始增长。

3、通过向僵尸主机发送另一个SYN/ACK报文以退出上述循环并检查僵尸主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1。 重复上述步骤直到检测完所有的端口。

接下来是进行空闲扫描的步骤:
1、寻找合适的僵尸主机

一个常见的方法就是在NMAP下执行Ping扫描一些网络。你可以选择NMAP提供的随机IP选项(-iR),但是这很有可能造成与Zombie主机之间的大量延迟。

在Zombie主机候选列表中执行一个端口扫描以及操作系统识别(-o)比简单的使用Ping命令筛选更容易找寻到合适的。只要启动了详细模式(-v),操作系统检测通常会确定IP ID增长方法,然后返回“IP ID Sequence Generation: Incremental”。如果这个类型被作为增长或是破损的低字节序增长量,那么该机是不错的僵尸主机备选。

还有一种方法是对运行ipidseq NSE脚本。该脚本探测一台主机的IP ID生成方法并进行分类,然后就像操作系统检测一样输出IP ID分级。

1
NMAP --script ipidseq [ --script-args probeport=port] 目标

我们也可以使用hping用于发现僵尸主机。

首先选择使用Hping3发送数据包,并观察ID号是不是逐一增加,那么该主机就是空闲的。如果ID号随意增加,那么主机实际上不是空闲的,或者主机的操作系统没有可预测的IP ID。

1
hping3 -s 目标

发送伪造SYN包到你指定的目标主机上的端口。

1
hping3 -spoof 僵尸主机 -S p 22 目标

正如你所看到的,没有任何反应,这表明数据包100%的丢失。这意味着我们并没有发现僵尸主机。同时我们将检查确认以下的步骤。

1
hping3 -S 目标                #检查PID值是否逐一增加

2、使用NMAP进行攻击

1
NMAP -Pn -p- -sI 僵尸主机 目标

首先我们用NMAP扫描僵尸主机的端口:

发现僵尸主机22端口是关闭着的。

我们指定利用僵尸主机的22端口进行空闲扫描,结果显而易见,无法攻击目标。

默认情况下,NMAP的伪造探针使用僵尸主机的80端口作为源端口。您可以通过附加一个冒号和端口号僵尸名选择一个不同的端口(例如www.baidu.com:90)。所选择的端口必须不能被攻击者或目标过滤。僵尸主机的SYN扫描会显示端口的开放状态。

这里解释下参数的含义:

1
2
3
4
5
-Pn:防止NMAP的发送初始数据包到目标机器。

-p-:将扫描所有65535个端口。

-sI:用于闲置扫描和发送数据包欺骗。

TCP空闲扫描

作为一个渗透测试人员,我们必须明白nmap TCP空闲扫描的内部运行原理,然后用我们自己的方法来实现同样的事情。为此,我们将使用NMAP的数据包跟踪选项。

1
nmap -sI 僵尸主机:113 -Pn -p20-80,110-180 -r - packet-trace -v 目标                #-Pn是隐身的必要,否则ping数据包会用攻击者的真实地址发送到目标。未指定-sV选项是因为服务识别也将暴露真实地址。 -r选项(关闭端口随机化)让这个例子运行起来更简单。

nmap首先通过发送6个 SYN / ACK数据包并分析响应,测试僵尸主机的IP ID序列生成。在这里R表示复位包,意味该端口不可达。

正如我之前说的,成功的攻击需要选择一个合适的僵尸主机端口。

TCP空闲扫描原理:

众所周知,空闲扫描允许完全盲端口扫描。 攻击者实际上可以扫描目标,而无需从自己的IP地址向目标发送单个数据包! 取而代之的是,旁道攻击可以使扫描从无辜的“僵尸主机”反弹。 入侵检测系统(IDS)的报告会将无辜的僵尸指为攻击者。 除了非常隐秘之外,此扫描类型还允许发现机器之间基于IP的信任关系。

尽管空闲扫描比到目前为止讨论的任何技术都复杂,但可以归纳出如下基本特点:

1
2
3
4
5
确定TCP端口是否打开的一种方法是将SYN(会话建立)数据包发送到该端口。 如果端口打开,则目标计算机将以SYN / ACK(会话请求确认)数据包进行响应,如果端口是关闭的,则将以RST(重置)数据包进行响应。 这是前面讨论的SYN扫描的基础。

收到未经请求的SYN / ACK数据包的计算机将以RST响应。 未经请求的RST将被忽略。

Internet上的每个IP数据包都有一个片段标识号(IP ID)。 由于许多操作系统只是为它们发送的每个数据包增加该数字,因此探测IPID可以告诉攻击者自上次探测以来已发送了多少个数据包。

通过组合这些特征,可以在伪造您的身份的同时扫描目标网络,以使它看起来像是无辜的僵尸机器进行的扫描。

空闲扫描步骤

从根本上说,空闲扫描包括三个步骤,每个端口都重复进行以下操作:

1
2
3
4
5
探测僵尸主机的IP ID并记录下来。

伪造来自僵尸主机的SYN数据包,并将其发送到目标上的所要探测的端口。 根据端口状态,目标的反应可能会或着不会导致僵尸主机的SYN数据包的IP ID增加。

再次探测僵尸主机的IP ID。 然后,通过将此新IP ID与步骤1中记录的IP ID进行比较,来确定目标端口状态。

在此过程之后,僵尸主机的IP ID应该增加一到两个。增加1表示僵尸主机除了向攻击者的探测回复外没有发送任何数据包。缺少发送的数据包意味着端口未打开(目标必须向僵尸发送了RST数据包,该数据包被忽略,或者什么都没有发送)。增加两个表示僵尸在两个探测器之间发送了一个数据包。这个额外的数据包通常意味着端口是开放的(目标可能会响应伪造的SYN数据包而向僵尸主机发送SYN / ACK数据包,从而导致了僵尸主机发送了RST数据包)。大于2的增量通常表示恶意僵尸主机。它可能没有可预测的IP ID号,或者可能参与了与空闲扫描无关的通信。

即使已关闭的端口的情况与过滤的端口稍有不同,但攻击者在两种情况下的测量结果相同,即IP ID增加1。*因此,空闲扫描无法区分关闭并过滤端口。 * Nmap记录IP ID增加1时,表示端口已关闭或者已过滤。

对于那些想要了解更多细节的人,以下三个图准确显示了在打开,关闭和过滤端口的三种情况下发生的情况。


图1 空闲扫描开放端口

图2 空闲扫描关闭端口

图3 空闲扫描过滤端口

TCP空闲扫描是真正的隐身扫描。 Nmap提供了诱饵扫描(-D)来帮助用户屏蔽其身份,但是(不同于空闲扫描)攻击者仍然需要攻击者从其真实IP地址向目标发送一些数据包,以获取扫描结果。 空闲扫描的一个结果是,入侵检测系统通常会发送警报,声称僵尸计算机已对其发起了扫描。

寻找在进行空闲扫描的僵尸主机

执行IP ID空闲扫描的第一步是找到合适的僵尸。它需要在全局(而不是与其通信的每个主机)的基础上递增地分配IP ID数据包。它应该是空闲的(因此具有扫描名称),因为无关的流量会增加其IP ID序列,从而混淆扫描的逻辑。

尝试进行空闲扫描时,Nmap会测试建议的僵尸并报告其任何问题。如果一个不起作用,请尝试另一个。僵尸候选人并不难找到足够的互联网主机。由于主机需要处于空闲状态,因此选择知名主机(例如www.yahoo.com或google.com)几乎是行不通的。我们不仅在上图中选择了打印机图标来代表僵尸主机,还有其他简单有趣的网络设备通常会成为巨大的僵尸,因为它们通常都未被充分利用(闲置),并且内置了简单的网络堆栈,容易受到IP ID流量检测的攻击。

一种常见的方法是简单地执行某些网络的Nmap ping扫描。您可以使用Nmap的随机IP选择模式(-iR),但是这很可能会导致遥远的僵尸出现大量延迟。选择靠近您的源地址或目标位置的网络会产生更好的结果。您可以尝试从ping扫描结果中使用每个可用主机进行TCP空闲扫描,直到找到一个有效的主机为止。

在候选的僵尸网络上执行端口扫描和OS标识(-O)而不是仅执行ping扫描有助于选择一个好的僵尸。只要启用了详细模式(-v),OS检测通常就会确定IP ID序列生成方法并打印一行,例如“ IP ID序列生成:增量”。如果将类型指定为“增量”或“小尾数递增”,则该机器是不错的僵尸候选对象。这仍然不能保证它会正常工作,因为Solaris和其他一些系统会为与它们通信的每个主机创建一个新的IP ID序列。主机也可能太忙。操作系统检测和开放端口列表还可以帮助识别可能处于空闲状态的系统。

识别僵尸候选者的另一种方法是针对主机运行ipidseq NSE脚本。该脚本探测主机以对其IP ID生成方法进行分类,然后像操作系统检测一样打印IP ID分类。像大多数NSE脚本一样,ipidseq.nse可以针对许多主机并行运行,这使得它在扫描整个网络以寻找合适的主机时成为另一个不错的选择。

虽然确定合适的僵尸需要一些初步工作,但您可以继续重复使用那些好的僵尸。

执行空闲扫描

一旦找到合适的僵尸,进行扫描就很容易了。 只需将僵尸主机名指定给-sI选项,其余的由Nmap完成。 例5.19展示了Ereet通过在名为Kiosk的Adobe机器上启动空闲扫描来扫描美国唱片业协会的示例。

针对RIAA的空闲扫描

从上面的扫描中,我们了解到RIAA不太注重安全性(请注意开放的端口PC anywhere等端口)。 由于它们显然没有防火墙,因此它们不太可能具有IDS。 但是,如果这样做,它将显示kiosk.adobe.com作为第一扫描者。 -Pn选项可防止Nmap将初始ping数据包发送到RIAA计算机。 不加-Pn ,则会泄露真实地址。 由于指定了-p-来扫描所有端口(1-65535),因此扫描花费了很长时间。 由于该地址(kiosk.adobe.com)已被移除,请勿尝试使用该地址进行扫描。

默认情况下,Nmap将僵尸网络的源端口80伪装为目标探针。 我们可以通过在所用的僵尸网络后附加冒号和端口号来选择其他端口(例如-sI kiosk.adobe.com:113)。所选端口必须不得被攻击者机器或目标机所过滤的。

IP协议扫描

1
nmap -sO 目标                #IP协议扫描可以让您确定哪些IP协议(TCP,ICMP,IGMP等)是目标机器的支持。

这不是技术上的端口扫描,因为只是IP协议号的循环而不是TCP或UDP端口号。

FTP弹跳扫描

1
nmap –b ftp rely host                #这允许用户连接到一个FTP服务器,然后文件被发送到目标主机

NMAP会发送文件到你指定的目标主机上的端口,通过错误消息判断该端口的状态。
这是绕过防火墙的好方法,因为相对于互联网上的主机,公司或组织的FTP服务器经常被放置在可被内网访问的范围中。它的格式为:@:。 是一个脆弱的FTP服务器的名称或IP地址。

FTP弹跳扫描

1
nmap –b ftp rely host                #这允许用户连接到一个FTP服务器,然后文件被发送到目标主机

如使用用户名“username”,密码为“password”的FTP服务器“FTP server.tld”,ftp端口则是21,用于扫描的文件是服务器上的victim.tld。

1
nmap -T0-b username:password@ftpserver.tld:21 victim.tld

如果FTP服务器支持匿名登录,就不用填写“username:password@”部分。如果FTP端口是默认的21,也可以省略不写,但如果FTP端口是21之外的必须得指明。

端口规范和扫描顺序

除了所有的前面讨论的扫描方法,NMAP提供选项用于指定被扫描的端口和扫描顺序是随机的或顺序的。默认情况下NMAP扫描最常见的1000个端口。

-p<端口范围>(只扫描指定的端口)

此选项指定要扫描的端口范围,并覆盖默认。单个端口号也行,因为是用连字符(例如1-1023)分割范围。范围的起始或结束可以被省略,NMAP会分别使用1和65535。所以你可以指定-p-,相当于从1到65535进行扫描。

1
nmap -p1-1023 目标

也可以指定用于端口扫描的协议类型,比如T代表TCP,U代表UDP,S代表SCTP,P代表IP。

1
nmap -p U:53,111,137,T:21-25,80,139,8080 目标

-F(快速(有限的端口)扫描)

指定比默认情况下更少的端口数。

1
nmap -F 目标                #通常情况下的NMAP扫描每个扫描协议中最常见的1000个端口。用-F将会减少到100个。

-r(不要随机端口)

默认情况下NMAP会随机扫描端口,但您可以指定-r为顺序(从最低到最高排序)端口扫描来代替。

1
nmap -r 目标              

在接下来的部分,我们将使用NMAP绕过防火墙,创建自定义利用程序。
众所周知NMAP是经常用来进行端口发现、端口识别。除此之外我们还可以通过NMAP的NSE脚本做很多事情,比如邮件指纹识别,检索WHOIS记录,使用UDP服务等。

获取Whois记录信息

WHOIS记录通常包含如注册人的姓名和联系方式的重要数据。虽然这里有很多工具可以查询WHOIS协议,但NMAP的证明了自身的优秀,因为它能够批量处理IP范围和主机列表。

1
nmap --script whois 目标

参数–script whois告诉NMAP去查询区域互联网注册管理机构WHOIS数据库,来获得目标的whois记录。这个脚本使用IANA分配的数据选择RIR并在本地缓存结果。或者我们可以覆盖这一行为,指定whois数据库的提供商并依次查询。

1
nmap --script whois --script-args whois.whodb=arin+ripe+afrinic <目标>

脚本将会按顺序在WHOIS提供商中查询记录或者推荐记录,要忽略推荐记录请指定参数值nofollow。

1
nmap --script whois --script-args whois.whodb=nofollow <目标>

要批量查询的主机名列表(-iL <文件名>)的WHOIS记录而不启用端口扫描(-sn)。

1
nmap -sn –script whois -v -iL hosts.txt                 #(hosts.txt包含主机或者ip的列表)

有时候whois查询返回的是缓存的结果而不是最新的,可以指定参数禁止查询缓存。

1
nmap -sn --script whois -script-args whois.whodb=nocache scanme. Nmap.org                #禁用whois缓存

检查主机是否有恶意行为

NMAP通过调用谷歌安全浏览服务API来检查主机是否进行恶意软件分发或者网络钓鱼攻击的行为。
使用脚本http-google-malware之前,先获取谷歌安全浏览服务API的密钥:https://developers.google.com/safe-browsing/key_signup?csw=1

1
nmap -p80 --script http-google-malware -v scanme.Nmap.org

收集有效的邮箱

收集邮箱对渗透测试非常有用,我们可以对这些邮箱进行钓鱼工具或者暴力破解攻击。NMAP可以进行邮箱的收集,但是脚本http-google-email不在NMAP的官方资料库中,我们需要手动下载https://seclists.org/nmap-dev/2011/q3/att-401/http-google-email.nse,并把它复制到本地脚本目录。

1
nmap -p80 --script http-google-email <目标>

注:我们可以手动更新脚本数据库:

1
nmap -script-updatedb
nse脚本参数

选项–script-args是用于设置NSE脚本的参数。例如:

1
nmap -sV --script http-title --script-args http.useragent=”Mozilla 999 ” <目标>                #此命令设置了参数useragent的值。

猜测操作系统
如果NMAP无法确定操作系统类型,通过选项–osscan-guess强制识别os。

1
nmap -O –osscan-guess 目标

它将列出的NMAP脚本数据库操作系统的所有可能的匹配。–fuzzy可以用作–osscan-guess的快捷方式。

如果目标至少有一个开放和一个关闭的TCP端口那么操作系统的类型识别会比较有效。选项–osscan-limit将会使NMAP不对没有满足这个要求的目标进行操作系统的识别。这样可以节省大量的时间,尤其是在对许多主机-Pn扫描。它只与选项-O或者-A搭配使用。

执行RPC扫描

选项-sR对目标进行RPC(远程过程调用)扫描

1
nmap -sR 目标

上述-sR扫描的输出显示有关目标系统上运行的RPC服务的信息。RPC与Unix和Linux系统上的NFS(网络文件系统)服务关系很紧密。

Nmap扫描使用-hostmap选项

此hostmap脚本基于第三方服务,而官方版本只支持BFK的DNS历史记录。正如我前面所说的,下载脚本https://svn.nmap.org/nmap/scripts/hostmap-bfk.nse并更新nmap的脚本数据库,然后执行命令:

1
nmap -p80 –script hostmap Nmap.org

这些参数–script hostmap -p80告诉Nmap的启动HTTP版的hostmap脚本,并限制只扫描80端口以加快这一任务。

该hostmap.nse查询两个不同的Web服务:BFK DNS记录和ip2hosts.com。 BFK DNS记录是一项免费服务,从公共DNS数据和ip2hosts收集其信息。这两项服务都是免费的,滥用他们将很有可能让你禁止使用该服务。

可以设定参数指定不同的搜索引擎。

1
2
3
4
5
nmap -p80 –script hostmap –script-args hostmap.provider=BING  <目标>

nmap -p80 –script hostmap –script-args hostmap.provider=BFK <目标>

nmap -p80 –script hostmap –script-args hostmap.provider=ALL <目标>

为了保存扫描每个IP的主机名,使用参数hostmap.prefix。设置此参数将在我们的工作目录下创建一个<前缀><目标>文件名的文件:

1
nmap -p80 –script hostmap-script-ARGS hostmap.prefix=hostfile <目标>

暴力破解DNS记录

这是用于试图通过暴力枚举DNS主机名猜测常见的子域。指定DNS-brute.srv,dns-bruter也将尝试列举常见的DNS SRV记录。

Nmap的时间选项

作为一个渗透测试人员,我们通常会在NMAP上设置时间选项,但我们必须得了解时间选项是什么,为什么要设置这个选项?

我们使用NMAP的时候经常会遇到防火墙,这些防火墙会阻碍某些请求。我们会根据需求设置时间选项以加快或减慢NMAP的扫描速度。

当在快速网络中(比如内网)扫描大量的主机时,我们可能需要增加并行操作的数量以便更快的获得结果。另外在扫描速度慢的网络时(或在互联网上),你可能需要减慢扫描速度以获得更准确的结果,或者逃避入侵检测系统。下面是一些nmap的时间选项。

时间参数

默认情况下我们扫描使用的Nmap是在几秒钟内开始扫描。但是我们可以通过设置时间参数进一步提高性能。NMAP支持下列的时间格式:

1
2
3
4
5
6
7
M-分钟

S-秒

MS-毫秒

H-小时

有时如何选择时间参数可能会让人感到困惑,我们将设置多少时间用于扫描。要解决这些问题,NMAP的提供了如下多种扫描时序选项。

1
Nmap -T[0-5] 目标
选项0:

这是一个非常缓慢的扫描选项,以便防火墙或IDS不会阻断该请求

1
Nmap -T0 目标
选项1:

比选项0稍微快一点点的扫描速度,用于绕过防火墙和IDS。

1
nmap -T1 目标

虽然T0和T1对于避免IDS报警非常有用,但它们将会花非常多的时间来扫描数千个端口或者服务器。

选项2:

比较“礼貌”的选项,占用较少的带宽以及目标计算机的资源。

1
nmap -T2 目标
选项3:

常规的扫描速度和资源占用。

1
Nmap -T3 目标                #nmap的默认选项
选项4和5:

在T4和T5是一个非常快速和侵略性的扫描。假设在一个相当快速和可靠的网络中,T4可以加速扫描。T5则是在此基础之上牺牲了准确性。

1
nmap -T4/-T5 目标

Nmap的并行选项:

作为一个渗透测试人员,我们不应该通过一个接一个的扫描浪费我们的时间。相反,我们可以通过并行扫描来优化。NMAP将目标IP段进行分组,然后在一次扫描一个组。一般情况下较大的分组是更有效的。缺点直到整个分组完成才能知道目标主机的情况。

并行处理有两个选项:最大值和最小值。

最小值

1
Nmap –min-parallelism [数量] [目标]                #选项–min-parallelism用于指定并行端口扫描操作的最小数量。

手动设置–min-parallelism选项可能会提升扫描性能,设置过高可能会产生不准确的结果。

最大值

1
Nmap –max-parallelism [数量] [目标]                #选项–max-parallelism用于指定并行端口扫描操作的最大数量。

Nmap主机分组大小选项:

nmap也可以设置主机分组的最大值和最小值。

最大值

1
Nmap –max-hostgroup [数目] [目标]                #选项–max-hostgroup用于指定的Nmap并行扫描主机数的最大值。

最小值

1
Nmap –min-hostgroup [数目] [目标]                #选项–min-hostgroup用于指定的Nmap并行扫描主机数的最小值。

在扫描一个IP段或整个子网时NMAP将并行扫描多个目标以节省时间。默认情况下,基于扫描类型和网络条件Nmap会自动调整正在执行的主机组的大小。通过指定–min-hostgroup选项,Nmap尝试保持主机组的大小为指定值。
设置最大值会有效避免网络拥堵和避免网内安全设备的告警。

参考链接:
TCP Idle Scan (-sI) | Nmap Network Scanning
Nmap中文手册 - Nmap中文网
Nmap Development Mailing List
- Revision 38560: /nmap

–EOF–

转载:https://www.cnblogs.com/H4ck3R-XiX/p/12231851.html