栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2021Bytectf初赛misc-frequently

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021Bytectf初赛misc-frequently

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安全攻防实验室 微信公众号

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号