第一届BMZCTF公开赛-MISC-Writeup


前言

首先恭喜白帽子社区团队成功举办第一届BMZCTF公开赛,我是本次比赛MISC赛题SnakeTiga的出题人末初
以下是我写的这次BMZCTF公开赛的MISC赛题的Writeup,如果有什么写的不对的还请师傅们留言斧正
另外师傅们对于SnakeTiga赛题有疑问的可以留言,我会及时回复

签到题

在这里插入图片描述

在这里插入图片描述

BMZCTF{W3lc0me_T0_2020BMZCTF}

你猜猜flag

在这里插入图片描述

flag.exebinwalk分析发现有附加zip数据,foremost分离出来
在这里插入图片描述
flag.exe只有输入4的时候输出的zip密码与其他的号码不同
在这里插入图片描述
分离出来的zip压缩包密码为:ZmxhZ+WlveWDj+WPr+S7peeMnOWHuuadpQ==

在这里插入图片描述
解压,再mdb文件中找到flag

在这里插入图片描述

flag{D1d y0u 8u3ss?}

Snake

在这里插入图片描述

难度:中下
考察知识点:Short Ook!、程序逆向还原、Steghide、Serpent加密、二进制数据转二维码

在这里插入图片描述
注释里面是Short ook!编码
在这里插入图片描述
得到snake.zip的密码:doyoulikesnake?

解压得到三个文件
在这里插入图片描述
process是个py程序,添加后缀,然后打开

data_jpg = open('data.jpg','wb')
def file_encode():
    with open('snake.jpg','rb') as handle:
        i = 1
        while True:
            bytedata = handle.read(1)
            if(bytedata == b''):
                exit()
            process_data = data_encode(bytedata)
            data_write(process_data)
            i = i + 1

def data_encode(bytedata):
    data = int.from_bytes(bytedata,byteorder='big')
    if (data % 2 == 0):
        data = (data + 1) ^ 128
    else:
        data = (data - 1) ^ 128
    data = bytes([data])
    return data

def data_write(process_data):
    data_jpg.write(process_data)


if __name__ == '__main__':
    file_encode()
    data_jpg.close()

通过程序可以得知data.jpgprocess.py处理snake.jpg得到的,逆向编写处理代码

with open('snake.jpg','wb') as flag:
    with open('data.jpg','rb') as f:
        for i in f.read():
            if (i % 2 == 0):
                i = (i + 1) ^ 128
            else:
                i = (i - 1) ^ 128
            i = bytes([i])
            flag.write(i)

得到snake.jpg
在这里插入图片描述
使用stegsolve打开,发现提示
在这里插入图片描述
Serpent加密,尝试寻找key

Steghide发现有隐写key.txt,无密码
在这里插入图片描述

key: VivaLaVida

知道了是Serpent加密,也知道了key,那么data应该就是加密后的数据,直接解密

Serpent-Online-Encrypt:http://serpent.online-domain-tools.com/

在这里插入图片描述
下载解密后的数据,发现内容如下:
在这里插入图片描述
然后从以下几点看出这是个二维码的二进制数据:

  • 只有wb两种字符,二进制
  • w对应whiteb对应black
  • 总字符200 x 200 = 40000正方形,可能是张二维码
  • 做过二进制转二维码题目的同学从内容的首尾都是w字符,就应该看得出这是个二维码数据

使用Python将这些转换为二维码

import PIL
from PIL import Image

width=height=200
img = Image.new("RGB",(width,height))
i = 0
char = "这里填数据"
for w in range(width):
	for h in range(height):
		if (char[i]=='w'):
			img.putpixel([w,h],(255,255,255))
		else:
			img.putpixel([w,h],(0, 0, 0))
		i = i + 1
img.save('flag.png')

扫描即可得到flag
在这里插入图片描述

flag{67bd09fc-e252-4c21-858f-2a7d698d555f}

Tiga

在这里插入图片描述

难度:中下
考察知识点:零宽度字符隐写、CRC爆破、zip密码爆破、zip密码明文攻击、字节流数据还原、Base16/32/64/85混淆解码

vim查看tiga.txt发现存在零宽度字符
在这里插入图片描述
零宽度字符隐写在线站:https://yuanfux.github.io/zero-width-web/
在这里插入图片描述
得到misc.zip密码:GiveTiGaGuang!

迪迦.jpg文件尾附加了youcanalso.zip的密码信息在这里插入图片描述
file.zip的密码很明显需要通过爆破这些密码片段文件的CRC得到内容
在这里插入图片描述
爆破脚本如下:

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    crc_list = [0x14433530, 0xaf251007, 0xd554e7b6, 0xebb3156, 0xbb474d49, 0x2cb8a39b, 0x75fe76f0]
    comment = ''
    chars = string.printable
    for crc_value in crc_list:
        for char1 in chars:
            for char2 in chars:
                for char3 in chars:
                    res_char = char1 + char2 + char3
                    char_crc = binascii.crc32(res_char.encode())
                    calc_crc = char_crc & 0xffffffff
                    if calc_crc == crc_value:
                        print('[+] {}: {}'.format(hex(crc_value),res_char))
                        comment += res_char
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

在这里插入图片描述
得到file.zip密码:T&hg%WL0^rm@c!VK$xEt~

解压得到youcanalso.zip根据之前的得到的信息,使用ARCHPR掩码爆破十位数字
在这里插入图片描述
得到密码:2001701725

解压得到flag.zipyoucanalso.zip

在这里插入图片描述
这里很明显可以进行明文攻击
在这里插入图片描述
得到flag.zip密码: 1amT1G@得到flag.txt,打开发现通过观察头和尾的内容是zip文件的的字节流数据
在这里插入图片描述
将字节流写成zip文件,脚本如下:

import struct

a = open("flag.txt","r")#十六进制数据文件
lines = a.read()
res = [lines[i:i+2] for i in range(0,len(lines),2)]

with open("data.zip","wb") as f:
	for i in res:
		s = struct.pack('B',int(i,16))
		f.write(s)

得到data.zip发现是doc文件的内容
在这里插入图片描述
修改后缀为得到data.docx,打开发现是base85数据

注意:后两页是隐藏文字,需要开启隐藏文字查看选项才能发现在这里插入图片描述
将这个base85数据解了一下发现是:base16/32/64/85的随机套娃编码

这里可以通过写个识别脚本通过识别base16/32/64/85进行逐步解码,也可以手工,因为这里设置的编码次数不多,就15次

PS:本来是想设置的编码次数多一点的,不过我比较懒,不想写识别脚本2333

不过推荐使用basecrack这个工具直接解码最快:https://github.com/mufeedvh/basecrack

python .\basecrack.py --magic

然后输入编码数据,得到flag

在这里插入图片描述

flag{8fa3e8c4-0121-4f2a-a7f0-0a60032e3763}

Hack K

在这里插入图片描述

这题其实我也和出题的师傅商量过

flag最后的存放文件名flag.php太过平常(应该改复杂点),用平常做web的思路,目录扫描一扫就出

在这里插入图片描述
访问即可得到flag
在这里插入图片描述

首先观察了这个网站,唯一可以想到出题方向的就是这几张图片了,下载下来发现其中一张图片容量非常大

在这里插入图片描述
binwalk分析图片有附加别的数据
在这里插入图片描述
foremost直接分离,得到一个压缩包,有密码

在这里插入图片描述
根据压缩包注释提示使用ARCHPR爆破,得到密码flag
在这里插入图片描述
得到一个好像是二维码定位符的png图片

在这里插入图片描述
以及一大堆gif图片和文件,其中很容易发现safe (113).gif中有张好像没有定位符的二维码

在这里插入图片描述
二维码取出来
在这里插入图片描述
使用PS修补一下
在这里插入图片描述
访问flag.php得到flag
在这里插入图片描述

flag{Zme12a9rqsk123S14RH}
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末 初

谢谢老板!

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值