文章总结: 本文详解一道工控安全取证CTF题,通过识别伪装成log的pcap文件,利用ICMP包划分扫描轮次,结合MAC地址揭露IP欺骗行为。重点分析第四次扫描中伪造源IP特征,定位特定源IP的ICMP请求包,得出Flag为155989。内容涵盖文件识别、协议分析及溯源,实战价值较高。 综合评分: 90 文章分类: CTF,应急响应,实战经验
工控安全取证 — CTF 流量分析题详解
原创
破镜安全 破镜安全
破镜安全
2026年3月8日 08:01 四川
工控安全取证 — CTF 流量分析题详解
题目背景
本题是一道流量分析方向的 CTF 题目,题目名称为”工控安全取证”。附件是一个名为 capture.log 的文件。题目要求分析流量包,找出第四次发起扫描时的关键数据包编号作为 Flag。
第一步:识别文件真实格式
拿到附件后,第一件事是判断文件的真实类型。文件后缀是 .log,但这并不能说明文件的实际格式。
使用 file 命令检查文件头:
$ file capture.log
capture.log: pcap capture file, microsecond ts (little-endian) - version 2.4 (Ethernet, capture length 1514)
结果非常明确:这是一个标准的 pcap 格式网络流量包文件,只是被命名为 .log 后缀。pcap(Packet Capture)是 Wireshark、tcpdump 等工具通用的流量记录格式。
用十六进制查看文件头进一步确认:
$ xxd capture.log | head -2
00000000: d4c3 b2a1 0200 0400 0000 0000 0000 0000 ................
d4 c3 b2 a1 是 pcap 文件的小端序魔数(Magic Number),确认无误。
将文件后缀改为 .pcap 后,即可用 Wireshark 或 tshark 正常打开。
第二步:掌握流量包整体结构
使用 tshark 查看协议分布:
$ tshark -r capture.log -qz io,phs
===================================================================
Protocol Hierarchy Statistics
eth frames:163832 bytes:9377108
ip frames:163832 bytes:9377108
icmp frames:13 bytes:1656
tcp frames:163816 bytes:9374426
udp frames:3 bytes:1026
===================================================================
关键信息:
- 总共 163832 个数据包
- 时间跨度:2002年8月27日 07:59:50 至 08:27:32,约 27 分钟
- 绝大多数是 TCP 包(163816 个),ICMP 仅 13 个,UDP 仅 3 个
涉及的 IP 地址:
| IP 地址 | 角色 | | — | — | | 192.168.0.9 | 攻击机(真实 IP) | | 192.168.0.99 | 被扫描目标机 | | 192.168.0.1 / .254 / .199 | 伪造的源 IP |
通过查看数据链路层 MAC 地址可以发现一个重要特征:
$ tshark -r capture.log -T fields -e eth.src -e ip.src | sort -u
00:10:a4:c5:7c:38 192.168.0.1
00:10:a4:c5:7c:38 192.168.0.199
00:10:a4:c5:7c:38 192.168.0.254
00:10:a4:c5:7c:38 192.168.0.9
00:60:08:a8:61:24 192.168.0.99
所有来自不同 IP(192.168.0.1、192.168.0.9、192.168.0.199、192.168.0.254)的数据包,底层 MAC 地址均为 00:10:a4:c5:7c:38(Xircom 品牌网卡)。这是典型的 **IP 欺骗(IP Spoofing)**行为——攻击机在物理上只有一块网卡,却伪造了多个不同的源 IP 地址发包。目标机的 MAC 是 00:60:08:a8:61:24(3Com 品牌网卡)。
第三步:理解扫描行为模式
163832 个数据包几乎全是 TCP 包,如果逐一审查工作量极大。需要找到一个切入点来分割扫描的轮次。
观察流量规律:数量极少的 ICMP 包(仅 13 个)夹杂在大量 TCP 包之间,值得重点关注。
过滤出所有 ICMP Echo Request(Ping 请求包):
$ tshark -r capture.log -Y "icmp.type == 8" -T fields \
-e frame.number -e ip.src -e ip.dst -e icmp.ident
1 192.168.0.9 192.168.0.99 31465
148007 192.168.0.9 192.168.0.99 7689
150753 192.168.0.9 192.168.0.99 41843
155987 192.168.0.1 192.168.0.99 51067
155988 192.168.0.254 192.168.0.99 51067
155989 192.168.0.199 192.168.0.99 51067
155990 192.168.0.199 192.168.0.99 51067
规律一目了然:每次发起大规模端口扫描之前,攻击机都会先向目标发送一个 ICMP Ping 请求,用于确认目标主机是否在线。 这是端口扫描工具(如 nmap)的标准前置行为,称为”主机发现”(Host Discovery)阶段。
通过 ICMP 包的帧编号,可以将整个流量切分为清晰的四个扫描轮次:
| 扫描轮次 | 起始 ICMP 帧 | 源 IP | ICMP 标识符 | TCP 扫描范围 | | — | — | — | — | — | | 第 1 次 | 帧 1 | 192.168.0.9 | 0x7ae9 (31465) | 帧 3 ~ 148006 | | 第 2 次 | 帧 148007 | 192.168.0.9 | 0x1e09 (7689) | 帧 148009 ~ 150752 | | 第 3 次 | 帧 150753 | 192.168.0.9 | 0xa373 (41843) | 帧 150755 ~ 155986 | | 第 4 次 | 帧 155987+ | 多个伪造 IP | 0xc77b (51067) | 帧 155991 ~ 163832 |
第四步:分析第四次扫描的特殊性
前三次扫描均从单一源 IP 192.168.0.9 发出 Ping 请求,而第四次扫描出现了显著变化:
$ tshark -r capture.log -Y "icmp.type == 8 and frame.number >= 155987"
155987 1602.084879 192.168.0.1 -> 192.168.0.99 ICMP 60 Echo (ping) request id=0xc77b
155988 1602.084912 192.168.0.254 -> 192.168.0.99 ICMP 60 Echo (ping) request id=0xc77b
155989 1602.084941 192.168.0.199 -> 192.168.0.99 ICMP 60 Echo (ping) request id=0xc77b
155990 1602.084976 192.168.0.199 -> 192.168.0.99 ICMP 60 Echo (ping) request id=0xc77b
注意到以下两个关键特征:
特征一:多个 IP 同时发包,但 ICMP 标识符(id)相同
帧 155987、155988、155989、155990 的 icmp.ident 均为 0xc77b(十进制 51067)。ICMP 标识符由操作系统在发起 Ping 时分配,用于匹配请求和响应。相同的标识符说明这四个包来自同一个进程,同一台物理主机。结合 MAC 地址分析,印证了这些不同源 IP 均由攻击机伪造发出。
特征二:新出现了 IP 地址 192.168.0.199
前三次扫描中从未出现过 192.168.0.199 这个 IP。第四次扫描开始时,伪造了 .1、.254、.199 三个 IP 地址,说明攻击者在第四轮扫描中使用了更强的 IP 欺骗手段。
第四次扫描中 TCP 流量随即在帧 155991 之后展开,从四个伪造 IP 同时向目标发送 TCP 包,每个端口同时由多个源 IP 扫描:
155991 192.168.0.1 -> 192.168.0.99 TCP 35984 -> 80 [ACK]
155992 192.168.0.254 -> 192.168.0.99 TCP 35984 -> 80 [ACK]
155993 192.168.0.9 -> 192.168.0.99 TCP 35984 -> 80 [ACK]
155995 192.168.0.199 -> 192.168.0.99 TCP 35984 -> 80 [ACK]
第五步:定位目标数据包,确认 Flag
题目要求找出第四次发起扫描时的数据包编号。
在第四次扫描的四个 ICMP Ping 包(帧 155987、155988、155989、155990)中,题目重点关注的是源 IP 为 192.168.0.199 的包。
查看帧 155989 的详细信息:
$ tshark -r capture.log -Y "frame.number == 155989" -V
Frame 155989: 60 bytes
Arrival Time: Aug 27, 2002 08:27:02.334700000 CST
Frame Number: 155989
Internet Protocol: Src: 192.168.0.199, Dst: 192.168.0.99
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Identifier (BE): 51067 (0xc77b)
Sequence Number (BE): 0 (0x0000)
帧 155989 是 192.168.0.199 向目标 192.168.0.99 发出的 ICMP Echo Request,是第四次扫描中出现的新伪造源 IP 的第一个 Ping 包,也是第四次扫描事件中具有标志性意义的帧编号。
Flag:155989
技术扩展:理解本题涉及的核心知识点
一、pcap 文件格式
pcap 是”Packet Capture”的缩写,是网络流量抓包的标准文件格式。文件以 4 字节魔数开头(小端序为 d4 c3 b2 a1,大端序为 a1 b2 c3 d4),后跟全局头(版本、时间精度、链路层类型等),再依次存储每个数据包的时间戳和原始字节。这道题的附件本质上是一个 pcap 文件,只是后缀被改为了 .log,这种情况在 CTF 中很常见,遇到不认识的附件首先用 file 命令或查看文件头来判断真实格式。
二、ICMP 协议与 Ping
ICMP(Internet Control Message Protocol,互联网控制消息协议)是 IP 协议族的一部分,不承载应用数据,主要用于网络诊断和错误报告。Ping 工具使用 ICMP Type 8(Echo Request)发送请求,目标主机用 Type 0(Echo Reply)回复。每个 Ping 包包含一个 16 位标识符(Identifier)和序列号(Sequence Number),用于区分不同的 Ping 会话。标识符相同意味着来自同一个 Ping 进程。
三、TCP SYN 端口扫描
本题中的 TCP 流量绝大多数是端口扫描产生的。典型的 SYN 扫描(半开扫描)过程如下:
- 扫描方向目标端口发送
SYN包 - 若目标端口开放,目标回复
SYN-ACK,扫描方立即发RST关闭连接(不完成握手,避免留下连接记录) - 若目标端口关闭,目标回复
RST-ACK
通过分析哪些端口收到了 SYN-ACK 响应,可以确定 192.168.0.99 开放的端口,本题中目标机开放了:22(SSH)、53(DNS)、80(HTTP)、111(RPC)、443(HTTPS)、32768 等端口。
四、IP 欺骗(IP Spoofing)
IP 欺骗是指在发送 IP 数据包时,将源 IP 地址填写为伪造的值而非真实地址。由于 IP 层本身不验证源地址真实性,发送端可以任意填写。本题中攻击机真实 IP 是 192.168.0.9,但在第四次扫描时伪造了 .1、.254、.199 三个源 IP。
识别 IP 欺骗的核心方法是看数据链路层的 MAC 地址。在同一局域网内,MAC 地址无法欺骗(或难以欺骗),因此即使源 IP 不同,如果 MAC 相同,即可判定为同一台机器发出的伪造包。
五、工控安全场景
本题以”工控安全取证”为背景。工业控制系统(ICS/SCADA)网络中同样存在 TCP/IP 协议,同样可能遭受端口扫描、漏洞探测等攻击。在工控安全取证场景下,通过流量分析还原攻击者的行为路径(主机发现 → 端口扫描 → 漏洞利用)是核心工作之一。这道题展示的是攻击准备阶段的取证过程。
解题流程总结
1. 识别文件格式
capture.log -> 实为 pcap 格式 -> 用 tshark/Wireshark 打开
2. 统计协议分布
163832 个包 -> ICMP 13 个 / TCP 163816 个 / UDP 3 个
3. 以 ICMP Ping 为切入点划分扫描轮次
帧 1 -> 第 1 次扫描开始(ICMP from 192.168.0.9)
帧 148007 -> 第 2 次扫描开始(ICMP from 192.168.0.9)
帧 150753 -> 第 3 次扫描开始(ICMP from 192.168.0.9)
帧 155987+ -> 第 4 次扫描开始(ICMP from 多个伪造 IP)
4. 分析第四次扫描
帧 155987: 192.168.0.1 -> 192.168.0.99 ICMP id=0xc77b
帧 155988: 192.168.0.254 -> 192.168.0.99 ICMP id=0xc77b
帧 155989: 192.168.0.199 -> 192.168.0.99 ICMP id=0xc77b <-- 新IP首次出现
帧 155990: 192.168.0.199 -> 192.168.0.99 ICMP id=0xc77b
5. 确认 Flag
第四次扫描中 192.168.0.199 发出的 ICMP 包帧编号为 155989
Flag: 155989
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:破镜安全 破镜安全 破镜安全《工控安全取证 — CTF 流量分析题详解》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论