玄机靶场 | 第五届红明谷-异常行为溯源

题目描述

某企业网络安全部门人员正在对企业网络资产受到的攻击行为进行溯源分析,该工作人员发现攻击者删除了一段时间内的访问日志数据,但是攻击者曾传输过已被删除的访问日志数据并且被流量监控设备捕获,工作人员对流量数据进行了初步过滤并提取出了相应数据包。已知该攻击者在开始时曾尝试低密度的攻击,发现未被相关安全人员及时发现后进行了连续多日的攻击,请协助企业排查并定位攻击者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 scapysudo 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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WayneJoon.H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值