0x01 Nmap

发布时间 2023-12-11 23:07:31作者: Kruskal

Task1、部署机器

 Task2、引言

怎么进行端口扫描?为什么有必要?

端口连接主要通过使用本地计算机上的不同端口建立与远程网络服务器的连接来完成的。端口扫描主要通过nmap实现,nmap 会依次连接目标的每个端口。根据端口的响应,可以确定它是开放、关闭还是被过滤(通常是被防火墙过滤)。知道哪些端口是开放的后,我们就可以枚举每个端口上运行的服务了--可以手动枚举,也可以使用 nmap 进行更常见的枚举。

必要性:如果我们不知道服务器打开了哪些端口,那么我们就没有成功攻击目标的希望

Task3、Nmap命令

使用man nmap或者nmap -h完成以下问题:

 

 Task4、扫描类型概述

使用Nmap进行端口扫描时,有三种基本扫描类型

  • TCP 连接扫描 (-sT)
  • SYN“半开”扫描 (-sS)
  • UDP 扫描 (-sU)

此外,还有几种不太常见的端口扫描类型

  • TCP 空扫描 (-sN)
  • TCP FIN 扫描 (-sF)
  • TCP Xmas 扫描(-sX)

Task5、扫描类型 TCP 连接扫描

三次握手:

 TCP Connect 扫描的工作原理是依次与每个目标端口执行三向握手。Nmap 尝试连接到每个指定的 TCP 端口,并通过收到的响应来确定服务是否打开。如果 Nmap 向关闭端口发送设置有 SYN 标志的 TCP 请求,目标服务器将使用设置有 RST(重置)标志的 TCP 数据包进行响应。通过此响应,Nmap 可以确定端口已关闭。如果请求发送到开放端口,目标将使用设置了 SYN/ACK 标志的 TCP 数据包进行响应。然后,Nmap 将此端口标记为打开(并通过发回设置了 ACK 的 TCP 数据包来完成握手)。

 许多防火墙配置为简单地丢弃传入数据包。 Nmap 发送 TCP SYN 请求,但没有收到任何回复。这表明该端口受到防火墙保护,因此该端口被视为被过滤。配置防火墙以响应 RST TCP 数据包非常容易。例如,在 Linux 的 IPtables 中,命令如下:

 

 Task6、扫描类型 SYN 扫描

SYN 扫描有时称为“半开放”扫描或“隐形”扫描。TCP 扫描与目标执行完整的三向握手,SYN 扫描在从服务器接收到 SYN/ACK 后发回 RST TCP 数据包(这可以防止服务器重复尝试发出请求)。

 优点:

  • 它可用于绕过旧的入侵检测系统,因为它们正在寻找完整的三向握手。
  • 监听开放端口的应用程序通常不会记录 SYN 扫描,因为标准做法是在完全建立连接后记录连接。这再次体现了 SYN 扫描的隐秘性。
  • 无需费心为每个端口完成(和断开连接)三向握手,SYN 扫描比标准 TCP 连接扫描要快得多。

缺点:

  • 它们需要 sudo 权限才能在 Linux 中正常工作。这是因为 SYN 扫描需要能够创建原始数据包(而不是完整的 TCP 握手),默认情况下只有 root 用户才拥有此权限。
  • 不稳定的服务有时会因 SYN 扫描而中断,如果客户端提供了用于测试的生产环境,这可能会出现问题。

当使用 SYN 扫描来识别关闭和过滤的端口时,适用与 TCP 连接扫描完全相同的规则。如果端口关闭,则服务器会使用 RST TCP 数据包进行响应。如果端口被防火墙过滤,则 TCP SYN 数据包将被丢弃,或者通过 TCP 重置进行欺骗。TCP scans和SYN scans两次扫描是相同的:最大的区别在于它们处理开放端口的方式。

 Task7、扫描类型 UDP 扫描

UDP 连接是无状态的,这意味着,UDP 连接不是通过来回“握手”来启动连接,而是依赖于将数据包发送到目标端口,并本质上希望它们能够成功。这使得 UDP 非常适合依赖速度而不是质量的连接(例如视频共享),但缺乏确认使得 UDP 扫描变得更加困难(并且速度慢得多)。当数据包发送到开放的 UDP 端口时,不应有响应。发生这种情况时,Nmap 将该端口称为“开放|已过滤”。换句话说,它怀疑端口是开放的,但它可能有防火墙过滤。如果它得到一个 UDP 响应(这很不寻常),那么端口就被标记为开放。更常见的情况是没有响应,在这种情况下,会再次发送请求以进行双重检查。如果仍然没有响应,那么端口就被标记为 open|filtered,Nmap将接着扫描。当数据包发送到关闭的 UDP 端口时,目标应使用 ICMP (ping) 数据包进行响应,其中包含该端口无法访问的消息。这清楚地识别了关闭的端口,Nmap 将其标记为关闭的端口。

由UDP扫描速度慢,启用 --top-ports <number> 的情况下运行 Nmap 扫描通常是一个好习惯。例如,使用 nmap -sU --top-ports 20 <target> 进行扫描。将扫描前 20 个最常用的 UDP 端口,从而获得更可接受的扫描时间。

 Task8、扫描类型 NULL、FIN 和 Xmas

NULL 扫描 (-sN) 是指发送 TCP 请求时根本没有设置任何标志。根据 RFC,如果端口关闭,目标主机应使用 RST 进行响应。

 ② FIN 扫描 (-sF) 的工作方式几乎相同;但是,不是发送完全空的数据包,而是发送带有 FIN 标志的请求(通常用于正常关闭活动连接)。如果端口关闭,Nmap 期望 RST。

 ③ Xmas扫描 (-sX) 发送格式错误的 TCP 数据包,并期望关闭端口的 RST 响应。

这些扫描对开放端口的预期响应也是相同的,并且与 UDP 扫描的响应非常相似。如果端口是开放的,则不会对格式错误的数据包做出响应;如果端口受防火墙保护, NULL、FIN 和 Xmas 扫描则会将端口识别为开放、关闭或过滤。如果使用这些扫描之一将端口识别为已被过滤,通常是因为目标回应了一个 ICMP 不可到达数据包。

 Task8、扫描类型ICMP网络扫描

目标:希望查看哪些 IP 地址包含活动主机,哪些不包含活动主机。

为了执行 ping 扫描,我们将 -sn 与 IP 范围结合使用,也可以使用连字符 (-) 或 CIDR 表示法指定 IP 范围。假如扫描192.168.0.x网段:

 -sn 告诉 Nmap不要扫描任何端口——强制它主要依靠 ICMP 回显数据包来识别目标。除了 ICMP 回显请求之外,-sn 还将导致 nmap 将 TCP SYN 数据包发送到目标的端口 443,以及将 TCP ACK(或 TCP SYN,如果不作为 root 运行)数据包发送到目标的端口 80。

 Task10、NSE 脚本概述

Nmap 脚本引擎 (NSE) 是 Nmap 的一个非常强大的补充,相当大地扩展了它的功能。NSE 脚本是用 Lua 编程语言编写的,可用于执行多种操作:从扫描漏洞到自动利用漏洞。有很多类别可供选择。一些有用的类别包括:

  • safe:- 不会影响目标
  • intrusive:- 不安全:可能影响目标
  • vuln:- 扫描漏洞
  • exploit:- 尝试利用漏洞
  • auth:- 尝试绕过正在运行的服务的身份验证(例如匿名登录 FTP 服务器)
  • brute:- 尝试暴力破解正在运行的服务的凭据
  • discovery:- 尝试查询正在运行的服务以获取有关网络的更多信息(例如查询 SNMP 服务器)

详述: here

 Task11、NSE 脚本 使用 NSE

运行特定脚本,我们将使用 --script=<script-name> ,例如--script=http-fileupload-exploiter。通过用逗号分隔多个脚本可以以这种方式同时运行。例如: --script=smb-enum-users,smb-enum-shares。某些脚本需要参数(例如,凭据,如果它们正在利用经过身份验证的漏洞)。这些可以通过--script-args给出。

例如,http-put 脚本(用于使用 PUT 方法上传文件)。这需要两个参数:将文件上传到的 URL 以及文件在磁盘上的位置。

注意,参数以逗号分隔,并用句点连接到相应的脚本(即 <script-name>.<argument>)。

 Nmap脚本带有内置帮助菜单,可以使用nmap --script-help <script-name>访问该菜单。

 Task12、NSE 脚本 搜索脚本

方法一: Nmap website

方法二:Nmap在 Linux 上将其脚本存储在 /usr/share/nmap/scripts

script.db格式:

①通过 grep 来查找脚本。

②使用 ls 命令。

 安装新脚本

方法一:

 方法二:

 接着:

 Task13、防火墙规避

Windows主机将使用其默认防火墙阻止所有 ICMP 数据包。这意味着 Nmap 会将具有此防火墙配置的主机记录为死亡主机,并且根本不扫描它。Nmap 为此提供了一个选项:-Pn,它告诉 Nmap 在扫描主机之前不必费心 ping 主机。这意味着 Nmap 将始终将目标主机视为活动的,从而有效地绕过 ICMP 块;然而,它的代价是可能需要很长时间才能完成扫描(如果主机确实死了,那么 Nmap 仍然会检查并仔细检查每个指定的端口)。

其他规避方式: here

以下参数值得注意:

  • -f:用于对数据包进行分段(即将它们分成更小的部分),从而降低防火墙或 IDS 检测到数据包的可能性。
  • --mtu <number>:提供对数据包大小的更多控制,接受用于发送数据包的最大传输单元大小。这必须是 8 的倍数。
  • --scan-delay <time>ms:用于在发送的数据包之间添加延迟。如果网络不稳定,这非常有用,而且还可以逃避任何可能存在的基于时间的防火墙/IDS 触发器。
  • --badsum:这用于生成数据包的无效校验和。任何真正的 TCP/IP 堆栈都会丢弃此数据包,然而,防火墙可能会自动响应,而无需检查数据包的校验和。因此,该开关可用于确定防火墙/IDS 的存在。

Task14、实践