CTF 你了解base么?1 解题
题目:CTF 你了解base么?1 题目内容:在数据的深海里,我探寻Base的奥秘, 如星辰般闪烁,是信息的集结地。 代码编织的网,捕捉着数据的踪迹, Base,你是数据的港湾,是智慧的基石。 字符串的舞蹈,在Base中跃动, 二进制、十六进制,变幻着节奏。 你不仅仅是存储,更是转化的桥梁, 将繁杂的信息,化为简洁的符号。
附件及解题代码见文尾下载链接
解题思路及步骤
1.利用在线工具“CyberChef”进行base64解码
解压压缩包晨的文件用记事本打开,发现有不少行的未尾有“=”,猜测这应该是base64编码,打开在线转码工具网站:https://cyberchef.org/,选择“From Base64”,拖入Recipe区中,得到如下:
发现是用python编写的加密脚本。整理成python代码如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import base64 import sys #I'm so upset. #You can't encrypt without code #The answer can be decrypted #I'm sure the code won't beat you #There's a lot of crap in it #I can't send it. It's too hard and it's not #Look for it #我很难过。 #没有代码就无法加密 #答案可以被解密 #我相信代码不会打败你 #里面有很多垃圾 #我发不出去。这太难了,但事实并非如此 #寻找它 def str_to_hex(s): str = r"/x" xxx = [hex(ord(c)).replace('0x', '') for c in s] str += r'/x'.join(xxx) return str #I am an encryption #我是一个加密 def base(s): return base64.b64encode(s) #I am an encryption # #Can you find the flag? #我是一个加密 #你能找到那面旗帜吗? if __name__ == "__main__": flag = "" flag = str_to_hex(flag) flag = flag.encode("utf-8") flag = base(flag) # flag=b'L3g2Ni94NmMveDYxL3g2Ny94N2IveDM4L3gzMi94MzEveDMxL3gzMS94MzEveDYzL3gzNS94MzQveDYxL3g2Ni94MzYveDM1L3g2MS94NjQveDY0L3gzNS94MzEveDM1L3g2My94MzgveDM3L3gzMi94NjEveDY0' #A few words in water Otherwise, it can't be encrypted #One more sentence is needed #by Mogic #Is there a bracket #几个字在水里,否则无法加密。还有一句是魔术需要的,有括号吗
2.将解码得到的flag后引号里的编码进行“base64解码+HEX解码”
提取flag后面引号里的内容,再次用From Base64转码,得到如下:
/x66/x6c/x61/x67/x7b/x38/x32/x31/x31/x31/x31/x63/x35/x34/x61/x66/x36/x35/x61/x64/x64/x35/x31/x35/x63/x38/x37/x32/x61/x64
分析应该是16进制码,使用“From Hex”得到如下代码:
flag{821111c54af65add515c872ad
看到了flag,只是缺一个右花括号,添上后,提交flag,提示错误
。
于是,开始研究前面得到的python代码,试图通过这个编码脚本修改解码脚本,但始终没有找到右花括号。一直卡在这里很长时间没头绪。
3.验证并确认附件里的base64文本有隐写
没办法,只有到脚本中的英文注释寻找蛛丝马迹,由于英文不好,还利用工具翻译成了中文。发现里面有两句有暗示:
没有代码就无法加密
几个字在水里,否则无法加密。还有一句是魔术需要的,有括号吗
刚刚练习过base64的隐写题目,掌握的解题办法只有通过脚本最好使。
关于base64隐写的文章见:
base64隐写原理[https://www.cnblogs.com/ZhouJiaHao/p/14512711.html]
验证base64编码里有没有隐写最好的办法,就是解码后,再用得到的明文再编码,核对前后两个编码中“=”等号前的字符是否一样,如不一样,说明有隐写。只有=的编码才有隐写空间,于是找了一行有=的编码:
ICAgIGZsYWcgPSBmbGFnLmVuY29kZSgidXRmLTgiKd==
解码后得到:
flag = flag.encode("utf-8")
再将解码得到的文本编码,得到:
ICAgIGZsYWcgPSBmbGFnLmVuY29kZSgidXRmLTgiKQ==
两行一对比,发现=前的字符不一样,一行是“d”,另一行是“Q”,其它的都一样,说明有隐写。
4.用python脚本解密隐写内容
既然有隐写,那就有戏了。
急忙找来前一篇博文(网址:https://www.cnblogs.com/bcd589/p/18241224) 写的python脚本,把附件att中文本复制装进“flag_encode.txt”文件,运行脚本,得到如下结果:
73fe83}
终于找到了flag的后面部分
5.拼接前后两部分,形成完整flag
flag的后面部分,与前半部分拼接在一起,该题的flag就出来了。
flag{821111c54af65add515c872ad73fe83}
6.源码下载
附件:链接:https://pan.baidu.com/s/1bV05iusdwTFgPJfG1mqxpg?pwd=srts
提取码:srts
也可以用手机扫码下载:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)