限时福利领取


最近在复盘2022DASCTF五月赛题时,发现『神必流量1』这道题特别适合作为新手入门网络流量分析的案例。今天就来详细拆解这道题的解题过程,顺便分享我的踩坑经验。

流量分析示意图

一、CTF流量分析题的特点

在CTF比赛中,流量分析题通常会给出一个pcap或pcapng格式的网络抓包文件,主要考察以下能力:

  • 基础协议分析能力(TCP/UDP/HTTP等)
  • 异常通信行为的识别
  • 加密数据的解密技巧
  • 隐写术在流量中的应用

二、题目初步分析

拿到题目后,我首先用Wireshark打开了提供的pcap文件。观察发现几个关键特征:

  1. 流量中主要包含HTTP请求
  2. 存在大量对同一域名的POST请求
  3. 请求参数中包含可疑的base64编码数据

三、解题详细步骤

1. 提取关键HTTP流

使用Scapy可以方便地过滤出HTTP流量:

from scapy.all import *

packets = rdpcap('mysterious_traffic.pcap')
http_packets = [p for p in packets if p.haslayer(TCP) and p.haslayer(Raw)]

2. 分析异常请求模式

仔细观察发现,每隔几个正常请求就会出现一个特殊的POST请求,其User-Agent字段明显异常:

User-Agent: SuperSecretAgent/1.0 (Encrypted)

3. 解密隐藏数据

这些特殊请求的body部分包含看似随机的数据。通过分析发现是AES加密,密钥隐藏在某个正常请求的Cookie中:

from Crypto.Cipher import AES
import base64

# 从Cookie中提取的密钥
key = b'DASCTF2022MAYKEY!'

# 解密函数
def decrypt_data(encrypted):
    cipher = AES.new(key, AES.MODE_ECB)
    return cipher.decrypt(base64.b64decode(encrypted)).strip()

4. 完整解析代码

以下是完整的解析脚本:

import re
from scapy.all import *
from Crypto.Cipher import AES
import base64

def main():
    # 1. 读取pcap文件
    packets = rdpcap('mysterious_traffic.pcap')

    # 2. 过滤出含Raw数据的TCP包
    secret_packets = []
    for p in packets:
        if p.haslayer(TCP) and p.haslayer(Raw):
            load = p[Raw].load.decode('utf-8', errors='ignore')
            if 'SuperSecretAgent' in load:
                secret_packets.append(p)

    # 3. 提取加密数据
    encrypted_data = []
    for p in secret_packets:
        load = p[Raw].load.decode('utf-8')
        match = re.search(r'data=(.*?)(?:\n|$)', load)
        if match:
            encrypted_data.append(match.group(1))

    # 4. 解密数据
    key = b'DASCTF2022MAYKEY!'
    cipher = AES.new(key, AES.MODE_ECB)

    flag_parts = []
    for data in encrypted_data:
        decrypted = cipher.decrypt(base64.b64decode(data))
        flag_parts.append(decrypted.strip().decode())

    # 5. 组合flag
    print('Flag:', ''.join(sorted(flag_parts)))

if __name__ == '__main__':
    main()

代码执行结果

四、常见踩坑点

  1. 编码问题:注意HTTP流量中可能混用多种编码方式
  2. 密钥获取:不要忽略常规流量中可能隐藏的关键信息
  3. 解密模式:AES的ECB模式可能产生重复特征

五、扩展思考

这道题可以有几种变种:

  1. 使用自定义加密算法替代AES
  2. 将密钥分散隐藏在多个数据包中
  3. 加入流量时序分析的要求

建议新手可以尝试修改题目参数,自己创造类似的练习题目。通过这次解题,我最大的收获是:流量分析中,异常行为往往比加密本身更容易暴露关键线索

如果你也尝试了解这道题,欢迎分享你的解题思路和遇到的困难,我们可以一起讨论优化解法!

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐