Writeup 4 2020 - 之江杯 - 工控现场的恶意扫描

Writeup 4 2020 - 之江杯 - 工控现场的恶意扫描

一、最快的打法

1、用 Wireshark 打开题目给的附件:t4.pcap

2、在过滤器中输入:tcp,回车

3、右键点击 分组列表 中任意一个流量包,选择:追踪流 -> TCP Stream

4、在弹出的窗口中,点击右下角"流"的向上的箭头,直到数字变成 7;或者,直接在框中输入 7;

5、窗口中显示字符串:666c61677b7071634635716655516866713971386a7d

6、在 https://cyberchef.org 中解码(Hex 解码),得到:

复制代码
flag{pqcF5qfUQhfq9q8j}

二、更暴力一点

暴力1

把所有 TCP payload 转成二进制再提取可读字符串,flag 经常直接出现。

bash 复制代码
root@Rambo:/工控现场的恶意扫描# tshark -r t4.pcap -T fields -e tcp.payload | xxd -r -p | strings
Running as user "root" and group "root". This could be dangerous.
666c61677b7071634635716655516866713971386a7d666c61677b7071634635716655516866713971386a7d
root@Rambo:/工控现场的恶意扫描#

暴力2

用 strings 直接扫整个包,很多题目的 flag 以明文或十六进制形式躺在包里,strings 一步到位。

bash 复制代码
root@Rambo:/工控现场的恶意扫描# strings t4.pcap | grep -i flag
root@Rambo:/工控现场的恶意扫描#

这条命令失败了,不适用该题目。

暴力3

bash 复制代码
root@Rambo:/工控现场的恶意扫描# strings t4.pcap | grep -E "flag\{|666c6167"
666c61677b7071634635716655516866713971386a7d
666c61677b7071634635716655516866713971386a7d
root@Rambo:/工控现场的恶意扫描#

暴力4

bash 复制代码
root@Rambo:/工控现场的恶意扫描# tshark -r t4.pcap -T fields -e tcp.stream -e tcp.payload

运行结果(部分):

bash 复制代码
...

0       000000000006010106000008
0       000000000006010106000008
0       00000000000401010102
0       000000000006010300000002
0       000000000006010300000002
0       00000000000701030400000000
0       000000000006010301000002
0       000000000006010301000002
0       00000000000701030400000000
0       00000000000f0143a8b9050a4200c419c48cc497c4
0       00000000000f0143a8b9050a4200c419c48cc497c4
0       00000000000c014309ff0100c80000000000
0       0000000000020111
0       0000000000020111
0       000000000005011116008c
0       000000000003016d54
0       000000000003016d54
0       000000000003016d00
7
7
7
7
7
7       3636366336313637376237303731363334363335373136363535353136383636373133393731333836613764
7       3636366336313637376237303731363334363335373136363535353136383636373133393731333836613764
0       0000000000090141a8b902010c0106
0       0000000000090141a8b902010c0106
0       00000000000401410102
0       000000000006010100000008
0       000000000006010100000008
0       00000000000401010100
0       000000000006010106000008
0       000000000006010106000008
0       00000000000401010102


7
0       000000000006010300000002
0       000000000006010300000002
0       00000000000701030400000000
0       000000000006010301000002
0       000000000006010301000002
0       00000000000701030400000000


0       00000000000f0143a8b9050a4200c419c48cc497c4
0       00000000000f0143a8b9050a4200c419c48cc497c4
0       00000000000c014309ff0100c80000000000
0       0000000000020111
0       0000000000020111
0       000000000005011116008c
0       000000000003016d54
0       000000000003016d54
0       000000000003016d00
0       0000000000090141a8b902010c0106
0       0000000000090141a8b902010c0106
0       00000000000401410102
0       000000000006010100000008
0       000000000006010100000008

...

从输出中可以清楚看到:

  • 流 0 里全是 Modbus/TCP 的扫描请求/响应(功能码 01、03、17、65、67 等)

  • 流 7 里只有两条相同的 payload:

    3636366336313637376237303731363334363335373136363535353136383636373133393731333836613764

这串本身就是十六进制字符串的 ASCII 编码,也就是"双重十六进制"。

解码过程

第一层:把流 7 的 payload 按 ASCII 解码

36 36 36 63 36 31 ... 对应的 ASCII 是:

复制代码
666c61677b7071634635716655516866713971386a7d

第二层:再把这串十六进制转 ASCII

复制代码
66 6c 61 67 7b 70 71 63 46 35 71 66 55 51 68 66 71 39 71 38 6a 7d

得到:

复制代码
flag{pqcF5qfUQhfq9q8j}
最终答案
复制代码
flag{pqcF5qfUQhfq9q8j}
为什么流 7 这么特殊
  • 其他所有流(stream 0)都是正常的 Modbus 请求/响应,payload 以 000000 开头(MBAP 头)。
  • 流 7 的 payload 不以 000000 开头 ,而是直接以 36 36 36 63... 开头,这明显不是 Modbus 协议数据,是出题人故意塞进去的 flag 编码。
  • 所以用 -e tcp.stream -e tcp.payload 按流分组后,流 7 一眼就能看出来是异常数据。

之前用 strings 也能直接看到那串十六进制,是因为它本身就是可打印 ASCII 字符。

三、常规打法

此类题目常见的出题套路

  • 扫描器按顺序遍历寄存器,flag 被拆成多个寄存器值,需要按地址拼接。
  • 恶意扫描的源 IP/端口、扫描次数、特定功能码组合转成字符串。
  • Modbus 写多个寄存器里藏 ASCII。
  • 扫描时间间隔或 TCP payload 长度作为编码。
  • 过滤器里直接搜 flag{:
    frame contains "flag"
    或 tcp contains "flag"
    或 data.data contains "66:6c:61:67"(flag 的十六进制)。

更通用的解题顺序

  1. strings 扫一遍,看有没有明文 flag
  2. frame contains 66:6c:61:67 搜十六进制 flag
  3. frame contains 7b 搜 {
  4. Follow TCP Stream 看数据量大的流
  5. 导出 TCP 流批量解码
  6. 按协议字段过滤(Modbus/S7Comm 等)

Rambo

2026年9月30日

相关推荐
hengdonghui1 天前
Writeup 4 Bugku - USB 流量截取
wireshark·ctf·流量分析·misc(杂项)
hengdonghui2 天前
Writeup 4 GFCTF 2021 Baby_Web
web·ctf·变量覆盖·路径穿越·php 代码审计
kingx32 天前
Bugku 逆向 MatrixHunter:黑盒 oracle + GF(2) 消元出唯一解
网络安全·矩阵·逆向·ctf
kingx33 天前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
kingx34 天前
Bugku 326 Baby-heap1 题解:glibc 2.23 堆溢出到 FSOP 劫持 _IO_list_all(附完整 exp)
pwn·ctf·glibc·堆溢出·fsop
hengdonghui4 天前
Writeup 4 0xGame 2021 · command (WEB)
web·ctf·rce(远程代码执行)
0xBADCODE5 天前
2026 强网杯 Web 题 cwp · 全链路复盘
前端·安全·web安全·网络安全·系统安全·ctf
kingx38 天前
Bugku WEB 题解总集:文件包含 / SQLi / 反序列化 / SSTI / 反爬 / 组件漏洞
web安全·网络安全·ctf·bugku
kingx38 天前
Bugku Reverse 与 Android 题解总集:APK / native / PE / IPA
android·逆向·ctf·bugku
笔绘丹心9 天前
测试工程师的 BLE 抓包实战:从开关到 Wireshark 逐帧解读(红米/小米避坑版)
wireshark·抓包·ble