网络基础-NMAP
约 4135 字大约 14 分钟
2024-11-16
当我们对一个系统进行渗透时,知道的信息越多,就会越容易,因此需要在进行任何漏洞利用尝试之前进行必要的枚举。Nmap正是一个非常强大的网络扫描工具。
在正式开始了解NMAP前,我们需要了解以下基础信息:
端口
- ports: 作用与OSI 传输层,用于将流量导向正确的应用
 - 在计算机中共有65535个端口
 - 其中0-1024 端口是常用的标准端口
 
TCP 协议包头

[!IMPORTANT] 💡注意
- 源端口号和目的端口号(寻址)与udp中类似,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个,在网络编程中,一般一个IP地址和一个端口号组合称为一个套接字(socket)。
 - 序号(seq):用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。在tcp中tcp用序号对每个字节进行计数(这个值与发送的帧数没有关系,而是与发送的数据字节数有关系,后面会有说明)。
 - 确认序号(seq+1):包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加 1(不是单纯的序号加1,还包括数据字节数)。
 - 首部长度:用于记录tcp数据报首部的长度,一般为20字节,实际值为首部长度除以4。
 - 下面的是标志位对应的功能:
 
- URG: 紧急指针( urgent pointer)有效。
 - ACK: 响应确认。
 - PSH: 表示有DATA数据传输,接收方应该尽快将这个报文段交给应用层。
 - RST: 重建连接(一般在发送FIN之后)。
 - SYN: 建立连接请求。
 - FIN: 关闭连接。
 - 窗口大小:用于流量控制。
 - 检验和:检验和覆盖了整个的 TCP报文段: TCP首部和TCP数据,与udp相似需要计算伪首部。
 
NMAP
NMAP 参数
-sP # ping 探测主机存活
-sS # SYN Scan
-sU # UDP Scan
-O # OS detection(系统信息检测)
-A # “侵略性”毫不演示,噪声大;对服务、操作系统、跟踪路由和通用脚本进行扫描
-T # Nmap 提供了五个级别的“定时”模板,可用于提高扫描速度,但是越快噪音越大,越容易被发现,更可能导致报错。
-sV # 应用版本检测
-D # 诱饵扫描(发送掺杂假IP的数据包,使防火墙难以判断真正的扫描源)
-v # 详细输出扫描结果
-vv # 详细级别二
-f # 随机偏移量碎片扫描(将数据包分割成更小的部分发送,使防火墙难以识别)
-mtu 8 # 指定MTU大小为8的碎片扫描
-oA <filename> # 导出为三种常见格式
-oN <filename> # 导出txt 文件
-oX <filename> # 导出xml文件
-oG <filename> # 导出可抓取的格式
-p # 端口
--script # 引用脚本格式: --script=vulnNmap 常见扫描类型
使用Nmap进行端口扫描时,有三种基本扫描类型:
- TCP连接扫描(
-sT) - SYN“半开”扫描(
-sS) - UDP扫描(
-sU) 
TCP 连接扫描 (-sT)
原理: 看是TCP请求返回值,判断端口是否开启:
[!NOTE] 三次握手
- 第一次:请求
 SYN- 第二次:返回
 SYN/ACKorRST(Reset 重置)- 第三次:确认
 ACK当TCP端口关闭或隐藏在防火墙之后时,会返回
RST
SYN“半开”扫描(-sS)
与TCP扫描一样,SYN扫描(-sS)用于扫描目标的TCP端口范围;然而,这两种扫描类型的工作方式略有不同。SYN扫描有时被称为半开(Half-open) 扫描或隐形(Stealth) 扫描。
通常用于绕过旧的入侵检测系统,对现在的IDS解决方案不再适用
- 原理: 在完成三次握手的过程中,从服务器接收到SYN/ACK后发送回一个重复的TCP数据包(告诉服务器请求关闭,不正式建立连接) 。
 - 优点:因为省略了向服务器返回ACK 的过程,因此扫描速度比标准扫描(-sT)快。
 - 缺点: 需要
sudo权限,不稳定的应用,有可能会因SYN扫描导致关闭。
 
SYN扫描还有两个名称,它们是什么?
答案: Half-Open,Stealth
Nmap可以在没有Sudo权限的情况下使用SYN扫描吗(Y/N)?
答案: N
UDP 扫描(-sU)
由于UDP是无状态协议,因此判断端口是否打开需要额外的步骤,判断机制如下:
向端口发送数据包:
得到UDP响应(不寻常):端口被标记打开
得不到响应:发送第二次请求作为双重检查,被标记为:
open|filtered得到端口不可达响应(ping数据包):标记端口关闭
[!nNOTE] 由于识别UDP端口是否实际打开的困难,与各种TCP扫描相比,UDP扫描往往非常慢(在20分钟内扫描前1000个端口,连接良好)。因此,在启用
--top-ports <number>的情况下运行Nmap扫描通常是一个很好的做法。例如,使用nmap -sU --top-ports 20 <target>进行扫描。将扫描前20个最常用的UDP端口,从而使扫描时间更容易接受。
如果UDP端口不响应Nmap扫描,它将被标记为什么?
答案: open|filtered
当UDP端口关闭时,按照惯例,目标应该发送回port unreachable消息。它将使用哪种协议来这样做?
答案: ICMP
其他扫描类型
此外,还有几种不太常见的端口扫描类型,我们也将介绍其中一些(尽管不太详细)。这些措施包括:
TCP Null Scans (-sN)
当发送TCP 请求时,不设置标志。按照RFC规则,这种情况下,如果端口关闭,目标主机应使用应答器进行响应。
TCP FIN Scans (-sF)
当发送TCP 请求时,发送带有FIN(关闭连接)标志的空包,因为本身未建立连接,所以如果端口是开放的,就会返回一个错误值。
TCP Xmas Scans (-sX)
Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包,因在使用Wireshark 对其响应包进行分析时,显示一个闪烁的圣诞树而得名。

注
这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。扫描时向目标主机的端口发送的TCP FIN包或Xmas tree包/Null包,如果收到对方RST回复包,那么说明该端口是关闭的;没有收到RST包说明端口可能是开放的或被屏蔽的(open|filtered)。
提示
虽然 RFC 793 规定,对于封闭端口,网络主机应使用 RST TCP 数据包来响应畸形数据包,而?>对于开放端口,则完全不响应。
但实际情况并非总是如此,特别是 Microsoft Windows(以及许多 Cisco 网络设备),它们>会对任何畸形 TCP 数据包做出 RST 响应,而不管端口是否真正开放。这将导致所有端口显示为关闭
当然,这样做的目的是为了躲避防火墙。许多防火墙都被配置为丢弃发送到已设置 SYN 标志的受>阻端口的传入 TCP 数据包(从而阻止新的连接启动请求)。通过发送不包含 SYN 标志的请求,>我们可以有效绕过此类防火墙。虽然这在理论上是好的,但大多数现代 IDS 解决方案对这些扫描>类型都很精通,因此在处理现代系统时,不要依赖它们的 100% 有效性。 
ICMP 网络扫描
在黑盒测试中第一次接触目标网络时,我们的第一目标是获取网络架构。换句话说,我们想知道哪些 IP地址的主机是存活的,哪些未存活。通常我们会用ping扫描
-sn开关告诉Nmap不要扫描任何端口,让nmap主要依赖于HTTP回送数据包(或者本地网络上的ARP请求,如果使用sudo运行或者直接作为root用户运行)来识别目标。除了响应echo请求之外,-sn交换机还将使nmap向目标的端口443发送TCPSYN数据包,以及向目标的端口80发送TCP ACK(或TCPSYN,如果不作为根运行)数据包。
nmap -sn 192.168.0.0/24
Nmap脚本引擎(NSE)
nmap脚本语言有以下特征
- Lua 语言编写
 - 可以用于漏洞扫描
 - 能够实现自动化漏洞利用
 
脚本分类
safe: 不会影响目标intrusive: 不安全:可能影响目标vuln: 扫描漏洞exploit: 尝试利用漏洞auth: 尝试绕过运行服务的身份验证(例如匿名登录FTP服务器)brute: 尝试暴力破解正在运行的服务的凭据discovery: 尝试查询正在运行的服务以获取有关网络的更多信息(例如,查询SNMP服务器)。
提示
