【流量分析】USB键盘与鼠标流量分析

这篇具有很好参考价值的文章主要介绍了【流量分析】USB键盘与鼠标流量分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0x00 USB流量包分析

USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。
在CTF中,USB流量分析主要以键盘和鼠标流量为主。
下面通过简单的讲解与例题的展示,分析键盘流量与鼠标流量。

例子中用到的文件为usb.pcap和usb2.pcap,我一起打包了放在云盘上,链接如下:
蓝奏云-usb.zip

0x01 键盘流量分析

USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节,其中键盘击健信息集中在第三个字节中,相关对应信息如下链接中所示;

  1. 🔗在线-USB HID to PS/2 Scan Code Translation Table
  2. 🔗蓝奏云-USB HID to PS/2 Scan Code Translation Table.pdf
  3. 🔗在线-USB协议中HID设备描述符以及键盘按键值对应编码表
  4. 🔗蓝奏云-USB协议中HID设备描述符以及键盘按键值对应编码表.pdf

如下所示,在使用wireshark捕捉到的流量中,我们主要看第三个字节的内容,将它与按键值相对以得出按键内容。
键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设
键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

题目背景

安全测评人员在对某银行卡密码输入系统进行渗透测试,截获了一段通过USB键盘输入6位数字密码的流量,其中也包含了一些其他无关的USB设备的流量,你能从中恢复出6位数字密码吗?最终提交的flag格式为flag{xxxxxx}。

解题思路

使用 kali linux中的tshark命令把cap data 提取出来,
根据《USB键盘协议中的键码》中的HID Usage ID将数据还原成键位;

1 使用命令tshark把cap data 提取出来

🔗tshark-wireshark官方文档
键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

Linux中使用tshark

安装:sudo apt-get install tshark
tshark -v
tshark -h

tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
  
  -r:设置tshark 分析的输入文件
  -T:设置解码结果输出的格式。包括fields,text,ps,psml和pdml,默认为text

如图可以看到生成了usbdata.txt

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

Windows中使用tshark

wireshark在安装时会自带一些工具,tshark便是其中之一,它可以在wireshark的安装路径中找到。
键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

#使用cmd或powershell进入安装路径后,执行以下命令
.\tshark.exe -r D:\Downloads\usb.pcap -T fields -e usb.capdata >D:\Downloads\usbdata.txt

在D:\Downloads\目录下便可看到文件usbdata.txt,此时的文件还有着默认的空行,我们使用脚本(或其他方式)删除空行

#使用脚本删除空行
with open('usbdata.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
lines = filter(lambda x: x.strip(), lines)
with open('usbdata.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

2 将文件用冒号进行分隔

#将上面的文件用脚本分隔,加上冒号;
f=open('usbdata.txt','r') 
fi=open('out.txt','w')
while 1:
  a=f.readline().strip() 
  if a:
    if len(a)==16:#键盘流量的话len为16鼠标为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()

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

3 最后用脚本提取

#最后用脚本提取
   # print((line[6:8])) #输出6到8之间的值
   #取出6到8之间的值
mappings = { 0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." }
nums = []
keys = open('out.txt')
for line in keys:
    if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
         continue
    nums.append(int(line[6:8],16)) 
keys.close()
output = ""
for n in nums:
    if n == 0 :
        continue
    if n in mappings:
        output += mappings[n]
    else:
        output += '[unknown]'
print 'output :\n' + output

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

flag{7200[DEL]53[DEL]93}

0x02 鼠标流量分析

USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节。
其中,
第一个字节代表按键,当取0x00时,代表没有按键,为0x01时,代表按左按键,为0x02时,代表当前按键为右键;
第二个字节可以成是一个signed byte类型,其最高位为符号位,当这个值为时,代表鼠标水平右移动多少像素,为时,代表水平左移多少像素;
第三个字节与第二个字节类似,代表垂直上下移动的偏移。
键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

如图0x00002000,表示鼠标垂直向上移动20。

题目背景

flag藏于usb流量中,通过USB协议数据中的鼠标移动轨迹转换成flag

解题思路:

1 使用命令tshark提取数据

tshark命令如下:

tshark -r usb2.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

2 将文件用冒号进行分隔

#将上面的文件用脚本分隔,加上冒号;
f=open('usbdata.txt','r') 
fi=open('out.txt','w')
while 1:
  a=f.readline().strip() 
  if a:
    if len(a)==8:#键盘流量的话len为16鼠标为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()

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

3 使用脚本提取坐标数据

nums = []
keys = open('Python\\USBread\\mouse\\out.txt','r',encoding="utf_16")
f = open('Python\\USBread\\mouse\\xy.txt','w',encoding="utf_16")
posx = 0
posy = 0
for line in keys:
    # if len(line) != 11:
    #     continue
    x=int(line[3:5],16)
    y=int(line[6:8],16)
    if x>127:
        print ("aaa")
        x-=256
    if y>127:
        print ("bbb")
        y-=256
    posx += x
    posy += y
    btn_flag = int(line[0:2],16) #1 for left,2 for right , 0 for nothing
    if btn_flag == 0:#此处的0可以修改为0(未按按键)、1(左键)、2(右键),将单独输出相应坐标文件。
        print (posx,posy)
        f.write(str(posx))
        f.write(' ')
        f.write(str(posy))
        f.write('\n')
f.close()

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设

4 将坐标转换成图片

from PIL import Image
img = Image.new('RGB',(2000,2000),(255,255,255))#创建Image对象
f =open('xy.txt')#xy.txt文件 
for line in f.readlines():
    point =line.split()
    img.putpixel((int(point[0]),int(point[1])),(0,0,0))#读取文件中的每一行,并修改像素 
f.close() 
img.show()

键盘流量分析,干货笔记,流量分析,解题,计算机网络,wireshark,计算机外设文章来源地址https://www.toymoban.com/news/detail-715342.html

到了这里,关于【流量分析】USB键盘与鼠标流量分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 项目:USB键盘和鼠标的复合设备

            我们的复合设备使用一个物理设备就可以完成多个功能。       使用复合设备同时完成USB键盘和鼠标功能,它的主要实现方式有两种, 第一个就是我们将多个设备描述符合并成一个,这个相对比较简单,我们只要根据相应的报告描述符处理数据就可以。 第二个就是

    2024年04月11日
    浏览(48)
  • Android 12.0 通过驱动实现禁用usb鼠标和usb键盘功能

    在12.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb的相

    2024年02月08日
    浏览(106)
  • Android 13.0 通过驱动实现禁用usb鼠标和usb键盘功能

    在13.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb的相

    2024年02月08日
    浏览(56)
  • 树莓派4B 鼠标键盘不可用,USB3.0&&USB2.0失效

    1.将sd卡插入电脑,找到config.txt 2.添加3条,具体哪条,有机会再看 备注:由于更新系统出现的问题,无语中。。。。。。。。。

    2024年02月06日
    浏览(41)
  • Linux驱动开发(十四)---USB驱动开发学习(键盘+鼠标)

    《Linux驱动开发(一)—环境搭建与hello world》 《Linux驱动开发(二)—驱动与设备的分离设计》 《Linux驱动开发(三)—设备树》 《Linux驱动开发(四)—树莓派内核编译》 《Linux驱动开发(五)—树莓派设备树配合驱动开发》 《Linux驱动开发(六)—树莓派配合硬件进行字

    2024年02月08日
    浏览(48)
  • USB复合设备构建CDC+HID鼠标键盘套装

    最近需要做一个小工具,要用到USB CDC+HID设备。又重新研究了一下USB协议和STM32的USB驱动库,也踩了不少坑,因此把代码修改过程记录一下。 开发环境: ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cubeprogramer v2.14.0 参考资料: STMicroelectronics/stm32_mw_usb_device: Provide

    2024年02月04日
    浏览(52)
  • STM32 CubeMX USB_(HID 鼠标和键盘)

    STM32 CubeMX 自动生成的USB_HID是鼠标类型的:键盘类型要做一点小修改; 参考: STM32CubeMX学习笔记 USB鼠标HID描述符以及数据格式

    2024年02月14日
    浏览(35)
  • 告警流量特征分析(护网蓝初面试干货)

    目录 一、流量特征 1、SQL注入 2、XSS 3、挖矿行为 二、webshell流量特征 1、中国菜刀 2、蚁剑 3、冰蝎 三、对告警流量分析 1、信息泄露 2、SQL注入 3、文件上传 4、XSS 5、代码执行 (1)对sqlmap的判断:若攻击者使用sqlmap且未加 --random-agent参数,则可以通过捕获请求包的user-agent字

    2024年02月08日
    浏览(42)
  • USB复合设备(键盘鼠标U盘三合一)基于标准库

    键盘鼠标属于HID,U盘功能属于MSC。至于这些定义,这里不再过多介绍。 网上有很多的例程,但是大多是基于HAL库的,标准库的我也找了不少例子看,但是没有HID+MSC的例程。最后还是看了个官方的复合设备例程才顿悟的,官方的例程,网上也很好找。搜USB Composite examples应该就

    2024年02月09日
    浏览(54)
  • 定义USB接口,鼠标类和键盘类都可以作为实现类去实现USB接口

    目录 程序设计 程序分析 系列文章 ​ 如图所示,我们电脑上都有USB接口,当我们的鼠标和键盘插上去之后才可以使用,拔出来就关闭使用。其实具体是什么USB设备,笔记本并不关心,只要符合USB规格的设备都可以。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包