20250415_信安一把梭_encode
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 += 1
print("\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}