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日

相关推荐
hengdonghui16 小时前
Writeup 4 2020 - 之江杯 - 异常的工程文件
ctf·工控
hengdonghui16 小时前
Writeup 4 2020 - 之江杯 - 注册表分析
注册表·ctf
kali-Myon11 天前
分享一个网络安全 AI 工具导航项目 SecSkills
安全·ai·github·ctf
蒲公英eric12 天前
从旧接口泄露到 OAuth 保护:DVWA API 模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·api模块
白猫不黑13 天前
CTF是什么?从零理解一场攻防竞赛
网络·web安全·计算机·网络安全·信息安全·ctf·红蓝对抗
玫幽倩14 天前
2026第二届湾区杯网络安全大赛决赛(AI专项赛道静态题wp)
pytorch·python·ai·agent·ctf·rag·湾区杯
宗介波妞16 天前
Wireshark 抓取 IEC104 报文:常见异常报文排查与标志位解读
服务器·网络·wireshark
辰辉创聚16 天前
禽流感病毒亚型与HA/NA重组蛋白结构解析:分子机制与科研应用综述
wireshark·基带工程·技术美术·重组蛋白表达·重组蛋白·单克隆抗体
落寞的魚丶16 天前
2026年浙江省信息通信业职业技能竞赛(信息安全测试员竞赛) 初赛Wireup
ctf·鱼影安全·2026网络安全通信行业·信息安全测试员竞赛·通信职业技能大赛