数据量大、要批量、要精确提取时,命令行 tshark(装 Wireshark 自带)和一小段 Python 是最强帮手。这一章给你可以直接复用的模板。
tshark 语法核心:tshark -r 文件 [-选项]。三个最基本查询:
-r x.pcapng # 读文件,打印所有包 -r x.pcapng -Y "http" # -Y 加显示过滤器,只显示 HTTP 包 -r x.pcapng -Y "http.request" -T fields -e http.request.uri -e http.response.code
万能格式:
tshark -r 文件 -Y "过滤器" -T fields -e 字段1 -e 字段2 [其他选项]
常用 -e 字段:
| 字段 | 含义 |
|---|---|
ip.src ip.dst | 源/目的 IP |
frame.number frame.time_relative | 包序号 / 相对时间(秒) |
tcp.stream | 所在 TCP 流编号 |
http.request.uri | 请求 URI(含参数) |
http.request.method http.response.code | 请求方法 / 响应码 |
http.file_data | HTTP 响应体内容 |
dns.qry.name dns.flags.response | DNS 查询名 / 是否响应 |
mysql.query pgsql.query | SQL 语句 |
data.data tcp.payload | 原始数据(十六进制串) |
http.response.code)就是 -e 的值。也可 tshark -G fields | grep http 列全部。以挑战18"1000 名身份证泄露按时间排序拼接算 MD5"为例(可直接套用改参数):
# 1) 用 tshark 把每个响应的 idcard 值和相对时间导成两栏,写进 csv tshark -r x.pcapng -Y "http.response contains \"idcard\"" \ -T fields -e frame.time_relative -e http.file_data > data.txt
# 2) Python 读入、按(时间,序号)双关键字排序(防同秒乱序)、拼接、算 md5
import hashlib, re
rows = []
for line in open('data.txt', encoding='utf-8', errors='ignore'):
m = re.search(r'"idcard"\s*:\s*"(\d{18})"', line) # 按实际字段改
try: t = float(line.split('\t')[0])
except: continue
if m: rows.append((t, len(rows), m.group(1)))
rows.sort(key=lambda r: (r[0], r[1])) # 关键:双关键字
s = ''.join(r[2] for r in rows)
print(s, len(s))
print('flag{' + hashlib.md5(s.encode()).hexdigest() + '}')
# URL 解码
python -c "import urllib.parse,sys;print(urllib.parse.unquote('你的串'))"
# Base64 解码
python -c "import base64,binascii;print(base64.b64decode('串').decode('utf-8','ignore'))"
# Hex 转字节
python -c "print(bytes.fromhex('48656c6c6f'))"
# 自动猜编码(常能一次解多层)
python -c "import base64,urllib.parse
s='一串'
while s!=urllib.parse.unquote(s): s=urllib.parse.unquote(s) # URL解到不动
print(s)"
%→URL;以 = 结尾且只有大小写字母数字+/→Base64;只有 0-9a-f 且偶数长度→Hex;出现大量 \x→可能需先转义处理。多层就层层解,解到能读为止。# 导出所有 HTTP 对象到目录 tshark -r x.pcapng --export-objects http,outdir # 导出 FTP 对象 tshark -r x.pcapng --export-objects tftp,outdir # 提取所有 TCP payload(十六进制)再转成字节 tshark -r x.pcapng -Y "tcp.payload" -T fields -e tcp.payload > hex.txt # 只取非 DNS 响应的查询名 tshark -r x.pcapng -Y "dns.flags.response==0" -T fields -e dns.qry.name
若提取到的是口令哈希(NTLM、MySQL4.1+、crypt、bcrypt 等),可用 hashcat 离线爆破(你已熟练)。
hashid 或看前缀格式。hashcat -m 0 hash.txt wordlist.txt(MD5);NTLM 用 -m 1000;MySQL 用 -m 200 系列。&"…\tshark.exe"。