0x00 前言
在学习Wireshark常见使用时,对常见CTF流量分析题型和铁人三项流量分析题的部分问题进行了简单总结。由于篇幅过长,于是另起一篇总结USB流量包分析,包括键盘流量
和鼠标流量
。
0x01 USB流量包分析
USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。在CTF中,USB流量分析主要以键盘和鼠标流量为主。
1、键盘流量
USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节
。其中键盘击键信息集中在第三个字节中。
在这里插入图片描述
如图,发现击键信息为0x06,即对应的按键为C
键位映射关系参考:《USB键盘协议中键码》中的HID Usage ID
flag隐藏在usb流量中,通过USB协议数据中的键盘键码转换成键位。
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 #提取并去除空行
shell复制代码
2.根据《USB键盘协议中键码》中的HID Usage ID将数据还原成键位,可写一个Python脚本进行快速转换。
【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
shell复制代码
在这里插入图片描述
(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()
py python复制代码
此时对应的第三字节,也就是[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' + output
py python复制代码
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": continue if line[6:8] in normalKeys.keys(): output += [[normalKeys]],[shiftKeys]]]=='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))
py python复制代码
运行第一个脚本得到
在这里插入图片描述
BCFGIJGFEDCABACFEDCA7200[DEL]53[DEL]93 因为[DEL]是删除键,恢复出6位数字。所以flag: 720593
shell复制代码
2、鼠标流量
USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节
。
其中第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。
第二个字节可以看成是一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。
第三个字节与第二字节类似,代表垂直上下移动的偏移。
在这里插入图片描述
如图,数据信息为0x00002000,表示鼠标垂直向上移动20。
flag隐藏在usb流量中,通过USB协议数据中的鼠标移动轨迹转换成flag。
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 #提取并去除空行
shell复制代码
2.根据usb协议鼠标数据还原鼠标移动轨迹,可写一个Python脚本进行快速还原。
【NSCTF】这是一道鼠标流量分析题。
提取码:q6ro
(1)使用tshark 命令把pcap的数据提取并去除空行到usbdata.txt
tshark -r usb2.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
shell复制代码
(2)使用上面提到过的加冒号的脚本,并将脚本里提到的16
改为8
,得到
python3 maohao.py
py python复制代码
在这里插入图片描述
(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()
py python复制代码
测试发现flag信息藏在右键中,即当脚本中btn_flag取2时可以得到一系列坐标
在这里插入图片描述
(4)用gnuplot将xy.txt
里的坐标转化成图像
gnuplot gnuplot>plot "xy.txt"
shell复制代码
在这里插入图片描述
发现方向反了,使用windows上的”画图”垂直翻转一下即可。
在这里插入图片描述
最终得到flag
在这里插入图片描述
0x02 后记
本次总结了USB流量包的流量分析,对键盘流量和鼠标流量有了简单的了解。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论