玄机日志分析_异常行为溯源_2025/11/26
玄机日志分析_异常行为溯源
题目要求

通过分析pcap文件查出攻击者ip。
pcap包分析
打开pcap包分析其中的tcp流:

发现其中的数据为base64编码,两次解码后可以获取其中的IP信息,也就是说攻击者的IP信息可能也在其中:

写脚本解码所有的pcap信息:
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}")
再把原始流中的ip信息提取出来并倒叙筛查:
import re
from collections import Counter
def main():
ip_counts = Counter()
with open('log.txt', 'r', encoding='utf-8') as f:
for line in f:
match = re.search(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', line)
if match:
ip_counts[match.group()] += 1
with open('ip_stats.txt', 'w', encoding='utf-8') as f:
for ip, count in ip_counts.most_common():
f.write(f"{ip}: {count}\n")
if __name__ == '__main__':
main()
最后发现 35.127.46.111 这个ip访问次数最多,结合题目分析该ip为攻击者ip地址。
{{ece636795bef2141214a3c8c2f88bee5.jpg(uploading...)}}
最终处理一下获取到最后的flag:
flag{475ed6d7f74f586fb265f52eb42039b6}
玄机日志分析_异常行为溯源_2025/11/26
浙公网安备 33010602011771号