题目描述
某企业网络安全部门人员正在对企业网络资产受到的攻击行为进行溯源分析,该工作人员发现攻击者删除了一段时间内的访问日志数据,但是攻击者曾传输过已被删除的访问日志数据并且被流量监控设备捕获,工作人员对流量数据进行了初步过滤并提取出了相应数据包。已知该攻击者在开始时曾尝试低密度的攻击,发现未被相关安全人员及时发现后进行了连续多日的攻击,请协助企业排查并定位攻击者IP,flag格式为:flag{md5(IP)}
解题过程
打开pcap文件分析,可以看到里面都是TCP流量,点开流量发现Data数据为Base64编码
复制ASCII文本,然后解码Base64数据,如图
可以看到解码后得到一串Json数据,里面的msg
对应的内容还是Base64编码,继续解码
发现是一条日志数据,那我们的思路就是写个python脚本,遍历每一个数据包,寻找符合特定格式(以eyJ
开头的Base64编码)的原始数据,再从中提取msg
字段的值进行Base64解码,得到最终的日志文本
payload:
import base64
import json
from scapy.all import rdpcap, Raw
PCAP_FILE = 'network_traffic.pcap'
LOG_FILE = 'log.txt'
try:
print(f"[*] 正在读取 {PCAP_FILE}...")
packets = rdpcap(PCAP_FILE)
log_count = 0
with open(LOG_FILE, 'w', encoding='utf-8') as f:
for packet in packets:
if packet.haslayer(Raw):
try:
payload = packet[Raw].load
# Base64编码的JSON对象通常以'eyJ'开头
start_index = payload.find(b'eyJ')
if start_index == -1:
continue
b64_str_1 = payload[start_index:]
# 动态计算并补全缺失的'='填充
padding = b'=' * (-len(b64_str_1) % 4)
json_data = json.loads(base64.b64decode(b64_str_1 + padding))
log_entry_bytes = base64.b64decode(json_data['msg'])
log_entry = log_entry_bytes.decode('utf-8')
f.write(log_entry.strip() + '\n')
log_count += 1
except Exception:
continue
print(f"[+] 处理完成!共提取 {log_count} 条日志到 {LOG_FILE}")
except Exception as e:
print(f"[!] 发生严重错误: {e}")
这个脚本用到scapy
库来进行网络数据包交互与操作,可以执行命令 pip install scapy
或 sudo apt install python3-scapy
下载。然后把脚本(假设命名为decode.py
)和pcap
文件(network_traffic.pcap
)放在同一目录,执行命令运行脚本即可
python3 decode.py
接着直接读取文本查看哪个IP出现最多
cat log.txt|awk '{print $1}'|sort|uniq -c|sort -r -n|head -n 10
发现35.127.46.111
出现最多,MD5加密提交flag即可
flag{475ed6d7f74f586fb265f52eb42039b6}