hws2023的一道misc,没接触过,写一份博客,稍微带一点鼠标流量,自己做题收获,可能在某些情况仅适用本题
找到有用的usb流量
网上大部分讲USB协议数据在Leftover Capture Data域中,就这道题,以及目前已知少量博客显示,HID Data域中也具有价值(USB URB里找有没有数据就行)。鼠标流量数据长度为四个字节,键盘流量数据长度为八个字节,就这个题而言,若鼠标流量数据长度不满足,格式也不太对
鼠标流量
第一个字节:代表按键(00时,代表没有按键;01时,代表按左键;02时,代表当前按键为右键)
第二个字节:值为正时,代表鼠标右移像素位;
值为负时,代表鼠标左移像素位
第三个字节:代表垂直上下移动的偏移(当值为正时,代表鼠标上移像素位;值为负时,代表鼠标下移像素位)
上述引用和进一步了解后续鼠标流量具体流程可参考这篇文章:https://blog.csdn.net/qq_46150940/article/details/115431953
键盘流量(自己做题收获,可能仅适用本题)
本题就在HID Data域
第一个字节:代表按键(00时,代表没有按键;不论02或者20做题时统一当shift键)
第三个字节:代表键盘敲击时具体字母(hid键盘报告格式)
脚本或者自己对照
找出相应信息后,脚本直接还原信息比较快速方便,但是如果刚刚接触,一下子拿一个现成的脚本去改,不理解,修改难度比较大,就可以先找一个差不多脚本运行一下(得出结果不全,但是可以给手动对照一点参考,自己理解对照的对不对),然后自己手动对照hid键盘报告格式,了解原理,改着也方便
取一小段:
02:00:00:00:00:00:00:00 // 第三个字节没有数据不看
02:00:04:00:00:00:00:00 // 第一个字节为02,键盘操作shift键和第三个字节代表的键
//由上边可得第三个字节没有数据的可以直接忽略,即第一个字节为02或者20,shift键只作用于本行
20:00:26:00:00:00:00:00 // 第一个字节为20,shift键和第三个字节代表的键
20:00:00:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:10:00:00:00:00:00 // 直接第三个字节代表的键
00:00:00:00:00:00:00:00
USB(键盘)流量分析具体流程
流量包直接导入即可,寻找有用信息的IP,过滤导出
usb.src =="2.3.1"
拖kali里面(python运行方便,也不咋出错),拖不进去的配一下tools。python脚本在那块,就在哪块,右键打开终端!!!不容易出错
使用tshark 命令把pcap的数据提取并去除空行到usbdata.txt
# sed '/^\s*$/d' 剔除空行,减少不必要麻烦特别鼠标流量
tshark -r usb.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
对!没错,我改包名了,不太会tshark命令,就和找到教程里面的包名保持一致,还是要了解一下的。可以看这个!
注意大小写
-r: 读取本地文件,可以先抓包存下来之后再进行分析;
-T 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text。
-t 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)。
-E: 当-T字段指定时,设置输出选项,header=y意思是头部要打印;
-e: 当-T字段指定时,设置输出哪些字段
# 字节和字节间加冒号的脚本
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
a=f.readline().strip()
if a:
if len(a)==16: # 鼠标流量的话len改为8
out=''
for i in range(0,len(a),2):
if i+2 != len(a):
out+=a[i]+a[i+1]+":"
else:
out+=a[i]+a[i+1]
fi.write(out)
fi.write('\n')
else:
break
fi.close()
还原信息(有冒号时提取数据的[6:8],无冒号时数据在[4:6])
# x
normalKeys = {
"04":"a", "05":"b", "06":"c", "07":"d", "08":"e",