问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CTF流量分析
CTF
对CTF比赛中常见的几种协议流量进行法分析。因为流量分析作用通常是溯源攻击流量的。
0x01 简述 ======= 流量分析作用通常是溯源攻击流量的。 通常在比赛中提供一个流量数据包的PCAP文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析的。 PCAP文件这一块作为重点考察方向,复杂的地方在于数据包里充满着大量无关的流量信息,因此如何分类和过滤数据是我们需要完成的目的!!! 0x02 流量包结构与Wireshark的使用 ======================= 2.1 界面介绍 -------- 分组列表、分组详情、分组字节流:   2.2 过滤器 ------- 显示过滤器如上图;捕捉过滤器在我们打开wireshark的时候可以进行不同网卡的选择捕捉过滤。  - 过滤符号 | 比较运算 | 含义 | |---|---| | eq | 等于 == | | nc | 不等于 != | | gt | 大于 > | | lt | 小于 < | | ge | 大于等于 >= | | le | 小于等于 <= | | 逻辑运算 | 含义 | | and | 逻辑与 && | | or | 逻辑或 \| | | xor | 逻辑异或 ^^ | | not | 逻辑非 ! | - ip的过滤 ```php ip.addr==192.168.1.1 //只显示源/目的ip为192.。。的数据包 not ip.src==1.1.1.1 //不显示源ip为1.1.1.1的数据包 ip.src==1.1.1.1 or ip.dst==1.1.1.2 //只显示源ip为1.1.1.1或目的ip为1.1.1.2的数据包 ``` - 端口的过滤 ```php tcp.port eq 80 //不管端口是来源的还是目标的都显示 tcp.port == 80 tcp.port eq 80 or udp.port eq 80 tcp.dstport == 80 //只显示tcp协议的目标端口80 tcp.srcport == 80 //只显示tcp协议的来源端口80 udp.port eq 15000 tcp.port >= 1 and tcp.port <= 80 //过滤端口范围 ``` - MAC地址过滤 ```php eth.dst == A0:00:00:04:C5:84 //过滤目标mac etc.src eq A0:00:00:04:C5:84 //过滤来源mac eth.addr eq A0:00:00:04:C5:84 //过滤来源MAC和目标都等于A0:00:00:04:C5:84的 ``` - HTTP请求方法的过滤 ```php http.request.method == "GET" http.request.method == "POST" http.host matches "www.baidu.com|baidu.cn" //matches可以写多个域名 http.host contains "www.baidu.com" //contains 只能写一个 http contains "GET" ``` - 数据包长度的过滤 ```php udp.length == 26 这个长度是指 udp 本身固定长度 8 加上 udp 下面那块数据包之和 。 tcp.len >= 7 指的是 ip 数据包(tcp 下面那块数据),不包括 tcp 本身 ip.len == 94 除了以太网头固定长度 14,其它都算是 ip.len,即从 ip 本身到最后 frame.len == 119 整个数据包长度,从 eth 开始到最后 ``` 也可以在分组详情中选择想要选择的字段,单机右键--作为过滤器应用--选中或者非选中!!! 2.3 分组分析 -------- 追踪流:我们不但要知道每一个包我们怎么去看,也要清楚连续的流之间的关系。 我们知道的http的包,协议是tcp协议。当一个http数据包非常大的时候,在传输过程中分层传输。追踪流看一下http中传输的数据流量  2.4 导出对象 -------- 那么,如果我们想看攻击者上传了什么木马或者文件,也是可以在他的流量包中看出来,那么导出的话就可以在文件-->导出对象-->选择对应得协议。   另一种方法,悬着要导出得字段,在分组详情的data处单机右键导出分组字节流。  2.5 其他 ------ - 统计 统计-->协议分级统计(流量包有多种多样) 统计-->http--分组计数(占比,状态包的多少) - 搜索 ctrl+f - 颜色 视图--着色规则 0x03. tshark使用 ============== 是在安装wireshark自带的tshark工具。 ```php tshark -r \*\*\*.pcap -Y \*\* -T fields -e \*\*\*\*\* > data tshark -r %s -T fields -e usb.capdata -Y 'usb.data.len == 8' -Y 'usb.src == "3.9.1"' > data ``` - -r 指定数据包 - -Y 指定过滤器(跟wireshark中是一样的) - -T fields -e 配合指定显示的数据端(可以选中右击作为过滤器查看名字) Eg:tshark -r easy.pcapng -T fields -e ip.src > 1.txt (**流量包**) 如果要去掉1.txt,那么就要grep进行过滤 ```php tshark -r easy.pcapng -T fields -e ip.src | grep "\[^\\s\]" ```  0x04. 各种协议 ========== http协议分析 -------- 基于http的应用流量,明文传输容易分析。 通常是分析攻击者攻击时的流量包,用于溯源发现攻击者信息和被利用的漏洞,难点是需要配出大量无关流。  举例分析一下: - 菜刀流量 首次打开流量数据包,在统计中协议分析可以看到只存在http包,没有其他,然后追踪流  发现攻击POST请求访问了一个3.php的文件数据,响应包则是列出了一个目录情况,那么说明攻击者拿到了一个webshell,在用客户端连接后,执行了第一个命令就是列出目录的命令。  并且在列出的目录下,存在一个flag.tar.gz文件。 接着分析第二个tcp流:  这个返回来一个POST响应是一个webshell 不重要。 接着分析第三个tcp流:  看得到在执行了一些命令之后,响应包是一个二进制后的内容,大概可以猜到是跟前面flag.tar.gz有关。首先,将请求中的命令解码看到底是执行什么命令  看到echo出X@Y,fopen访问文件,并且readfile文件,那么提取出响应返回的文件,在分组详情中选择data块 然后导出分组字节流保存为tar.gz后缀文件。 使用010打开,在刚才的命令中又看到前后都有无用的输出,那么就要把前后去掉。  那么,通过解压得到flag.txt中的key。  https协议分析 --------- TLS加密流量,通常是需要**密钥解密**。 HTTPs= http+SSL/TLS 服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据 那么解密,就是拿到密钥后导入wireshark可以看到明文的http内容。例题见后 USB协议 ----- usb接口是目前最为通用的外设接口之一,通过监听该接口的流量,可以得到很多有意思的东西。例如键盘击键,鼠标移动与点击,存储设备的明文传输通信,usb无线网卡网络传输内容。 USB协议的文档,可以找到这个值与具体键位的对应关系 [http://www.usb.org/developers/hidpage/Hut1\_12v2.pdf](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) ### 鼠标 数据一般在Leftover Capture Data中,每一个数据包的数据区有4个字节(可能回有8个字节),第一个字节代表按键,当取0x00时,代表没有按键、当0x01时,代表按左键,当为0x02时,代表按右键。第二个字节可以看成是一个signed byte 类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少个像素。为负时,代表水平左移多少个像素。第三个字节与第二个字节类型,代表垂直上下移动的偏移像素。  用tshark 将鼠标数据提取出来: ```php tshark - r mice.pacpng -T fields -e usb.capdata > micedata ``` 然后在脚本将鼠标数据转换成坐标图分析鼠标点击和移动轨迹分析。 ### 键盘 它的与鼠标类似,数据也在Leftover Capture Data中,键盘数据包的数据长度为8个字节,击键信息集中在第三个字节,每次key storke都会产生一个keyboard event usb packet 用tshark 将键盘数据提取出: ```php tshark -r mice.pcapng -T fields -e usb.capdata > micedata ``` 下载地址<https://github.com/WangYihang/UsbKeyboardDataHacker> WIFI协议 ------ IEEE 802.11是现今无线局域网通用的标准,常见认证方式有:不启用安全、WEP、WPA/WPA2-PSK、PA/WPA2 802.1X > BSSID :路由器、AP的MAC地址 PWR:信号强度,- -看就是越小越强了 Data :传输的数据大小,大的可能在下载或看视频什么的 CH:无线信道,要看准 ENC :加密协议 ESSID:这个就不用多说了,wiff名称,有中文可能会出现乱码哈 对流量包爆破密码 aircrack-ng XXX.pcap -w /usr/share/wordlists/rockyou.txt 用密码解密流量包 airdecap-ng \[capfile\] -e \[ESSID\] -p \[password\] 0x05. CTF中相关的题目 =============== http流量分析 -------- http1.1中,可允许一个tcp中发送多个http流 打开流量数据包分析,追踪tcp流,前面的几个数据流是列目录和linux 安装包,一直到第7个tcp包,发现  它是将post中action进行了base64编码让后执行了eval,那么@action是要执行的命令,将action的值解码后分析:  首先,它echo三个字符进行混淆填充,然后是通过fwirte向f写了buf内容,而f是post的z1的内容,buf则是已输入的内容以2个为分组进行了切分,再加上%再进行urldecode,相当于hex编码的解码。 再查看z1的内容:  那么验证刚才想法会在这里目录中写一个文件,文件内容就是z2: 那么我们将z2的内容以二进制的形式保存下来。并且可以看到这个列目录别之前多了一个666.jpg文件  在010中以16进制文本粘贴后,看到是我们熟悉的jpg文件,当然不是最终得flag文件。 然后再往下查看tcp流,再第9个中发现post数据中存在一个flag.txt文件(在搜索中也是可以直接搜到的)  并且看到数据开头是pk开头,并且后面提示需要密码,那他就是一个压缩包文件。 那么在分组详情中保存data的分组字节流,并保存为zip后缀文件。并且在010中删除头尾混淆字符   解压之后得到flag。 https流量分析 --------- 打开数据包,看到的里面数据是非常多的,我们统计中分级统计查看一下看到的是存在udp tcp smtp ftp等协议,对每一个协议进行比较费时间,这里直接看SMTP邮件协议的数据包。  那么,导出该数据包中所有的smtp协议的数据包,通过文件-->导出对象-->IMF  save保存全部,  打开邮件1234是广告,而第5给是一个邮件密钥,然后更具提示,将密钥格式补全:  那么接下来就要导入https的私钥后就可以看到明文传输信息。 首先我们筛选出所有的https的协议数据包 (tls)  然后在编辑-->首选项-->protocols-->TLS 将进行导入  然后编辑-添加一个密钥,  保存确当后,TLS数据包中就有可以看明文的http数据包了,追踪http流就发现了flag。  USB流量分析 ------- 鼠标:usb2 拿到数据包,里面不知有鼠标,也有其他的数据包,那么使用tshark将数据导出: tshark - r usb2.pcap -T fields -e usb.capdata > micedata  那么,也可以用工具提取出左右键的轨迹: 下载地址:<https://github.com/WangYihang/UsbMiceDataHacker> 安装完成后,运行语句 ```php python UsbMiceDataHacker.py usb2.pcap RIGHT python UsbMiceDataHacker.py usb2.pcap LEFT python UsbMiceDataHacker.py usb2.pcap ALL ```  键盘:usb1 打开流量数据包,看到和鼠标的类似,我们直接用脚本工具跑 python UsbKeyboardDataHacker.py usb1.pcap  可以简单看到一些i am ...但是存在一些内容混淆的,我们看到流量包存在来源有2个3.10.1和3.9.1 。 那么解决办法就是在脚本中修改一下抓取来源: ```php tshark -r %s -T fields -e usb.capdata 'usb.data\_len == 8' > %s tshark -r %s -T fields -e usb.capdata -Y 'usb.data\_len == 8' -Y 'usb.src == \\"3.10.1\\"' > %s ``` 修改为3.9.1时,我们抓取键盘真正敲击内容。  ```php hello<SPACE>,<SPACE>i<SPACE>am<SPACE>writing<SPACE>something<SPACE>important<SPACE>.<RET>but<SPACE>i<SPACE>do<SPACE>not<SPACE>use<SPACE>pinyin<RET>i<SPACE>am<SPACE>old<SPACE>.<RET><RET>ddpeiyuj,q<SPACE>s<SPACE>gavclwbmpyg<SPACE>rug<SPACE>stk<SPACE>b<SPACE>.<RET>i<SPACE>fpi<SPACE>j<SPACE>et<SPACE>kkyy<DEL><DEL><DEL><DEL>k<SPACE>yygy<SPACE>r<SPACE>gaaa<SPACE>lwbmr<SPACE>.<RET>wwq<SPACE>sk<SPACE>c<SPACE>rcn<SPACE>ghdmp<SPACE>qkd<SPACE>ytd<SPACE>r<SPACE>ruuj<SPACE>wt<SPACE>o<SPACE>pyg<SPACE>rug<SPACE>stk<SPACE>rjuq<SPACE>h<SPACE>fcu<SPACE>"<RET><RET>q<SPACE>yi<SPACE>j<SPACE>pyg<SPACE>rug<SPACE>stk<SPACE>kwkw<SPACE><RET><RET><RET>over<SPACE><RET>enjoy<SPACE>my<SPACE>misc<SPACE>.<RET><RET><RET> ``` 这里还有最后一个小弯,由提示中的“不使用拼音 ”等信息推测出上文的特殊编码可能是某种拼音之外的古老的输入法,例如五笔,毕竟这也是做keylogger的人需要考虑而且头疼的一个地方。尝试对照着输入,可以得出如下文字: ```php hello, i am writing something important . but i do not use pinyin i am old 大家注意,我要开始输出福拉格了。 不过是用中文形式输出的。 你可以把下面这句话的拼音作为福拉格提交上去: 我就是福拉格哈哈 over enjoy my misc . ``` WIFI流量分析 -------- 打开数据包,看到全部是加密的WiFi流量数据。  首先,我们用kali自带工具aircrack-ng看它是不是wifi包  那么使用一个字典对流量包爆破密码 aircrack-ng XXX.pcap -w /usr/share/wordlists/rockyou.txt  然后用密码解密流量包: 解密后在该目录下生成一个xxx-dec.cap解密成功的流量包。  打开解密成功的流量包,里面出现各种协议流量  然后进行常规的分析,直接在搜索中搜索flag,发现flag.txt字符串  通过分析流,发现flag.txt是在一个png中的pk压缩包中,那么我们将该原始数据导出,然后利用binwalk去解压。 解压后发现是一个加密压缩包  回到刚才的tcp流中发现cookie中存在一个jwt数据,解密看一下   告诉我们密码是刚才ping过的一个网站,那么我们过滤dns流量   尝试里面每个域名,发现是最后一个域名,然后查看flag。
发表于 2022-10-20 09:30:02
阅读 ( 13653 )
分类:
WEB安全
4 推荐
收藏
0 条评论
请先
登录
后评论
Obsession
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!