【CTFshow】Misc 50

文章讲述了作者在CTF比赛中解决Misc类型题目的一次经历,涉及图像分析、字符串解码、压缩包处理和多层加密解密,包括base64、base32、7z格式以及brainfuck和Ook编码。通过一系列技术手段,最终成功解出flag。
摘要由CSDN通过智能技术生成

ctfshow的misc入门题总算是做完啦,现在开始写misc题,感觉难度不止上升一个level,今天浅浅记录一道学到了很多知识点的题目。

参考博客:刷题之旅第10站,CTFshow misc50_圆圈勾勒成指纹的博客-CSDN博客_ctfshow misc50

CTFshow-Misc(部分wp)_i_kei的博客-CSDN博客_ctfshow misc

题目上来是一张图片,放到010 editor里面发现是有两个压缩包的字眼

于是binwalk一下



 

拿到一个压缩包

后面隐写了一个信息是我没有想到的,看了师傅们的wp才知道

 字符串

Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==

先base64再base32解码之后得到:

KEY{Lazy_Man}

暂时还不知道有什么用,先留着吧

分离出来的压缩包打开之后发现需要密码,下面有hint:

这里get到一个小tips,一般最多是两个==,如果四个可以试试base32

解码得到:123456

作为压缩包密码;

打开之后得到:一个文档

渍渍渍,密密麻麻,但是仔细观察可以发现“3078”一直在重复出现,转为十六进制——>3078就是“0x”

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

分析前几个字符串0x37 0x7a,发现37 7a 是7z压缩包的文件头。

这里补充一下7z文件的相关知识:

7z 是一种主流高效的压缩格式,它拥有极高的压缩比。(简而言之,就是一种压缩度很高的压缩文件)

通常使用 7-Zip 的 7z 格式能比使用 zip 格式的压缩文件小 30-70%。并且使用 7-Zip 创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%。

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

借用师傅们的脚本:

import re

def read_file(filepath):
    with open(filepath) as fp:
        content=fp.read();
    return content

number = read_file('1.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('test.txt', 'w') as f:
    f.write(strings)

得到文件



 

 接下来要做的一步就是将得到的txt文件内容以十六进制复制到010中打开并保存为111.7z

这一步虽然说着简单,但是对于我这种小白在操作上还是踩了很大的坑

所以这里详细地演示一次:


 

首先:

 接下来就是粘贴了


 

也就是在这里开了眼

我一直是用的ctrl+v

所以得到的结果真的很奇怪呀,右边那一栏,导出之后都没法打开文件

后来问了v神才知道:要用ctrl+shift+v

 

两者的区别在于粘贴位置不同。ctrl+v为错位复制,粘贴对象位于编辑窗口的中心;shift+ctrl+V为原始复制,粘贴对象与复制对象位于同一位置。

 

 平常用倒是区别不大,只不过十六进制比较特殊

所以要ctrl+shift+v

这样子看起来也就顺眼多了

导出保存为111.7z

File——>save as——>自定义文件后缀

打开之后发现需要密码,之前的那个字符串刚好就是密钥

解开压缩包之后得到txt文档:



 

 不是吧!!!又又又是一大堆字符串

不过最后发现"=="

一次解密中后还有“=”

考虑是多次base64+base32循环加密

这里用大佬的代码:

# @Author:Cheyenne
import base64
import re

f = open('secenc.txt').read().encode('utf-8')

while True:
    if re.match('^[2-7A-Z=]+$', f.decode('utf-8')):
        f = base64.b32decode(f)
    elif re.match('^[0-9a-zA-Z+/=]+$', f.decode('utf-8')):
        f = base64.b64decode(f)
    else:
        print(f.decode('utf-8'))
        break

with open('result.txt', 'w', encoding='utf-8') as file:
    file.write(str(f,encoding='utf-8'))
print("Decryption complete!")

解码之后得到:



 

这我会!

brain fuck/Ook加密

Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]

先Ook to text

再brainfuck to text

得到flag:



 


 

本题到此结束!!!

收获颇多

抱大佬大腿的感觉真好

下次还抱

嘿嘿~


 



 



 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值