前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >USB流量在CTF中的解析思路

USB流量在CTF中的解析思路

作者头像
OneTS安全团队
发布2025-02-07 16:23:55
发布2025-02-07 16:23:55
8900
代码可运行
举报
文章被收录于专栏:OneTS安全团队OneTS安全团队
运行总次数:0
代码可运行

声明

本文属于Pigeon作者投稿原创文章,转载请声明出处!本文章仅用于学习交流使用,因利用此文信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,OneTS安全团队及文章作者不为此承担任何责任。

0x00 USB流量介绍

USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。

在CTF中,USB流量分析主要以键盘和鼠标流量为主。我们重点分析USB协议的数据部分,其中包含了USB的信息,数据主要分布在USB协议中的Leftover Capture Data域,对于不同类型的流量,其数据长度会有区别。

USB协议的完整内容可以参考wireshark的wiki:

https://wiki.wireshark.org/USB

接下来我们以2022CISCN的一道USB流量题为例,介绍一下USB流量中键盘流量和鼠标流量的解析方法

• 先用 wireshark ez_usb.pcapng 文件进行流量分析,根据字节长度可知有两个键盘流量来源 2.8.1 2.10.1 以及一个鼠标流量来源 2.4.1:

• 用 usb.src == "2.8.1" 过滤其他地址并单独导出,其他地址同理:

• 根据键盘映射关系,编写脚本 sniff.py ,可以提取Leftover Capture Data域中的键盘输入信息,将src == 2.8.1src==2.10.1两个键盘流量包的数据导出,解析成按键(sniff1-->2.8.1,sniff2-->2.10.1),结果如下:

• 可以看到src==2.8.1的键入值是以“52 61 72 21 1A 07 00”开头,说明是 RAR 压缩文件,其中代表大写锁定,代表回删,所以我们删掉和以及前面的 c 之后,导入十六进制编辑器并导出为 RAR 文件并解压,解压密码为35c535765e50074asrc==2.10.1的键盘输入)

0x02 键盘流量解析思路

• 首先我们需要借助wireshark的命令行工具tshark,提取USB协议中Leftover Capture Data域数据信息,通过usb.capdata即可获取,完整指令如下:

代码语言:javascript
代码运行次数:0
复制
tshark -r ez_usb-2.8.1.pcapng -T fields -e usb.capdata > usbdata1.txt

• 需要注意:

wireshark 高版本默认支持 USB HID 协议,将不会显示 Leftover Capture Data 而是 HID Data,可以将原指令中的 usbcap.data 改为 usbhid.data,或者通过“分析-->启用的协议”,将 USB HID 协议禁用即可:

若不禁用,可以在 kali 中用另一种方式用指令过滤(会比分开手动导出方便一点)(上面脚本中os调用的指令,windows命令行是可以直接执行的)

代码语言:javascript
代码运行次数:0
复制
   tshark -r ez_usb.pcapng -T fields -e usbhid.data -Y "usb.device_address == 8"> 281.txt

• 由于键盘流量的击键信息集中在第三个字节,我们可以胡烈其他字节的信息。

提取后根据Usb Keyboard的映射表即可进行转换,比如十六进制 22 表示 “5”,39 表示<CAP>即 Caps Lock,2a 表示<DEL> 即 Delete 或 Backspace,完整映射表见这里:hut1_3_0.pdf (usb.org)(89~94页)。

• 有关tshark命令的详细使用参考wireshark官方文档:

https://www.wireshark.org/docs/man-pages/tshark.html

•脚本如下(获取完整脚本请在公众号回复03):

代码语言:javascript
代码运行次数:0
复制
sniff.py:
import os 
os.system("tshark -r ez_usb-2.8.1.pcapng -T fields -e usb.capdata > usbdata1.txt") 
因脚本太长放不下,请在公众号回复03获取键盘流量解密完整脚本,可直接复制

0x03 鼠标流量解析思路

• 在本题中,通过键盘流量就已经可以拿到flag了,不过借用该题中src==2.4.1的部分,谈一谈鼠标流量的解析思路。

• 通常情况下,USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节。

其中第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。

第二个字节代表鼠标水平移动的像素值,取值为正代表向右平移,取值为负代表向左平移

第三个字节代表鼠标垂直移动的像素值,取值为正代表向上平移,取值为负代表向下平移

• 下图中00002000表示鼠标垂直向上移动20像素。

• 由于鼠标协议的标准较多,其数据部分的长度不是4字节的情况也有,也有可能是6字节、7字节、8字节等,需要查询相关协议剔除无用字节

例如本题中的鼠标流量是部分6字节及部分7字节,需要根据实际实际情况修改相关字节。

Windows系统下的解析思路

• 首先将数据导出(方法同2.8.12.10.1的数据,用sniff.py脚本先导出 Leftover Capture Data域的数据到 usbdata3.txt):

• 由于鼠标流量长度不一致(6字节+7字节),常见鼠标流量为4字节,我们删去了末尾无用的0字节进行调整:

• 使用脚本 add_colon.py usbdata4.txt 中的数据添加冒号得到 out.txt,再使用脚本 xy.py out.txt 中的十六进制信息转换为鼠标坐标,得到xy.txt(注意脚本里的 btn_flag 需要设成0):

• 再将xy.txt复制到 gnuplot.exe (在其官网下载到 window 得到)的目录下,使用指令plot "xy.txt"解析并绘制得到图像(也可以调用python的PIL库绘制图形):

•脚本如下(获取完整脚本请在公众号回复03):

代码语言:javascript
代码运行次数:0
复制
add_colon.py:
f=open('usbdata4.txt','r') 
fi=open('out.txt','w') 
请在公众号回复03获取鼠标流量解密完整脚本(Windows系统),可直接复制

Linux系统下的解析

• 使用脚本 usbMiceDataHacker.py 梭哈,由于此脚本适用于4字节和8字节的鼠标流量,此处6字节和7字节的流量需要经过数据处理才能使用。

同上述方法,导出鼠标流量 usbdata3.txt,修改字节长度为4,保存到 usbdata4.txt,随后将文件重命名为 usb.dat,注释掉脚本中43行到46行的代码,并将此数据文件和usbMiceDataHacker.py置于同一目录下:

• 用指令 python3 usbMiceDataHacker.py usb2.4.1.pcapng ALL 处理得图像:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OneTS安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档