Tags:流量分析
, 应急响应
, 数据解析
, tcp
, pyshark
, 正则匹配
, json
, 信安一把梭
0x00. 题目
请分析某设备导出的流量包,找到攻击IP和正确密码(攻击IP以分析后的为主而不是流量包中的Source和Destination)
格式如下:例如攻击IP为192.168.1.1
密码为admin
,则flag{192.168.1.1_admin)
附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件
附件名称:20250415_信安一把梭_encode.zip
0x01. WP
1. 流量包分析
发现流量大多为TCP
协议,其中部分有DATA
数据,对应字段进行Base64解码后为json格式日志,其中目测info
内容还需要进行Base64解码
2. 数据抽取
exp.py
# -*- coding: utf-8 -*-
import pyshark, os, re,time
import base64
import json# 为排除解决raiseRuntimeError(‘This event loop is already running’)报错问题
import nest_asyncio
nest_asyncio.apply()# Author: Jason.J.Hu# 初始化全局参数
strCapPath = "20250415_encode.pcapng"iHTTP=0
strFomula="((tcp) && (data))"cap = pyshark.FileCapture(strCapPath, display_filter=strFomula)print(time.strftime("%H:%M:%S", time.localtime()), "HTTP分析开始 ... ...")for pkt in cap:intRequestNumber = pkt.number# print("\r\tFrame Number: %s " % str(intRequestNumber), end="")for layer in pkt.layers:# 如果请求地址为120.142则对data节点提取数据后在进行json解析并对日志内容进行二次解析if pkt.ip.src=="192.168.120.142":if layer.layer_name == "DATA": # 指定协议层sData=layer.get_field_value("data_data") #指定字段 sData="".join((sData.split(":")))sData=bytes.fromhex(sData).decode('utf-8')sData=base64.b64decode(sData).decode('utf-8')sJSON = json.loads(sData)sLog = base64.b64decode(sJSON.get("info")).decode('utf-8')print(sLog)else:# 如果ip.src不是120.142,直接对data进行Base64解析if layer.layer_name == "DATA": # 指定协议层sData=layer.get_field_value("data_data") #指定字段 sData="".join((sData.split(":")))sData=bytes.fromhex(sData).decode('utf-8')sData=base64.b64decode(sData).decode('utf-8')print(sData)iHTTP += 1print("\r")
print(time.strftime("%H:%M:%S", time.localtime()), "HTTP分析结束。")
3. 日志分析
# 由于日志量较大,直接将结果输出到文件
python3 exp.py > log.log
发现爆破行为,返回值有Login xxx
字样,筛选出Login Success
结果并找到对应的请求
得到最终flag:flag{192.168.120.137_zxcv123}