THM学习笔记——Nmap

Nmap是一款用于网络发现和安全审计的网络安全工具,通常情况下,Nmap用于:

  • 列举网络主机清单

  • 管理服务升级调度

  • 监控主机

  • 服务运行状况

Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。

系统管理员可以利用Nmap来探测工作环境中未经批准使用的服务器,黑客通常会利用Nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Nmap通常用在信息搜集阶段,用于搜集目标机主机的基本状态信息。扫描结果可以作为漏洞扫描、漏洞利用和权限提升阶段的输入。

Nmap不仅可以用于扫描单个主机,也可以适用于扫描大规模的计算机网络

Nmap是一个功能强大的网络扫描工具,用于发现主机、服务和开放端口等信息。

Nmap的基本用法:

扫描单个主机或主机范围

nmap target
nmap 192.168.1.1
nmap example.com
nmap 192.168.1.1-100

扫描整个子网

nmap 192.168.1.0/24

扫描多个目标

nmap target1 target2 target3

扫描特定端口

nmap -p port target
nmap -p 80,443 example.com

扫描常见端口

nmap -F target

指定扫描技术

nmap -sS target   # TCP SYN 扫描
nmap -sT target   # TCP 连接扫描
nmap -sU target   # UDP 扫描

指定扫描范围

nmap -p1-100 target   # 扫描端口范围
nmap -sS -p- target   # 扫描所有65535个TCP端口

扫描速度和详细级别

nmap -T4 target   # 设置扫描速度
nmap -v target    # 详细输出

指定输出格式

nmap -oN output.txt target   # 输出到文本文件
nmap -oX output.xml target   # 输出到XML文件

禁用主机发现

nmap -Pn target   # 禁用Ping扫描

指定脚本扫描

nmap --script scriptname target   # 执行特定脚本

这些是Nmap的一些基本用法,但Nmap具有更多高级功能和选项,可以根据需要进行深入研究和学习。

详细介绍

在使用Nmap进行端口扫描时,有三种基本的扫描类型。它们分别是:

- TCP连接扫描 (-sT)
- SYN "半开放"扫描 (-sS)
- UDP扫描 (-sU)

TCP连接扫描

要理解TCP连接扫描 ,最重要的是对 TCP三次握手熟悉。

三次握手包括三个阶段。首先,连接的终端向目标服务器发送一个带有SYN标志的TCP请求。然后,服务器用一个包含SYN标志和ACK标志的TCP响应确认此数据包。最后,我们的终端通过发送一个带有ACK标志的TCP请求来完成握手。

TCP连接扫描通过依次与每个目标端口执行三次握手来工作。换句话说,Nmap尝试连接到每个指定的TCP端口,并通过接收到的响应确定服务是否开放。

SYN扫描

与TCP扫描类似,SYN扫描用于扫描目标或目标的TCP端口范围;然而,这两种扫描类型的工作方式略有不同。SYN扫描有时被称为“半开放”扫描,或“隐秘”扫描。

TCP扫描与目标执行完整的三次握手,而SYN扫描在从服务器收到SYN/ACK后发送一个RST TCP数据包(这可以防止服务器重复尝试请求)。

这对我们有很多优势:

- 它可以用来绕过旧版入侵检测系统,因为它们正在寻找完整的三次握手。对于现代IDS解决方案来说,情况通常不再是这样;正是因为这个原因,SYN扫描仍然经常被称为“隐秘”扫描。
- SYN扫描通常不会被打开端口上侦听的应用程序记录,因为标准做法是在建立连接后记录连接。这再次体现了SYN扫描的隐蔽性。
- 由于不必为每个端口完成(和断开)三次握手,SYN扫描比标准TCP连接扫描快得多。

然而,SYN扫描也有一些缺点,即:

- 它们需要sudo权限才能在Linux中正确工作。这是因为SYN扫描需要创建原始数据包的能力(与完整的TCP握手相反),这是仅root用户默认拥有的特权。
- 不稳定的服务有时会被SYN扫描关闭,如果客户端为测试提供了生产环境,则可能会出现问题。

总的来说,优点胜过缺点。

因此,如果具有sudo权限运行,则SYN扫描是Nmap使用的默认扫描。如果没有sudo权限运行,则Nmap默认使用我们在前面任务中看到的TCP连接扫描。

在使用SYN扫描识别关闭和过滤端口时,与使用TCP连接扫描相同的规则适用。

如果端口关闭,则服务器将以RST TCP数据包做出响应。如果防火墙过滤了端口,则TCP SYN数据包要么被丢弃,要么被伪造成TCP重置。

UDP扫描

与TCP不同,UDP连接是无状态的。这意味着,UDP连接不是通过来回的“握手”来建立连接,而是依靠将数据包发送到目标端口,并希望它们能到达。这使得UDP非常适用于速度优先于质量的连接(例如视频共享),但是缺乏确认使得UDP扫描变得更加困难(也更加缓慢)。

当一个数据包发送到一个打开的UDP端口时,不应该有响应。当这种情况发生时,Nmap将端口标记为 open|filtered。换句话说,它怀疑该端口是开放的,但可能已经被防火墙过滤。如果它收到UDP响应(这是非常不寻常的),那么该端口将被标记为open。更常见的情况是没有响应,此时请求会第二次发送以进行双重检查。如果仍然没有响应,则端口将被标记为 *open|filtered*,并且Nmap继续进行扫描。

当一个数据包发送到一个关闭的UDP端口时,目标应该用包含端口不可达消息的ICMP(ping)数据包做出响应。这清楚地标识了关闭的端口,Nmap会将其标记为关闭并继续进行扫描。

由于很难确定UDP端口是否真正开放,与各种TCP扫描相比,UDP扫描往往非常缓慢(在良好连接下扫描前1000个端口需要大约20分钟)。因此,通常最好使用启用了 --top-ports  的Nmap扫描。例如,

使用 nmap -sU --top-ports 20  进行扫描,将扫描最常用的20个UDP端口,从而获得更可接受的扫描时间。

在扫描UDP端口时,Nmap通常发送完全空的请求 -- 仅仅是原始的UDP数据包。也就是说,对于通常由众所周知的服务占用的端口,它将发送一个特定于协议的有效载荷,这更有可能引发响应,并得出更准确的结果。

ICMP网络扫描

在黑盒分配中第一次连接到目标网络时,我们想看看哪些IP地址包含活动主机,哪些不包含。

其中一种方法是使用Nmap执行所谓的“ping扫描”。这正如其名字所示:Nmap向指定网络的每个可能的IP地址发送一个ICMP数据包。当它收到响应时,它将标记响应的IP地址为活动。

要执行ping扫描,我们使用 -sn 开关与IP范围结合使用,IP范围可以用连字符(-)或CIDR表示法指定。例如,我们可以使用以下命令扫描192.168.0.x网络:

- nmap -sn 192.168.0.1-254

或者

- nmap -sn 192.168.0.0/24

-sn 开关告诉Nmap不要扫描任何端口 -- 强制其主要依赖ICMP回显数据包(或者在本地网络上运行时使用sudo或直接作为根用户的ARP请求)来识别目标。

除了ICMP回显请求外,-sn 开关还将导致nmap向目标的端口443发送TCP SYN数据包,并向目标的端口80发送TCP ACK(或如果未以根用户身份运行,则发送TCP SYN)数据包。

NSE脚本概述

Nmap脚本引擎(NSE)是Nmap的一个非常强大的补充,它相当大地扩展了Nmap的功能。NSE脚本使用 Lua 编程语言编写,可用于各种用途:从扫描漏洞到自动化对其的利用。NSE特别适用于侦察,但是值得注意的是脚本库有多么庞大。

有许多可用的类别。一些有用的类别包括:

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

使用NSE

要运行特定的脚本,我们将使用 --script= ,例如 --script=http-fileupload-exploiter。

可以通过用逗号分隔它们来以这种方式同时运行多个脚本。例如:--script=smb-enum-users,smb-enum-shares。

某些脚本需要参数(例如,如果它们正在利用经过身份验证的漏洞,则需要凭据)。这些参数可以使用 --script-args Nmap开关提供。例如,http-put 脚本(用于使用PUT方法上传文件)就需要两个参数:要上传文件的URL和磁盘上文件的位置。例如:
nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php'

注意,参数由逗号分隔,并且与相应的脚本用句点连接(即 .)。

防火墙规避

Nmap提供了一个选项:-Pn,告诉Nmap在扫描之前不要费心ping主机。这意味着Nmap将始终将目标主机视为活动的,有效地绕过ICMP阻塞;但是,它的代价是可能需要很长时间才能完成扫描(如果主机确实死了,那么Nmap仍将检查和重复检查每个指定的端口)。

你可能感兴趣的:(网络,tcp/ip,网络协议,nmap)