CTF流量分析常见题型(二)-USB流量

article/2025/9/21 3:18:22

0x00 前言

在学习Wireshark常见使用时,对常见CTF流量分析题型和铁人三项流量分析题的部分问题进行了简单总结。由于篇幅过长,于是另起一篇总结USB流量包分析,包括键盘流量鼠标流量

0x01 USB流量包分析

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

1、键盘流量

USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节。其中键盘击键信息集中在第三个字节中。
在这里插入图片描述
如图,发现击键信息为0x06,即对应的按键为C
键位映射关系参考:《USB键盘协议中键码》中的HID Usage ID

1.题型:

flag隐藏在usb流量中,通过USB协议数据中的键盘键码转换成键位。

2.解题思路:

1.使用kali linux中的tshark 命令把cap data提取出来:

tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt
tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt #提取并去除空行

2.根据《USB键盘协议中键码》中的HID Usage ID将数据还原成键位,可写一个Python脚本进行快速转换。

3.题目示例:

【NSCTF】安全评测人员在对某银行卡密码输入系统进行渗透测试,截获了一段通过USB键盘输入6位数字密码的流量,其中也包含了一些其他无关的USB设备的流量,你能从中恢复出6位数字密码吗?最终提交的flag格式为flag
提取码:q6ro
(1)使用tshark 命令把pcap的数据提取并去除空行到usbdata.txt

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

在这里插入图片描述
(2)提取出来的数据可能会带冒号,也可能不带(有可能和wireshark的版本相关),但是一般的脚本都会按照有冒号的数据来识别

有冒号时提取数据的[6:8]
无冒号时数据在[4:6]

可以用脚本来加上冒号

f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:a=f.readline().strip()if a:if len(a)==16: # 鼠标流量的话len改为8out=''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:breakfi.close()

此时对应的第三字节,也就是[6:8]就代表了击键信息
(3)提取出键盘流量后需要用脚本还原数据对应的信息。同时找到两个还原信息的脚本(python2):
keyboard1.py

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':continuenums.append(int(line[6:8],16))keys.close()output = ""
for n in nums:if n == 0 :continueif n in mappings:output += mappings[n]else:output += '[unknown]'print 'output :\n' + output

keyboard2.py

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", "1b":"x", "1c":"y","1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4","22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
shiftKeys = {"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", "1b":"X", "1c":"Y","1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$","22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
output = []
keys = open('out.txt')
for line in keys:try:if line[0]!='0' or (line[1]!='0' and line[1]!='2') 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' or line[6:8]=="00":continueif line[6:8] in normalKeys.keys():output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']else:output += ['[unknown]']except:passkeys.close()flag=0
print("".join(output))
for i in range(len(output)):try:a=output.index('<DEL>')del output[a]del output[a-1]except:passfor i in range(len(output)):try:if output[i]=="<CAP>":flag+=1output.pop(i)if flag==2:flag=0if flag!=0:output[i]=output[i].upper()except:passprint ('output :' + "".join(output))

运行第一个脚本得到
在这里插入图片描述

BCFGIJGFEDCABACFEDCA7200[DEL]53[DEL]93
因为[DEL]是删除键,恢复出6位数字。所以flag: 720593

2、鼠标流量

USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节

其中第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。
第二个字节可以看成是一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。
第三个字节与第二字节类似,代表垂直上下移动的偏移。

在这里插入图片描述
如图,数据信息为0x00002000,表示鼠标垂直向上移动20。

1.题型:

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

2.解题思路:

1.使用kali linux中的tshark 命令把cap data提取出来,并去除空行

tshark -r usb2.pcap -T fields -e usb.capdata > usbdata.txt
tshark -r usb2.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt #提取并去除空行

2.根据usb协议鼠标数据还原鼠标移动轨迹,可写一个Python脚本进行快速还原。

3.题目示例:

【NSCTF】这是一道鼠标流量分析题。
提取码:q6ro
(1)使用tshark 命令把pcap的数据提取并去除空行到usbdata.txt

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

(2)使用上面提到过的加冒号的脚本,并将脚本里提到的16改为8,得到

python3 maohao.py

在这里插入图片描述
(3)使用mouse.py测试信息隐藏位置

nums = []
keys = open('out.txt','r')
f = open('xy.txt','w')
posx = 0
posy = 0
for line in keys:if len(line) != 12 :continuex = int(line[3:5],16)y = int(line[6:8],16)if x > 127 :x -= 256if y > 127 :y -= 256posx += xposy += ybtn_flag = int(line[0:2],16)  # 1 for left , 2 for right , 0 for nothingif btn_flag == 2 : # 1 代表左键f.write(str(posx))f.write(' ')f.write(str(posy))f.write('\n')f.close()

测试发现flag信息藏在右键中,即当脚本中btn_flag取2时可以得到一系列坐标
在这里插入图片描述
(4)用gnuplot将xy.txt里的坐标转化成图像

gnuplot
gnuplot>plot "xy.txt"

在这里插入图片描述
发现方向反了,使用windows上的"画图"垂直翻转一下即可。
在这里插入图片描述
最终得到flag
在这里插入图片描述

0x02 后记

本次总结了USB流量包的流量分析,对键盘流量和鼠标流量有了简单的了解。

参考博客:
USB流量知识点小结
CTF流量分析之题型深度解析


http://chatgpt.dhexx.cn/article/UaAqiFJT.shtml

相关文章

网站流量日志数据分析系统

1. 点击流数据模型1.1. 点击流概念 点击流(Click Stream)是指用户在网站上持续访问的轨迹。这个概念更注重用户浏览网站的整个流程。用户对网站的每次访问包含了一系列的点击动作行为,这些点击行为数据就构成了点击流数据(Click Stream Data),它代表了用户浏览网站的整…

流量分析

一、流量分析的价值 业务上: 1&#xff0e;清晰了解流量来源以及各来源的质量。 2&#xff0e;清晰了解流量在产品内部的运行轨迹和路径&#xff0c;从而优化产品结构。 3.清晰了解在用户路径的每个节点上&#xff0c;流量转化和损耗情况&#xff0c;从而找出问题点进行优化。 …

简单流量分析CTF(wireshark)

没做过流量分析的题目&#xff0c;也不怎么了解怎么流量分析&#xff0c;准备系统的理一下思路。。 这有第一个小题目。通过几个题目来了解wireshark的使用以及流量分析吧。。 追踪流量 bugku的杂项题目。 链接&#xff1a;https://pan.baidu.com/s/1OnO7OXIQB8ztl8J2q48jB…

大数据流量分析

数据分析工具:FineBI 商业智能工具http://www.finebi.com/ 数据分析的本质其实是做数据对比分析&#xff0c;没有数据对比&#xff0c;单一的指标统计往往难以发挥数据价值。像我们常见的数据对比分析方法有同比、环比、占比等一系列分析指标&#xff0c;那是不是所有的数据业…

Java开发的流量分析系统

Java开发的流量分析系统 一&#xff0c;此系统是网上搜的潭州学院的Tony老师的视频学习的&#xff0c;用于实时分析一个网站的访问量的简单的例子&#xff0c;主要功能是用户登录&#xff0c;展示在线人数以及信息。其中细致的讲解了单例模式&#xff0c;Vector集合的应用&…

大数据实战:用户流量分析系统

--------------------------------------------------------------------------------------------------------------- [版权申明&#xff1a;本文系作者原创&#xff0c;转载请注明出处] 文章出处&#xff1a;http://blog.csdn.net/sdksdk0/article/details/51628874 作者&am…

大数据离线---网站日志流量分析系统(1)---简介及框架

本次介绍网站日志流量分析系统&#xff0c;首先是简介和架构。后面会对架构中需要的每个模块的进行逐个介绍。本篇主要分为两个部分 网站日志流量分析系统简介整体技术流程和架构 1. 网站日志流量分析系统简介 1.1点击流数据模型 点击流的概念 点击流&#xff08; Click St…

大数据流量分析系统

大数据流量分析系统 前几天去了移动营业厅办了个卡&#xff0c;就不说某动的内幕了&#xff0c;说说上行流量和下行流量统计手机号码的总流量。这次我们利用大数据来分析&#xff0c;大数据也有三大框架&#xff0c;Hadoop是离线计算框架&#xff0c;Storm是实时计算框架&…

使用流量分析系统进行资产梳理

很多网络管理人员都接触资产梳理&#xff0c;也有很多软件和系统附带资产梳理工具&#xff0c;但是根据明辰智航统计&#xff0c;很多企事业单位资产梳理工作是以前进行的&#xff0c;没有及时更新。网络管理人员甚至不了解企业网络中有多少个MAC地址、IP地址、端口、协议、应用…

网络异常流量分析系统设计

为什么要监测分析异常流量&#xff1f; 网络管理人员都希望在网络性能突然下降的时候找到“真凶”所在&#xff0c;并迅速解决问题。利用网络异常流量监测的方法&#xff0c;可以非常直观地看到网络流量是否有突然增长或者突然下降的现象&#xff0c;并进一步分析是那些用户产…

国内首个开源网络流量可视化分析平台 -- 流影

流影:基于流量的网络行为高级分析平台 流影是一款基于全流量的高级网络行为分析平台,该系统是由深海鱼(北京)科技有限公司流影项目组研发设计,首发开源是1.0版本。 项目简介 深海鱼(北京)科技有限公司专注于为客户提供优质的数据分析相关服务,近年来立足于客户的数字安…

大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)

文章目录 前言&#xff1a;基本概述Sqoop概述什么是Sqoop Flume概述什么是Flume为什么需要flume HIve概述什么是Hive 系统背景&#xff1a;模块开发数据采集使用Flume搭建日志采集系统 数据预处理实现数据预处理 数据仓库开发数据导出日志分析系统报表展示 前言&#xff1a; 提…

实战演习(四)——网络流量系统分析简介

笔者是一个痴迷于挖掘数据中的价值的学习人&#xff0c;希望在平日的工作学习中&#xff0c;挖掘数据的价值&#xff0c;找寻数据的秘密&#xff0c;笔者认为&#xff0c;数据的价值不仅仅只体现在企业中&#xff0c;个人也可以体会到数据的魅力&#xff0c;用技术力量探索行为…

网络流量在线分析系统的设计与实现

编译环境&#xff1a;visual studio2019&#xff0c;安装并配置winpcap和pthreads库函数 1 配置环境 1.1 安装vscode 参考微信公众号 软件安装管家。 1.2 安装MinGW-w64 下载地址&#xff1a;添加链接描述 安装参考博客&#xff1a;MinGW-w64安装配置全过程 第一步&#xf…

时间范围查询

开发工具与关键技术&#xff1a; VS,条件查询 作者&#xff1a;卢惠圳 撰写时间&#xff1a;2019年8月16日 在页面的表格数据中会有要根据时间来作为查询条件的数据&#xff0c;一般是根据时间范围来进行查询所以这里也是时间范围的查询&#xff0c;先将表格和进行时间范围查询…

oracle语句查询时间范围

oracle语句查询时间范围 参考网址 &#xff1a; https://blog.csdn.net/weixin_36436373/article/details/116541220?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167930069316800188562500%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%25…

VUE时间范围选择的组件

最近手写了一个框选时间的组件,可以按半个小时为单位选择时间 代码部分 <template><div><div class"byted-schedule"><table :key"itemKey" class"byted-schedule-calendar-table"><thead><tr><th rows…

Mysql获取指定时间范围数据

MySQL获取某个时间范围内的数据 TO_DAYS(date)函数。 to_days()&#xff1a;返回从0000年至当前日期的总天数。 目录 1、今天(TO_DAYS()) 2、今天昨天(TO_DAYS()) 3.近7天(DATE_SUB()) 5.本月(DATE_FORMAT()) 6.上一月(PERIOD_DIFF()) 7.本季度 8.上季度 9.本年 ​1…

Mybatis-Plus时间范围查询

方式一 通过apply方法&#xff0c;来实现时间范围查询&#xff0c;该方法可用于数据库函数&#xff0c;动态入参的params对应前面applySql内部的{index}部分&#xff0c;这样是不会有sql注入风险的&#xff0c;反之会有! apply(String applySql, Object... params) apply(boo…

elementui DateTimePicker组件 限制时间范围(包含时分秒)

1、基础范围控制&#xff08;只控制日期&#xff0c;不含时分秒&#xff09; <template><el-date-pickertype"datetime"v-model"startDate"value-format"yyyy-MM-dd HH:mm:ss"placeholder"选择开始时间"size"mini"…