📚 CTF :DNS 数据外泄分析
一、 题目概况
- 题目类型: 流量分析 / 取证
- 核心考点: DNS 隐写识别、十六进制解码、数据分片重组
- Flag格式:
Vx01D{} - 题目线索: 一份包含 DNS 流量的 pcap 数据包(或相关的 DNS 查询记录日志)。
二、 解题步骤复盘
Step 1: 流量过滤,锁定目标
在 Wireshark 中打开数据包,发现流量混杂。根据之前提取的帧信息(Dst Port: 53),得知这是 DNS 流量。
- 操作: 在 Wireshark 显示过滤器中输入
udp.port == 53或dns,过滤出所有 DNS 协议的包。
Step 2: 观察异常,识别隐写
浏览过滤后的 DNS 请求,发现大量针对 ctf.local 域的 A 记录查询,且子域名呈现出明显的规律:
3078563031447b444e.part1.ctf.local535f4c4142454c535f.part2.ctf.local4152455f4c4f55447d.part3.ctf.local
🔍 识别特征:
- 超长子域名: 主机名部分是一长串无意义的十六进制字符,这不符合正常用户的访问习惯。
- 分片标识: 域名中包含
part1、part2、part3,暗示数据被切割传输。 - 同一主域: 都指向
ctf.local,这是攻击者控制的虚拟域名(用于在本地 DNS 服务器上解析)。
Step 3: 提取数据,十六进制解码
将三部分的主机名前缀提取出来,进行 Hex 到 ASCII 的解码:
| 部分 | 十六进制字符串 | 解码过程 (每2位一个ASCII字符) | 解码结果 |
|---|---|---|---|
| Part 1 | 3078563031447b444e |
30(0), 78(x), 56(V), 30(0), 31(1), 44(D), 7b({), 44(D), 4e(N) |
0xV01D{DN |
| Part 2 | 535f4c4142454c535f |
53(S), 5f(_), 4c(L), 41(A), 42(B), 45(E), 4c(L), 53(S), 5f(_) |
S_LABELS_ |
| Part 3 | 4152455f4c4f55447d |
41(A), 52(R), 45(E), 5f(_), 4c(L), 4f(O), 55(U), 44(D), 7d(}) |
ARE_LOUD} |
⚠️ 注意点(关于前缀的映射):
严格来说,Part1 解码出的字面量是
0xV01D{DN。但在本题给定的 Flag 格式Vx01D{}约束下,这里的0x实际上是出题人对前缀Vx的一种编码表示(0x常作为十六进制前缀,此处做了双关映射)。因此将0x替换为Vx即可符合格式。
Step 4: 拼接重组,获取 Flag
将解码后的三部分按顺序拼接:
Vx01D{DN+S_LABELS_+ARE_LOUD}
🚩 最终 Flag: Vx01D{DNS_LABELS_ARE_LOUD}
三、 核心原理:DNS 数据外泄
这道题背后的真实攻防场景叫做 DNS 隧道/DNS 数据外泄。
- 为什么用 DNS 传数据?
在严格的企业网络中,防火墙通常会限制内部服务器与外网的 HTTP/HTTPS、SSH 等连接,但几乎永远不会阻断 DNS 查询(因为员工上网必须进行域名解析)。 - 外泄是如何发生的?
- 攻击者内网植入木马,获取了敏感数据(如密码、机密文件)。
- 木马将数据切割、编码(如 Hex 或 Base64),作为子域名的一部分,向攻击者控制的 DNS 服务器发起查询请求:
s3cr3t_data.attacker.com。 - 虽然查询最终可能失败或返回假 IP,但攻击者的 DNS 服务器日志中已经记录下了查询的域名,提取前缀即可还原数据。
四、 工具箱推荐
以后遇到类似题目,可以使用以下工具提高效率:
| 用途 | 工具 | 使用方法/特点 |
|---|---|---|
| 流量分析 | Wireshark | 过滤 dns,右键跟踪 UDP 流,或查看 DNS 查询的 Name 字段。 |
| 流量分析 | tshark (命令行) | tshark -r file.pcap -Y "dns.qry.name" -Tfields -e dns.qry.name 一键提取所有查询域名。 |
| 解码神器 | CyberChef | 神器。拖入 From Hex 模块即可解码,支持各种编码层层套娃。 |
| 在线解码 | Cryptii | 模块化编码/解码,界面直观,适合单步 Hex 转 ASCII。 |
| DNS查询 | dig / nslookup | 如果题目是在线环境需要主动查询,可用 dig A part1.ctf.local 获取记录。 |
五、 经验总结
- 看到 DNS 流量,重点关注查询域名:异常长、包含编码特征的子域名是最大的异常点。
- 注意分片顺序 :域名中若有
part1、_1、seq1等标识,一定要按顺序拼接,不要按包的时间顺序盲目拼。 - 多尝试几种编码:Hex 是最基础的,如果 Hex 解出乱码,立刻尝试 Base64、Base32 解码。
- 留意记录类型:本题用的是 A 记录,但 TXT 记录也是 DNS 隐写的高发区,因为 TXT 记录本身就是为了存储文本信息,能容纳更长更明显的字符串。