当前位置:网站首页>CTF流量分析常见题型(二)-USB流量
CTF流量分析常见题型(二)-USB流量
2022-06-30 17:46:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
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改为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]就代表了击键信息 (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':
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' + outputkeyboard2.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":
continue
if line[6:8] in normalKeys.keys():
output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
else:
output += ['[unknown]']
except:
pass
keys.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:
pass
for i in range(len(output)):
try:
if output[i]=="<CAP>":
flag+=1
output.pop(i)
if flag==2:
flag=0
if flag!=0:
output[i]=output[i].upper()
except:
pass
print ('output :' + "".join(output))运行第一个脚本得到
BCFGIJGFEDCABACFEDCA7200[DEL]53[DEL]93
因为[DEL]是删除键,恢复出6位数字。所以flag: 7205932、鼠标流量
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 :
continue
x = int(line[3:5],16)
y = int(line[6:8],16)
if x > 127 :
x -= 256
if y > 127 :
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 == 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流量分析之题型深度解析
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132254.html原文链接:https://javaforall.cn
边栏推荐
- 冰河老师的书
- 如何利用AI技术优化独立站客服系统?听听专家怎么说!
- Leader: who can use redis expired monitoring to close orders and get out of here!
- php利用队列解决迷宫问题
- MySQL n'a pas pu trouver MySQL. Solution temporaire pour le fichier Sock
- 医院在线问诊小程序源码 互联网医院源码 智慧医院源码
- NFT technology for gamefi chain game system development
- Solution of enterprise supply chain system in medical industry: realize collaborative visualization of medical digital intelligent supply chain
- 20220528【聊聊假芯片】贪便宜往往吃大亏,盘点下那些假的内存卡和固态硬盘
- Tensorflow2 ten must know for deep learning
猜你喜欢

opencv数据类型代码表 dtype

MRO industrial products procurement management system: enable MRO enterprise procurement nodes to build a new digital procurement system

Small program container technology to promote the operation efficiency of the park

全栈代码测试覆盖率及用例发现系统的建设和实践

Leader: who can use redis expired monitoring to close orders and get out of here!

Multipass Chinese document - setting graphical interface

Hospital online consultation applet source code Internet hospital source code smart hospital source code

Detailed single case mode

Redis - persistent RDB and persistent AOF

煤炭行业数智化供应商管理系统解决方案:数据驱动,供应商智慧平台助力企业降本增效
随机推荐
Countdowncatch and completabilefuture and cyclicbarrier
Is it safe to open a mobile stock account? Is it reliable?
js 字符串截取方法汇总
Infineon - GTM architecture -generic timer module
使用excel快速生成sql语句
深度学习编译器的理解
挖财账号开户安全吗?是靠谱的吗?
医院在线问诊小程序源码 互联网医院源码 智慧医院源码
Delete duplicate elements in the sorting linked list ii[unified operation of linked list nodes --dummyhead]
Compilation problems and solutions of teamtalk winclient
服务器之间传文件夹,文件夹内容为空
Regular expressions (regular matching)
Apple Watch无法开机怎么办?苹果手表不能开机解决方法!
System integration project management engineer certification high frequency examination site: prepare project scope management plan
20220607跌破建议零售价,GPU市场正全面走向供过于求...
视频内容生产与消费创新
Cloud Native Landing Practice Using rainbond for extension dimension information
MySQL事务并发问题和MVCC机制
torch stack() meshgrid()
When selecting smart speakers, do you prefer "smart" or "sound quality"? This article gives you the answer