搜索
查看: 121|回复: 0

新手入门必须知道的如何在CTF中少走弯路

[复制链接]
发表于 2018-7-1 21:06:30 | 显示全部楼层 |阅读模式
自己并不是专业的赛棍也没有打过很多比赛,这篇文章是自己在CTF中对于杂项这块知识学习的小结,希望可以对初入CTF的同学有所帮助,在CTF中少走弯路从而更快的提升自己。
文中所使用的题目请见底部网盘链接。
一、流量分析篇
通常比赛中会提供一个包含流量数据的 PCAP 文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析。
PCAP 这一块作为重点考察方向,复杂的地方在于数据包里充满着大量无关的流量信息,因此如何分类和过滤数据是参赛者需要完成的工作。
概括来讲在比赛中的流量分析有以下三个方向:
1、流量包修复
2、协议分析
3、数据提取
我们首先用一个合天的实验来对流量分析进行初探(wireshark之文件还原)
场景:
黑客通过ARP欺骗,使用wireshark获取了整个局域网内的流量信息,无意之中发现有人在某个网站上上传了一份文件,但是他不知道怎么用wireshark去还原这份文件,所以将监听的数据报保存了一份wireshark监听记录,我们需要对流量包进行分析并还原出目标所上传的图片。
操作流程:
打开数据包发现数据共有148条(算很少了)

但是手动一条一条去审计也很费精力。利用wireshark的显示过滤功能,因为从题目中我们确定,上传时候访问的是网站,所以在filter中输入http,显示所有的http协议数据包,还剩下32个

通过分析我们发现在末尾第143条数据中看到upload关键词的post数据包,从而怀疑这条就是涉及到上传的数据包。

知识补充
以前的POST方式是不支持传送文件的,对于普通的post来说,他的Content-type是application/x-www-from-urlencode,也就意味着消息的内容会被url编码,但是后来支持传送文件,将Content-type扩展为multipart/form-data,来向server发送二进制数据,并且还要用一个内容分隔符来分割数据,boundry.
同时chrome和ie的策略也有所不同,IE是传送完整的路径,而Chrome只传送文件名。
如果拥有编写网站的经验,就会知道上传文件提交可以使用一个post表单的形式,所以也可以使用显示过滤器选出所有POST方法提交的数据包(http.request.method==”POST”)



通过对这个数据包进行分析,得到确实上传了一张图片,文件名为bingo.png,同时由于文件较大,TCP协议对其进行了切片,一共切了5个片,点击各个Frame可以看到每个包中的内容。

其实在这一步我们就可以直接将其中图片的十六进制数据进行复制,用一些十六进制编辑器(例如Winhex)写入其中保存为bingo.png就可以了(注意去掉不该有的数据。)

这里我们利用TCP流跟踪,对这个会话进行完整分析。


有两个数据包,一个是请求的包,一个是响应的包,我们选择较大的请求包(因为里边包含原始图片信息),选择原始类型将其进行保存。

然后利用winhex将其打开,发现其囊括了整个HTTP请求(包括请求所用的头部以及所POST的数据包括boundary)

这里就不用原实验中的方法了因为较为麻烦,我们知道PNG图片的文件头为89 50 4E 47,所以直接在winhex中搜索十六进制数据,删除其前边的所有数据。


图片传送完毕还有其相关的尾部信息(可在刚才的wireshark流中查看),也对其进行删除操作


最后将其命名为bingo.png,打开图片得到key。

现在我们来对在比赛中的三个方向进行分析
1、流量包修复
比如一个流量包它的文件头也是对的,里边也没有包含其他的文件等等等等,但是就是打开出现一些未知的错误,这时候就要考虑对流量包进行修复。
这类题目考察较少,通常都借助现成的工具例如PCAPFIX直接修复。
Tools:
PcapFix Online https://f00l.de/hacking/pcapfix.php
PcapFix https://github.com/Rup0rt/pcapfix/tree/devel
下边介绍流量包几个常见的块,详细介绍可以看:http://www.tcpdump.org/pcap/pcap.html
一般文件结构

常见块
Section Header Block(必须存在)

Interface Description Block(接口描述,必须存在,描述接口特性)

Packet Block(数据块)

2、协议分析
此类方向需要对分析流量包工具所用的语法有一定的掌握,这里以wireshark为例,须掌握wireshark过滤器(捕捉过滤器与显示过滤器)的基础语法,从而更快更精准的获取指定的信息
捕捉过滤器:用于决定将什么样的信息记录在捕捉结果中,需要在开始捕捉前设置。
显示过滤器:用于在捕获结果中进行详细查找,可以在得到捕捉结果后进行更改
捕捉过滤器基础语法
Protocol Direction Host(s) Value LogicalOperations other expression
tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128
Protocol
可能的值: ether, fddi, ip, arp, rarp, decnet,lat, sca, moprc, mopdl, tcp and udp,如果没有特别指明是什么协议,则默认使用所有支持的协议。
Direction
可能的值: src, dst, src and dst, src or dst,如果没有特别指明来源或目的地,则默认使用 “src or dst” 作为关键字。
Host(s)
可能的值: net, port,host, portrange,如果没有指定此值,则默认使用”host”关键字。
例如,”src 10.1.1.1″与”src host 10.1.1.1″相同。
Logical Operations
可能的值:not, and, or
否(“not”)具有最高的优先级,或(“or”)和与(“and”)具有相同的优先级
“not tcp port 3128 and tcp port23″与”(not tcp port 3128) and tcp port23″相同。
举例分析:
tcp dst port 3128 //目的TCP端口为3128的封包。
ip src host 10.1.1.1 //来源IP地址为10.1.1.1的封包。
host 10.1.2.3 //目的或来源IP地址为10.1.2.3的封包。
src portrange 2000-2500
//来源为UDP或TCP,并且端口号在2000至2500范围内的封包
not icmp //除了icmp以外的所有封包。
显示过滤器基础语法
Protocol String1 String2 ComparisonOperator Value Logical Operations other expression
Protocol
可以使用大量位于OSI模型第2至7层的协议。在Expression中可以看到,例如,IP,TCP,DNS,SSH
String1,String2
可选择显示过滤器右侧表达式,点击父类的+号,然后查看其子类
Comparison Oerators
可以使用六种比较运算符

Logical Expressions

举例
snmp || dns || icmp //显示SNMP或DNS或ICMP封包
ip.addr == 10.1.1.1 //显示源或目的IP为10.1.1.1的封包
ip.src != 10.1.2.3 and ip.dst!=10.4.5.6 //显示源不为10.1.2.3并且目的不为10.4.5.6的封包
tcp.port == 25 //显示来源或目的TCP端口号为25的封包
tcp.dport == 25 //显示目的TCP端口号为25的封包
如果过滤器语法是正确的,表达式背景为绿色,否则为红色

前文中的wireshark文件还原就可以说是一个很基础的数据包流量分析。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

菜鸟论坛

菜鸟论坛-致力于个人网站发展的草根站长联盟,为广大从事互联网工作、前端开发、个人站长、网站搭建、SEO优化、网络运营以及其他领域的个人草根站长同学提供一个免费公益性的信息交流与资源分享的站长平台。

微信公众号

联系我们

  • 广告合作
  • QQ:542750839

QQ|手机版|小黑屋|菜鸟论坛 ( 鲁ICP备17013748号 )|网站地图

Powered by Discuz! X3.4 © 2018 MZHENG.CN

快速回复 返回顶部 返回列表