一、追踪流和导出流
由于MTU (最大传输单元)的影响,TCP报文流量会被分割成多个小数据报,因此需要用到Wireshark的追踪流操作。
如图所示:
为了方便提取传输过程中的文件,Wireshark提供了导出对象功能,一般为按照HTTP对象导出。如下图所示:
二、显示过滤器规则
显示过滤器可以用很多不同的参数来作为匹配标准,如IP地址、协议、端口号、某些协议头部的参数。
过滤语法格式: [not] Expression [and | or] [not] Expression
常用运算符:
等于 ==
大于 >
大于等于≥
小于等于≤
不等于!=
非 not(!)
或 or(||)
与 and( && )
常见过滤器规则及其说明:
按照http协议进行过滤:http
按照ip地址为192.168.1.1进行过滤: ip addr == 192.168.1.1
按照HTTP协议且内容含有XXX进行过滤显示: http contains " XXX"
按照POST请求的HTTP协议进行过滤显示 : http.request.method=="post"
按照HTTP协议且IP目的地址为192.168.1.1进行组合过滤: http && ip.dst == 192.168.1.1
实战:
按照HTTP协议且IP源地址为192.168.1.1进行组合过滤
http && ip.src == 47.122.3.214
效果如图:
三、查找内容
Wireshark如果查找特定的字符,如图所示:
也可以在键盘按住CTRL+F
过滤搜索,常用于按照字符串“flag”,在分组字节流里进行搜索。
搜索的模式共四种:
(1)显示过滤模式 (见上述“二、显示过滤器规则
”)
(2)十六进制值 :用于查找不可见字符
(3)字符串:常用,搜索某些常见字符串
(4)正则表达式: 搜索那些符合某个模式(规则)的文本
(5)分组列表:在每个分组的“INFO”字段内容进行搜索,如图:
(6)分组详情:在每个分组的网络模型、协议的具体内容处进行搜索,如图:
(6)分组字节流(常用):在每个分组的传输字节流中进行搜索,如图:
四、HTTP流量分析
其实http是明文传输数据,通过“追踪流”的方式,可以直接看到明文内容。常见的是,通信双方传输一张图片、一个压缩包,需要我们通过“导出流”的方式,提取文件后,再进一步分析。
实战——DASBOOK[第九章][9.3.1 HTTP流量分析]http流量分析
通过追踪TCP流,拿到flag:
五、Webshell混淆流量分析
webshell 是进行网站攻击的一种恶意攻击脚本环境,属于加密流量,局部字符串会被加密(使用Base64编码),对于加密的webshell,我们一开始可以不必对Base64等编码后的请求内容进行分析,可以看其相应的结果大致知道该webshell的作用。
所以攻击者只需在HTTP请求头部中的X-UP-CALLING-LINE-ID部分添加恶意命令即可getshell
。其中,HTTP请求头部中的关键内容如下:
GET /test.php? 1=phpinfo();HTTP/1.1
Host:127.0.0.1
air:SGVsbG9SdwRkZXI=
x-up-calling-line-id:assert($_GET[1]);
Connection:close
这里表示接收GET传入的值“1”参数,该值为phpinfo();
被assert处理,即assert('phpinfo();');
实战——DASBOOK[第九章][9.3.2 webshell混淆流量分析]webshell流量分析
下载完流量包后,点击统计->协议分级
。可以看到TCP和UDP协议都有,再往上层就是HTTP协议。先对HTTP协议进行过滤,分析数据包是否含有用信息,如下图:
进行HTTP协议的过滤,发现有多个post请求访问upload下的php。对该数据包进行HTTP数据流追踪进行下一步分析,如下图:
到这里,如果你想弄清原理,就需要对下图的代码进行base64解密:
我们一开始可以不必对Base64编码后的请求内容进行分析
我们可以追踪HTTP流
,猜测一下,猜测是从目标网站找到了6666.jpg、flag.txt和hello.zip
。只要我们在流量中找到传输这文件的数据包就可以把文件导出来,进而拿到flag。
通过追踪TCP流,对Length大小排序,拿到
Z1值,Z2值
:
Z1值
如下:
用010Editor
新建一个16进制文件:
点击编辑,粘贴自16进制文件文本:
另存为7777.jpg
即可:
得到一张图片,结合前面的信息(hello.zip),估计是压缩包的解压密码。:
再次追踪HTTP流
,看到一条数据流有压缩包:
改成原始数据,另存为压缩包:
把密码输入进去,就拿到flag了:
六、TLS流量分析
HTTPS是在TCP/IP与HTTP之间增加了一个安全传输协议,而安全传输层协议一般采用SSL/TLS协议为通信双方提供识别和认证通道。可以说,TLS握手是HTTPS通信的基础,类似与三次握手。
为了提高用户体验,出现了session ticket方案,即服务器会将协商好的主密钥加密成session ticket 并发送给客户端,下次握手时,该客户端会将这个session ticket 带上,服务器解密成功后就可以用这个主密钥和双方随机产生的随机数再一次生成会话密钥,从而简化了握手流程。
所以,如果拿到服务器的主密钥(sslkey.log)和预主密钥,就可以对加密的会话内容解密。
针对TLS流量分析题,我们可以通过某些方法得到TLS握手过程中协商的加密方法、密钥、随机数等信息,将上述导入Wireshark,即可完成对HTTPS流量的解密。
实战——DASBOOK[第九章][9.3.3 TLS流量分析]TLS流量分析
发下一个长度比较长的数据包,追踪http看一下:
发现了一个文件sslkey.log ,把这个数据包保存下来,命名为sslkey.log:
然后,导入到TLS密钥中:
然后再过滤 http流,注意一下HTTP/JSON
格式的流量,就看到flag了:
七、实战——[INSHack2019]Passthru
可以看到附件里有capture.pcap
和ssl.log
文件,很明显是TLS流量分析题。借助Wireshark导入sslkey.log文件,就可以对capture.pcap 文件进行分析,如图所示:
方法1:
在“显示过滤器”中筛选HTTP协议,通过追踪HTTP流的形式,拿到一串加密密文,如图:
发现HTTP的参数中有“kcahsni”,如图:
因此,在“显示过滤器”中筛选“kcahsni”字段,语法如下:
http.request.uri.query.parameter contains "kcahsni"
效果如图:
因此,引申出方法2:
使用tshark进行提取,语法如下:
tshark -r capture.pcap -o 'tls.keylog_file:sslkey.log' -Y 'http.request.uri.query.parameter contains"kcahsni"' -T fields -e http.request.uri.query.parameter > query.txt
解释:
-r参数:指定流量包文件
-o参数:设置首选项引入sslkey.log文件
-Y参数:设置显示过滤器
-T fields: 仅输出指定的字段内容
-e参数:指定要显示或导出的协议字段
效果如图:
将所有Kcahsni参数的值拼接转换为16进制,发现内容需要逆序处理一下,处理后得到flag。
逆序处理python脚本如下:
from urllib.parse import unquote
import re
with open('query.txt','r') as f:
data = unquote( f.read())
rlist = re.findall(r'kcahsni=(.*?),',data)
print(bytes.fromhex(''.join(rlist))[::-1])
流程如下: