你了解base么?1 解题

CTF 你了解base么?1 解题

题目:CTF 你了解base么?1  
题目内容:在数据的深海里,我探寻Base的奥秘,
如星辰般闪烁,是信息的集结地。
代码编织的网,捕捉着数据的踪迹,
Base,你是数据的港湾,是智慧的基石。

字符串的舞蹈,在Base中跃动,
二进制、十六进制,变幻着节奏。
你不仅仅是存储,更是转化的桥梁,
将繁杂的信息,化为简洁的符号。

img

附件及解题代码见文尾下载链接

解题思路及步骤

1.利用在线工具“CyberChef”进行base64解码

解压压缩包晨的文件用记事本打开,发现有不少行的未尾有“=”,猜测这应该是base64编码,打开在线转码工具网站:https://cyberchef.org/,选择“From Base64”,拖入Recipe区中,得到如下:

img

发现是用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转码,得到如下:
img

/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

img

看到了flag,只是缺一个右花括号,添上后,提交flag,提示错误

于是,开始研究前面得到的python代码,试图通过这个编码脚本修改解码脚本,但始终没有找到右花括号。一直卡在这里很长时间没头绪。

3.验证并确认附件里的base64文本有隐写

没办法,只有到脚本中的英文注释寻找蛛丝马迹,由于英文不好,还利用工具翻译成了中文。发现里面有两句有暗示:

没有代码就无法加密
几个字在水里,否则无法加密。还有一句是魔术需要的,有括号吗

刚刚练习过base64的隐写题目,掌握的解题办法只有通过脚本最好使。
关于base64隐写的文章见:
base64隐写原理[https://www.cnblogs.com/ZhouJiaHao/p/14512711.html]

验证base64编码里有没有隐写最好的办法,就是解码后,再用得到的明文再编码,核对前后两个编码中“=”等号前的字符是否一样,如不一样,说明有隐写。只有=的编码才有隐写空间,于是找了一行有=的编码:

ICAgIGZsYWcgPSBmbGFnLmVuY29kZSgidXRmLTgiKd==

解码后得到:

    flag = flag.encode("utf-8")

img

再将解码得到的文本编码,得到:

ICAgIGZsYWcgPSBmbGFnLmVuY29kZSgidXRmLTgiKQ==

两行一对比,发现=前的字符不一样,一行是“d”,另一行是“Q”,其它的都一样,说明有隐写。
img

4.用python脚本解密隐写内容

既然有隐写,那就有戏了。
急忙找来前一篇博文(网址:https://www.cnblogs.com/bcd589/p/18241224) 写的python脚本,把附件att中文本复制装进“flag_encode.txt”文件,运行脚本,得到如下结果:

73fe83}

img

终于找到了flag的后面部分

5.拼接前后两部分,形成完整flag

flag的后面部分,与前半部分拼接在一起,该题的flag就出来了。
flag{821111c54af65add515c872ad73fe83}

6.源码下载

附件:链接:https://pan.baidu.com/s/1bV05iusdwTFgPJfG1mqxpg?pwd=srts
提取码:srts

也可以用手机扫码下载:
img

posted @ 2024-06-20 00:27  峰圣榜  阅读(26)  评论(0编辑  收藏  举报