当前位置: 首页 > news >正文

USB流量分析总结(实战[NISACTF 2022] 破损的flag)

一、USB流量分析

USB协议的数据部分在 Leftover Capture Data 域之中,可以用tshark命令将leftover capture data 数据单独提取出来,利用命令如下:

tshark -r 1.pcapng -T fields -e usb.capdata > usbdata.txt
tshark -r 1.pcapng -T fields -e usbhid.data > usbdata.txt

二、鼠标流量分析

在CTF中对鼠标流量一般是需要还原鼠标的经过轨迹,关键信息就在还原轨迹之中。由于不同鼠标使用的鼠标协议是不同的,每个数据包的数据区可能是4字节、6字节或者8字节。
数据报的数据区若是4字节时的含义如表9-3所示。
第一字节:按键。0x00为没有按键, 0x01为左键,0x02为右键。
第二字节:水平位移。为正(小于127)是向右移动多少像素,为负(负数补码,大于127小于255)是向左移动多少像素。
第三字节:垂直位置。为正(小于127)是向上移动多少像素,为负(负数补码,大于127小于255)是向下移动多少像素。
第四字节:滚轮数据。0,没有滚轮运动;1,垂直向上滚动一下;2,水平滚动右键一次;0xFE,水平滚动左键单击一下;0xFF,垂直向下滚动一下。

当数据区是6个字节时,第一个字节表示按键指示左右键, 第二个字节表示水平位移,第三个字节表示垂直位移。
数据区若是8个字节时,第一个字节表示按键指示左右键,第三个字节表示水平位移,第五个字节表示垂直位移。
可以利用Tshark命令将Leftover Capture Data 提取保存到 usbdata.txt 文件中:

tshark -r 1.pcapng -T fileds -e usb.capdata > usbdata.txt
tshark -r 1.pcapng -T fields -e usbhid.data > usbdata.txt

我们对照键盘映射关系,转换成相应的字符。所以,根据映射关系,可以写出 键盘映射脚本

nums = []
keys = open('usbdata.txt','r')
result = open ('1.txt'.'w')
posx = 0
posy = 0
for line in keys:
	line =	line.strip()
	#处理类似“0000120000000000”内容
	if len(line) == 16:
		x = int(line[4:6],16)
		y = int(line[8:10],16)
	#处理类似“00:00:12:00:00:00:00:00”内容
	elif len(line) == 24:
		x = int(line[6:8],16)
		y = int(line[12:14],16)
	else:
		continue
	if x>127: x -= 256
	if y>127: y -= 256 
	posx += x
	posy += y
	#1 for left(左键),2 for right(右键),0 for noting(无按键)
	btn_flag = int(line[02]16)
	if btn_flag == 1:
		result.write(str(posx)+''+str(-posy)+'\n')
keys.close()
result.close()	

然后我们用UsbMiceDataHacker的工具,从鼠标流量包里提取USB数据转换成坐标,并作画来还原鼠标活动轨迹。

三、实战: 【DASBOOK】9.4.2键盘流量分析

键盘数据包的数据长度为8个字节, 击键信息在第3个字节。每次击键都会产生一个数据包。 如果我们拿到的流量包是USB协议,即数据报中Capture Data 的信息都是8个字节,几乎只有第3个字节不为00,下图很明显能看出来:
在这里插入图片描述
当拿到atta.pcapng流量包后,放到kali里面通过tshark命令将Leftover Capture Data提取保存到usbdata.txt文件中,命令如下:

tshark -r atta.pcapng -T fields -e usb.capdata>usbdata.txt 

然后编写一个键盘映射脚本Keyboard.py,针对提取出的usbdata.txt代码如下:

#-*-coding:utf-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:"!",0x1f:"@",0x20:"#",0x21:"$",0x22:"%",0x23:"^",0x24:"&",0x25:"*",0x26:"(",0x27:")",0x28:"<RET>",0x29:"<ESC>",0x2a:"<DEL>",0x2b:"\t",0x2c:"<SPACE>",0x2d:"_",0x2e:"+",0x2f:"{",0x30:"}",0x31:"|",0x32:"<NON>",0x33:"\"",0x34:":",0x35:"<GA>",0x36:"<",0x37:">",0x38:"?",0x39:"<CAP>",0x3a:"<F1>",0x3b:"<F2>",0x3c:"<F3>",0x3d:"<F4>",0x3e:"<F5>",0x3f:"<F6>",0x40:"<F7",0x41:"<F8>",0x42:"<F9>",0x43:"<F10>",0x44:"<F11>",0x45:"<F12>"}
result = ''
with open('usbdata.txt','r') as f:
    for line in f.readlines():
        line = line.strip()
        #处理形如“0000120000000000”的内容
        if len(line) == 16:
            s = int(line[4:6],16)
        #处理形如“00:00:12:00:00:00:00”
        elif len(line) ==24:
            s = int(line[6:8],16)
        else:
            continue
        if s!=0:
            result += mappings[s]
print(result)

得到结果:
在这里插入图片描述
然后自己手动转换成 flag{helloworld!}

四、实战:[NISACTF 2022] 破损的flag

下载后的附件,无扩展名。
在kali中通过file命令可得出是pcap流量包数据:
在这里插入图片描述
键盘数据包的数据长度为8个字节, 击键信息在第3个字节。

然后我们用前一个实战案例中的tshark命令提取出usbdata.txt ,如下图:
在这里插入图片描述

我们可以用前文的 键盘映射脚本进行提取,得到信息:
在这里插入图片描述

推测出来是键盘密码,在键盘密码中寻找被包围起来的字母,如下所示:
UJKO:i
POK::l
QWSZ:a
QASE:w
IKLP:O
RDCVG:f
NJK<:m
RDCVG:f
TFVBH:g
WSDR:e
NJK:m
UHNMK:j
TFVBH:g
RDCVG:f
UJKO:i
POK::l
WSDR:e
BHJM:n
YHJI:u
POK:l
WAZXD:s
XDFV:c
RFGY:t
YHJI:u

把这段代码解密后就是:
imgulfflagiswelcometfjnu
因为要补全单词:
得到flag{welcome_to_fjnu}

相关文章:

  • 把握好自己的节奏, 别让世界成为你的发条匠
  • Linux 进程间通信
  • 【QT】-易错点笔记-2025-2-7
  • 【组件安装FAQ】Connector 24.10.06-1: [cnc0306002] already exists.
  • 实现自定义圆角imageView, 抗锯齿
  • Django 模型的逆向工程
  • VMware Workstation安装rocky9.5虚拟机
  • 操作系统 2.2-多进程总体实现
  • P8255 [NOI Online 2022 入门组] 数学游戏 题解
  • C++:模板(上篇)
  • 【C++】析构函数与虚析构函数区别
  • 【Proteus仿真】【STM32单片机】智能阳台控制系统
  • 利用PHP爬虫根据关键词获取17网(17zwd)商品列表:实战指南
  • 【记录】高性能服务器运行DeepSeek
  • JavaScript(最后一个元素的索引就是数组的长度减 1)array.length - 1
  • 清华北大推出的 DeepSeek 教程(附 PDF 下载链接)
  • [傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中
  • 刘火良 FreeRTOS内核实现与应用之1——列表学习
  • langchain系列(九)- LangGraph 子图详解
  • 从零开始实现大语言模型(十三):预训练大语言模型GPTModel
  • 一个域名两个网站/株洲百度seo
  • seo联盟怎么赚钱/新网seo关键词优化教程
  • 网站首页html代码/抖音seo怎么收费
  • 怎样做网站漂浮/新网站 seo
  • 做关于植物的网站/企业推广app
  • 高大上公司网站/百度官方客户端