Someone wants to send secret information through a surreptitious channel. Could you intercept their communications?
dns隧道
过滤一下dns协议
发现有很多向8.8.8.8请求,然后域名前带有信息,于是过滤一下8.8.8.8
发现这里面有两种,一种是i和o开头的,推测是0和1,另外一种是字符串,
看到最后一个包这里的==,推测是64编码,就可以过滤一下之前所有带字符串的,然后拼接起来,解码。
base64解码
先过滤出来所有带有字符串的
过滤规则: dns contains bytedanec&& dns.qry.name.len > 15 && ip.dst == 8.8.8.8
然后导出,导出的话,需要借助tshark工具。
我们需要导出上述规则的
找一下这个字段,先导出全部,然后找一下这个Name
https://www.wireshark.org/docs/dfref/d/dns.html
字段名是从官网找到的,后来发现其实完全不用。。官网找太麻烦了
完全可以右键,然后点击选择过滤器应用,右边会显示出它的字段名称
过滤规则:
./tshark.exe -r frequently.pcap -Y “dns contains bytedanec&& dns.qry.name.len > 15 && ip.dst == 8.8.8.8” -T fields -e dns.id -e dns.qry.name
然后用python ,正则过滤出前面这一段字符,然后连接起来即可(ps:dns的transaction id,也就是过滤规则中的dns.id应该是唯一的,这里面存在重复的,导致刚开始连接起来的字符转换图片有问题,需要去重)
base64转图片工具网址:
https://tool.jisuapi.com/base642pic.html
(也可以用python的base库来解码)
代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Autor:tangzicheng
import re
import base64
file = open('chongfu.txt','r').read().split('\n')
# print(file)
# 先去重
clean = []
for i in file:
if i not in clean:
clean.append(i)
# print(clean)
# 然后把数据部分拼接起来
res = ''
for i in clean:
data = re.findall(r'([^\s]*)\.bytedanec\.top',i)
res += data[0]
print(res)
# 输出图片
f = open('out1.png','wb')
data = base64.b64decode(res.encode())
f.write(data)
未去重的效果:
去重:
对这个图片进行了一定分析后发现没什么用
查询io
udp.length == 41 && dns contains byte
将内容导出
/tshark.exe -r frequently.pcap -Y “udp.length == 41 && dns contains byte” -T fields -e dns.id -e dns.qry.name
脚本编写
用来提取 i o ,转换成01,然后转换成ASCII
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Autor:tangzicheng
import re
from Crypto.Util import number
file = open('chongfu.txt','r').read().split('\n')
# print(file)
final = []
for i in file:
if i not in final:
final.append(i)
# print(final)
finalbin = ""
for i in final:
data = re.findall(r'.\.bytedanec\.top',i)
if len(data) != 0:
# print(data[0][0])
if data[0][0] == 'o':
finalbin += str(0)
else:
finalbin += str(1)
# print(finalbin)
print(number.long_to_bytes(int(finalbin,2)))
ByteCTF{_enJ0y&y0ur
另辟蹊径
追踪udp流。
在序号为1的udp流中发现了隐藏的另一半flag
这个东西可能就是要看细心了,还有就是不放过任何一个细节。。。。。
se1f_wIth_m1sc_}
拼接起来得到最终flag
ByteCTF{_enJ0y&y0urse1f_wIth_m1sc_}
参考:W&M 白帽100安全攻防实验室 微信公众号