CTFHub学习日记
MISC
一、流量分析
1、数据库类流量
1)MySQL流量
题目:
一份名位mysql.pcap的文件
个人思路:
使用Wireshark打开,发现多种类型的流量如SSH,TCP,ARP,MySQL,联系题目,对MySQL流量进行追踪,发现不能很快出结果。
然后对字符串进行搜索,尝试搜索”flag”,”ctf”等字符串,发现找到flag。
研究学习:
参考网上的一张关于MySQL的图
也就是说Mysql建立连接的过程包括登录和查询阶段。对MySQL协议流量进行过滤之后,得到
现在分析可以知道,前半部分是登录阶段,进行了三次登录尝试,前两次失败,最后一次成功;接着进行对关于user的version、database、table进行了查询,最后查询到之后对数据进行了删除。
最后对flag所在位置的思考,从网上了解到,这个flag的设立位置通常是登录IP,在这里也就是攻击者的IP地址。
2)Redis流量
题目:
一个名为redis.pcap的流量包
个人思路:
通解方法,Wireshark打开之后,直接搜索”ctfhub“、”flag“等关键词,发现搜到像是flag的东西,但是不完整,看到flag2之后想到应该是拼接flag。
直接就得到了完整flag
研究学习:
使用NoSQL(非关系型数据库)进行存储,
SQL(关系型数据库):
基于表格(Table)和关系(Relationship)模型,数据存储在行(Row)和列(Column)中。
强调数据的结构化和一致性,通过关系表之间的外键(Foreign Key)来实现数据关联。
示例:MySQL、PostgreSQL、Oracle。
NoSQL(非关系型数据库):
数据模型多样,常见的有键值存储(Key-Value)、文档存储(Document)、列存储(Column)、图存储(Graph)等。
不依赖固定的表格结构,数据存储形式更加灵活。
示例:MongoDB(文档存储)、Redis(键值存储)、Cassandra(列存储)、Neo4j(图存储)。
3)MongoDB流量
题目:
一个名为mongodb.pcap的文件
个人思路:
仍然是用Wireshark打开之后,过滤MongoDB流量,直接搜索“ctfhub”,一个一个审计便能找到flag
研究学习:
使用NoSQL进行文档存储,MongoDB使用类似于JSON的查询语法。
4)Data(ICMP)
题目:
ping 也可以携带数据 ?一个名为icmp_data.pcap的流量包
个人思路:
使用Wireshark打开,过滤ICMP流量,查看字符串,发现结尾有很多WWW……,搜索常见字符串无果,在翻动时发现每条流量的字符串中都有AWWWW……的结构(只有代表的字符改变),从头开始看,发现每条“reply”的字符构成“ctfhub{……}”,一个一个记录下来,得到flag。
研究学习:
- ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种网络层协议,主要用于在IP网络中传递控制和错误信息。它常用于网络设备之间的通信,帮助进行网络故障排除、错误报告和网络管理。
- PING 地址时ICMP协议流程
一、发起方发送 ICMP Echo Request
当用户执行
ping
命令时(例如ping <IP地址>
),发起方(通常是本地主机)会执行以下操作:
构造 ICMP 数据包:
类型(Type):设置为
8
,表示 ICMP Echo Request。代码(Code):设置为
0
。校验和(Checksum):计算 ICMP 数据包的校验和,用于数据完整性验证。
标识符(Identifier):通常是一个随机值,用于区分不同的
ping
请求。序列号(Sequence Number):从
0
开始,每次发送递增,用于跟踪请求和响应的对应关系。数据部分:通常包含一些填充数据,如时间戳或随机字节,用于测量往返时间(RTT)。
封装到 IP 数据包:
ICMP 数据包被封装到 IP 数据包中,目标地址是用户指定的 IP 地址。
IP 头部包含源 IP 地址(发起方的 IP)和目标 IP 地址(被
ping
的 IP)。发送数据包:
- 发起方通过网络接口将封装好的 IP 数据包发送到目标主机。
二、目标主机接收 ICMP Echo Request
目标主机收到 ICMP Echo Request 数据包后,会执行以下操作:
解析 ICMP 数据包:
检查 ICMP 类型是否为
8
(Echo Request)。验证校验和是否正确,以确保数据完整性。
构造 ICMP Echo Reply:
类型(Type):设置为
0
,表示 ICMP Echo Reply。代码(Code):设置为
0
。校验和(Checksum):重新计算校验和。
标识符(Identifier):保持与收到的 Echo Request 相同。
序列号(Sequence Number):保持与收到的 Echo Request 相同。
数据部分:保持与收到的 Echo Request 的数据部分一致。
封装到 IP 数据包:
- 将 ICMP Echo Reply 数据包封装到 IP 数据包中,目标地址是发起方的 IP 地址。
发送数据包:
- 目标主机将封装好的 IP 数据包发送回发起方
三、发起方接收 ICMP Echo Reply
发起方收到 ICMP Echo Reply 数据包后,会执行以下操作:
解析 ICMP 数据包:
检查 ICMP 类型是否为
0
(Echo Reply)。验证校验和是否正确。
检查标识符和序列号是否与之前发送的 Echo Request 匹配。
计算往返时间(RTT):
- 通过比较发送时间和接收时间,计算出数据包的往返时间(RTT),并显示在
ping
命令的输出中。输出结果:
如果成功收到 Echo Reply,
ping
命令会输出类似以下内容:
Reply from <目标IP>: bytes=32 time=10ms TTL=64
如果在超时时间内未收到响应,会输出:
Request timed out.
四、异常情况
在某些情况下,
ping
命令可能会收到其他类型的 ICMP 消息,例如:
目标不可达(Destination Unreachable):
如果目标主机不可达,中间路由器可能会发送 ICMP 类型
3
(Destination Unreachable)消息,代码可能为:
0
:网络不可达。
1
:主机不可达。
6
:目的网络未知。
7
:目的主机未知。超时(Time Exceeded):
- 如果数据包的 TTL(生存时间)耗尽,中间路由器会发送 ICMP 类型
11
(Time Exceeded)消息,代码为0
(TTL 超时)。
- ICMP 数据包结构
ICMP 数据包的结构如下:
1
2
3
4
5
6
7
8
9
10
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 类型 | 代码 | 校验和 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 标识符 | 序列号 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据部分 ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5) Length (ICMP)
题目:
一个icmp_len.pcap文件
个人思路:
使用Wireshark打开,过滤ICMP流量,搜索常见字符串无果,再逐个审计,发现并没有直接的字符存在。联系题目lenth,发现每个Data的字符串长度都不一样,记录每个字符
1 |
|
转换为ASCII字符,得到flag
1 |
|
研究学习:
分析Data部分的长度可变,因而能够隐藏信息
6)LengthBinary (ICMP)
题目:
ping 包的大小有些奇怪
个人思路:
用Wireshark打开,发现Data部分的长度不一,但只有两种长度,结合题目猜测,较长的Data部分代表1,较短的代表0,记录下来:
1 |
|
转成字符串,便得到flag:
1 |
|
研究学习:
仍然是利用Data部分长度可变隐藏信息