ctfshow-misc50


 

 文件下载地址   https://www.lanzoui.com/i98c7zg

打开后是一张图片,在kali中使用foremost命令分离出一张图片和一个压缩包

用010打开图片,在图片的末尾发现一串字符

Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==

先base64解密,在base32解密得到

KEY{Lazy_Man}

打开压缩包发现提示

GEZDGNBVGYFA====

base32解密后得到密码 

123456

打开txt里面的内容,是一堆数字。且3078重复出现。转为16进制就得到3078是0x

那么使用脚本,进行批量转换。得到一堆0x 0x的文本。

又发现字符串0x37 0x7a,发现37 7a 是7z压缩包的文件头。

那么思路来了:批量删除0x,转换为7z文件。

先上批量删除0x的代码

 

import re def read_file(filepath): with open(filepath) as fp: content=fp.read(); return content number = read_file('thienc.txt') result = [] result.append(re.findall(r'.{2}', number)) result = result[0] strings =''
for i in result: y = bytearray.fromhex(i) z = str(y) z= re.findall("b'(.*?)'",z)[0] strings += z b= strings.split('0x') strings=''
for i in b: if len(i) ==1: i= '0' + i strings +=i with open('te.txt', 'w') as f: f.write(strings)

 

将得到的te.txt文本中的内容以16进制复制到010中打开并保存为1.7z

打开发现需要密码,那么之前得到的密码就有了用处

KEY{Lazy_Man}

 输入密码得到一大串内容,结尾发现==,一次base64解密后还有=

 

 

 

猜想有多次的base解密

直接上代码

import base64 import re def read_file(filepath): with open(filepath) as fp: content=fp.read(); return content url = read_file('secenc.txt') #url1= re.findall("b'(.*?)'",url) #url=url1[0]
url = base64.b64decode(url) print(url) with open('test1.txt', 'w') as f: f.write(str(url))

 

第一次解密需要将

#url1= re.findall("b'(.*?)'",url) #url=url1[0]

注释掉,因为一开始的密文是没有 ‘,而运行脚本后有了

第二次运行脚本代码如下

import base64 import re def read_file(filepath): with open(filepath) as fp: content=fp.read(); return content url = read_file('test1.txt') url1= re.findall("b'(.*?)'",url) url=url1[0] url = base64.b32decode(url) print(url) with open('test2.txt', 'w') as f: f.write(str(url))

以此反复进行base32,base64解密。

最终经过16次的混合解密得到 test16.txt

 

 使用记事本的替换功能,把 \n替换成空格

在线brain fuck/Ook!解密

先 Ook! to Text

 

然后再 Brainfuck to Text,得出flag

 

 flag

flag{Welc0me_tO_cTf_3how!}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM