Nmap 高级端口扫描
Nmap 高级端口扫描
tcp数据包的相关标志:
TCP Null Scan, FIN Scan, and Xmas Scan
NUll Scan(空扫描)
空扫描:-sN 没有设置标志的TCP数据包,当这个数据包发送到目标服务时,如果端口开放就没有返回结果,或者是被防火墙阻挡了也没有返回结果。
但这个有一个缺陷就是,没有返回的数据包,可能是被防火墙给阻挡了,并不能进行一个全面的判断。
如果没有设置标志的tcp数据包发送到端口关闭的服务上时,会返回RST,ACK数据包。
FIN Scan
FIN SCAN:-sF
跟空扫描不同的是,FIN扫描是发送带有FIN标志的tcp数据包,如果端口开放或者被防火墙阻挡,不返回结果。
如果端口关闭的话,就会返回RST,ACK数据包。值得注意的是,有些防火墙会偷偷的丢弃流量,而不返回RST,ACK。
Xmas Scan
Xmas Scan: -sX
带有FIN、PSH 和 URG 标志的tcp数据包。
跟上面的情况一样,如果收到了RST数据返回,说明端口关闭。
这三种扫描类型最有效的一种情况是扫描无状态(非状态)防火墙后面的目标。无状态防火墙将检查传入数据包是否设置了 SYN 标志以检测连接尝试。使用与 SYN 数据包不匹配的标志组合可以欺骗防火墙并到达其后面的系统。但是,有状态防火墙实际上会阻止所有此类精心设计的数据包并使这种扫描变得毫无用处。
TCP Maimon 扫描
TCP Maimon 扫描: -sM
tcp数据包设置了FIN和ACK。目标系统会发送RST来作为响应,无论TCP端口是否打开,大多数目标系统都会以 RST 数据包进行响应。在这种情况下,我们将无法发现打开的端口。此扫描不适用于现代网络中遇到的大多数目标。
TCP ACK, Window, and Custom Scan
TCP ACK扫描
向目标服务器发送一个带有ACK标志的TCP数据包。
TCP ACK扫描:-sA
无论端口状态如何,目标都会使用 RST 响应 ACK。此扫描不会告诉我们目标端口是否打开。
在目标服务器安装防火墙之前,没什么太大的用处,显示不了端口的信息。但在目标服务器安装防火墙之后,用处就大大提高了,发送带有ACK标志的数据包,没有返回结果的,就是被防火墙给阻挡了,但返回RST数据包的,就是防火墙没有阻挡的。这种类型的扫描更适合发现防火墙规则集和配置。
TCP Window扫描
TCP Window扫描:-sW
TCP窗口扫描与 ACK 扫描几乎相同;但是,它会检查返回的 RST 数据包的TCP窗口字段。
TCP Custom扫描
这个是自定义标志位的tcp数据包,但需要了解不同端口的行为方式,以便正确解释不同场景中的结果。
尝试使用设置了重置标志的自定义 TCP 扫描
*nmap --scanflags RST ip*
最后,必须注意的是,ACK 扫描和窗口扫描在帮助我们规划防火墙规则方面非常有效。但是,必须记住,仅仅因为防火墙没有阻止特定端口,并不一定意味着服务正在侦听该端口。例如,可能需要更新防火墙规则以反映最近的服务更改。因此,ACK 和窗口扫描暴露的是防火墙规则,而不是服务。
欺骗和诱饵
在某些网络中我们会使用伪造的ip和mac地址来扫描目标服务器。这种扫描仅在可以保证捕获响应的情况下才有用。
nmap -S 伪造ip 源ip
简单来说使用欺骗ip进行扫描分为三步:
1.伪造ip,向目标服务器发送数据请求。
2.目标服务器向伪造的ip发送响应。
3.攻击者从中进行捕获,找出开放的端口。
nmap -e NET_INTERFACE -Pn -S SPOOFED_IP MACHINE_IP
-e指定网络接口 -P禁止使用ping
如果攻击者系统无法监控网络响应,则此扫描将毫无用处。
当我们和目标服务器处于同一子网中时,可以伪造mac地址。
nmap --spoof-mac SPOOFED_MAC MACHINE_IP
欺骗仅在满足特定条件的极少数情况下有效,因此攻击者会使用诱饵来增加被识别的难度。
原理:让扫描看起来来自多个ip,让真实的ip丢失在其中。
nmap -D ip1,ip2,ME MACHINE_IP
将使 MACHINE_IP 的扫描显示为来自IP1,ip2 然后ME
表示真实的IP地址应出现在第三顺序中
nmap -D IP1,IP2,RND,RND,ME MACHINE_IP
第三个和第四个ip是随机的 然后第五个代表真实的ip地址。
碎片数据包
把数据包分为几个小部分,对降低IDS和防火墙检测有一些帮助。
-f将数据包分为8个字节或者更少的字节,-ff将数据包分为16个字节。–mtu可以更改数据包分几个字节的大小,但应该是8的倍数。
Idle/Zombie Scan(空闲/僵尸扫描)
伪造源ip是有一定限制条件的,如果不能进行流量监控的话,就不能进行源ip的伪造。此时,利用空闲/僵尸扫描可以进行一个升级。
空闲/僵尸扫描就是找一个极少使用的空闲系统(我们可以联通),通过ip id的数量差值来判断端口是否开放。
nmap -sI 空闲主机ip 目标主机ip
步骤:
1.首先向空闲/僵尸主机发送一个SYN/ACK的数据包,空闲主机会向攻击者回复一个IP ID。
2.攻击者再向目标主机发送一个SYN/ACK的数据包,该数据包应该被伪装成来自空闲/僵尸主机的ip。
3.再向空闲主机发送一个SYN/ACK的数据包,空闲主机会再次发送一个IP ID,将第一个IP ID和第三个IP ID进行一个对比,如果差值为2的话端口就开放,就一个的话端口就关闭。
下面用tryhackeme的图来解释一下:
攻击者系统正在探测一台空闲的机器,一台多功能打印机。通过发送 SYN/ACK,它会用一个包含其新增加的 IP ID 的 RST 数据包进行响应。
攻击者将向下一步想要检查目标机器的TCP端口发送 SYN 数据包。但是,此数据包将使用空闲主机(僵尸)IP 地址作为源。将出现三种情况。在第一种情况下,如下图所示, TCP端口已关闭;因此,目标机器使用 RST 数据包响应空闲主机。空闲主机不响应;因此其 IP ID 不会增加。
第二种情况,如下所示,TCP端口是开放的,因此目标机器向空闲主机(僵尸主机)响应 SYN/ACK。空闲主机用 RST 数据包响应这个意外数据包,从而增加其 IP ID。
第三种情况是,目标机器由于防火墙规则而完全没有响应。这种没有响应的情况与关闭端口的情况一样,闲置的主机不会增加 IP ID。
最后一步,攻击者向空闲主机发送另一个 SYN/ACK。空闲主机用 RST 数据包响应,再次将 IP ID 加一。攻击者需要将第一步收到的 RST 数据包的 IP ID 与第三步收到的 RST 数据包的 IP ID 进行比较。如果差值为 1,则表示目标计算机上的端口已关闭或被过滤。但是,如果差值为 2,则表示目标上的端口已打开。
如果我们选择的并不是空闲主机,返回回来的IP ID是无用的。
nmap -sS --reason ip
可让我们明确了解 Nmap 为何认为系统已启动或某个特定端口已打开。
为了获取更详细的输出,-使用-v/-vv 或者使用-d