原理概述
USB流量即USB设备接口的流量,CTF中主要以
键盘和鼠标流量为主.
流量数据域特征
USB协议数据字段在Leftover Capture Data域中,数据长度为八个字节,主要看第三个字节的值,将它与按键值相对以得出按键内容。


解题步骤
协议筛选
usb.capdata–Leftover Capture Data
usbhid.data–Hide Data
tshark提取
//到wireshark的路径下
.\tshark.exe -r D:\Downloads\usb.pcap -T fields -e usb.capdata >D:\Downloads\usbdata.txt
.\tshark.exe -r D:\Downloads\usb.pcap -T fields -e usbhid.data >D:\Downloads\usbdata.txt
-r 指定tshark的分析文件
-T 输出的格式,ek|fields|json|jsonraw|pdml|ps|psml|tabs|text
-T -e 结合打印出指定的规则(过滤)字段usbhid.data, fields 要配合 -e 参数使用
-e 导出的协议字段
键盘数据分析
键盘数据会出现在Leftover Capture Data或者HID Data中,数据长度为8个字节,主要关注第3个字节, 每次键盘操作后都会产生一个数据包。
直接上脚本
def check_charset(file_path):
import chardet
with open(file_path, "rb") as f:
data = f.read(4)
charset = chardet.detect(data)['encoding']
return charset
with open('usbhid.txt', 'r', encoding=check_charset('usbhid.txt')) as f:
with open('out.txt', 'w') as fi:
for line in f:
a = line.strip()
if a and len(a) == 16:
out = ':'.join(a[i:i+2] for i in range(0, len(a), 2))
fi.write(out + '\n')
#最后用脚本提取
# print((line[6:8])) #输出6到8之间的值
#取出6到8之间的值
normalKeys = {
"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09": "f", "0a": "g", "0b": "h", "0c": "i",
"0d": "j", "0e": "k", "0f": "l", "10": "m", "11": "n", "12": "o", "13": "p", "14": "q", "15": "r",
"16": "s", "17": "t", "18": "u", "19": "v", "1a": "w", "1

5万+

被折叠的 条评论
为什么被折叠?



