流量包分析

流量包分析

usb流量包

分析

拿到数据包使用wireshark打开后看到Protocol 为USB协议。USB协议的数据部分在Leftover Capture Data域之中,kali下可以用tshark命令可以将 leftover capture data单独提取出来 命令如下:
tshark -r usb1.pcapng -T fields -e usb.capdata > usbdata.txt
运行命令并查看usbdata.txt 发现数据包长度为八个字节,这里查到USB流量分为键盘流量和鼠标流量

键盘数据包的数据长度为8个字节,击键信息集中在第3个字节,每次key stroke都会产生一个keyboard event usb packet。
鼠标数据包的数据长度为4个字节,第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。第二个字节可以看成是一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。第三个字节与第二字节类似,代表垂直上下移动的偏移。
这里数据包长度是八个字节显然为键盘数据包
这里有usb的的映射表
http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
usb keyboard的映射表 根据这个映射表有写脚本解码得出的数据包

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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('usbdata.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

鼠标流量数据包转换脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nums = []
keys = open('data.txt','r')
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 == 1 :
print posx , posy
keys.close()

笔记本键盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nums=[0x66,0x30,0x39,0x65,0x35,0x34,0x63,0x31,0x62,0x61,0x64,0x32,0x78,0x33,0x38,0x6d,0x76,0x79,0x67,0x37,0x77,0x7a,0x6c,0x73,0x75,0x68,0x6b,0x69,0x6a,0x6e,0x6f,0x70]
s=''
for x in nums:
s+=chr(x)
print s
mappings = { 0x41:"A", 0x42:"B", 0x43:"C", 0x44:"D", 0x45:"E", 0x46:"F", 0x47:"G", 0x48:"H", 0x49:"I", 0x4a:"J", 0x4b:"K", 0x4c:"L", 0x4d:"M", 0x4e:"N",0x4f:"O", 0x50:"P", 0x51:"Q", 0x52:"R", 0x53:"S", 0x54:"T", 0x55:"U",0x56:"V", 0x57:"W", 0x58:"X", 0x59:"Y", 0x5a:"Z", 0x60:"0", 0x61:"1", 0x62:"2", 0x63:"3", 0x64:"4", 0x65:"5", 0x66:"6", 0x67:"7", 0x68:"8", 0x69:"9", 0x6a:"*", 0x6b:"+", 0X6c:"separator", 0x6d:"-", 0x6e:".", 0x6f:"/" }
output = ""
for n in nums:
if n == 0 :
continue
if n in mappings:
output += mappings[n]
else:
output += '[unknown]'
print 'output :\n' + output

Wireshark的使用姿势

过滤报文

1.过滤IP,如源IP或者目标 x.x.x.x
ip.src eq x.x.x.x or ip.dst eq x.x.x.x
2.过滤端口
tcp.port eq 80 or udp.port eq 80
3.过滤协议
tcp/udp/arp/icmp/http/ftp/dns/ip……
4.过滤MAC
eth.dst ==A0:00:00:04:C5:84
5.包长度过滤
6.http模式过滤
http.request.method== “GET”
7.ftp
ftp-data

协议分析

1.在statistics下选择protocol hierarchy,可以查看当前数据包中包含哪些协议
2.将所有选项都展开,通常我们关注HTTP协议的内容,其他明文的TCP协议或UDP协议内容也有可能需要关注。
3.在我们关注的协议上右键点击apply as filter ->selected,可以过滤出需要的协议类型。

流汇聚

在关注的http数据包或tcp数据包中选择流汇聚,可以将HTTP流或TCP流汇聚或还原成数据,在弹出的框中可以看到数据内容。
1、HTML中直接包含重要信息
2、上传或下载文件内容,通常包含文件名、hash值等关键信息,常用POST请求上传。
3、一句话木马,POST请求,内容包含eval,内容使用base64加密
4、TCP流:通常是命令行操作。

数据提取

使用wireshark可以自动提取通过http传输的文件内容,方法如下:
file->exportobjects->http
在打开的对象列表中找到有价值的文件,如压缩文件、文本文件、音频文件、图片等,点击saveas进行保存,或者saveall保存所有对象再进入文件夹进行分析。

无线密码破解

有时候我们打开一个文件,里面只有wireless LAN 协议,很有可能是WPA或WEP加密后的无线数据包。
使用aircrack-ng应用程序可以进行解密。
1、首先是命令行模式的教程,将目标加密包复制到aircrack-ng文件夹下
(1)用aircrack-ng检查cap包:
aircrack-ng.exeshipin.cap
(2)使用弱口令字典破解wpa加密
aircrack-ng.exe shipin.cap -w wordlist.txt
这里wordlist.txt是弱口令字典,包含了常见的路由器密码,可以网上下载到,也可以自动生成。
(3)用密码解密cap
这里用到airdecap-ng解密cap报文,使用到了刚才的essid和破解的密码
airdecap-ng.exe shipin.cap -e 0719 -p 88888888
于是在目录下生成一个shipin-dec.cap,使用wireshark打开。
参考: http://www.freebuf.com/column/153197.html

解题

strings

拿到流量包,先放到kali用strings,也就是几秒钟的事情
strings for1.pcapng | grep "{*}"
结果:
Pwnium{408158c115a82175de37e8b3299d1f93}

查找关键字

wireshark的过滤规则
直接查找Ctrl+f;字节流->字符串->查找

查看对话

统计->对话->tcp

转储文件

显示和保存数据[原始数据]->另存为->hex
验证:保存后,可以将保存的数据16进制显示,和源数据显示是否一样。
rar,zip等

##

Donate
-------------本文结束感谢您的阅读-------------