AntCTF x D³CTF2023 MISC复现

Posted CPYQY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AntCTF x D³CTF2023 MISC复现相关的知识,希望对你有一定的参考价值。

MISC

一、d3readfile

1.题目大概的要求就是让我们想办法获取到flag的filepath,从而读取flag文件,想到了locate命令,查一下locate命令是基于哪个数据库进行查询的,搜到数据库文件位于/var/cache/locate/locatedb

https://blog.csdn.net/weixin_45935219/article/details/120697149

2.直接先查询这个文件,找到关键字flag

3.输入flag的文件位置opt/vwMDP4unF4cvqHrztduv4hpCw9H9Sdfh/UuRez4TstSQEXZpK74VoKWQc2KBubVZi/LcXAfeaD2KLrV8zBpuPdgsbVpGqLcykz/flag_1s_h3re_233 ,得到flag

antd3ctf18ea1bb6a95eabbfcc67615025e088ffce4f73ee

二、d3gif

1.得到文件后感觉名字应该是提示作用,看一下gif图,发现最大的区别就是背景颜色不断变,并且有1089帧,1089是33的平方,直接猜测是根据背景颜色可以组成一个新的矩形图

2.使用在线工具将其先逐帧分离

https://uutool.cn/gif2img/

3.首先使用脚本读取一下每帧的背景颜色(取色定位点直接选在(0,0)),写个脚本

点击查看代码
from PIL import Image


f = open("./1.txt","w")
for i in range(1,1090):
    img = Image.open(str(i) + \'.png\')
    rgb = img.getpixel((0, 0))
    f.write(str(rgb))

f.close()


4.我们可以发现,第四位均为255,第三位有0和1之分,那么0,1就是绘制新图的依据,假设0时绘制第三通道为255,1时绘制第三通道为0,写脚本(跟0,1转黑白一个道理)

点击查看代码
from PIL import Image

img1 = Image.new(mode=\'RGB\', size=(33, 33))
for i in range(1, 1090):
    img = Image.open(str(i) + \'.png\')
    rgb = img.getpixel((0, 0))
    if rgb[2] == 0:
        img1.putpixel((rgb[0], rgb[1]), 255)
    elif rgb[2] == 1:
        img1.putpixel((rgb[0], rgb[1]), 0)

img1.save("./AAA.png")

5.得到一个小二维码,扫码得到flag

antd3ctfG1F_0R_C0L0R_0R_QRC0D3_0R_WHAT???

AntCTF x D^3CTF MISC部分Writeup

文章目录


BadW3ter


附件是wav,但是文件头有点问题,对比一下正常的wav即可发现前十六个字节被修改了

第一行的内容猜测也是个有用的线索: CUY1nw31lai
修改前十六个进制正常的wav文件头

然后测试几个常见的wav文件隐写:SilentEye、Deepsound等
稍微测试一下发现是DeepSound

输入前面的到线索作为密码。得到flag.png

file识别文件发现flag.png是TIFF文件

PS可以选择打开TIFF文件

首先有两个图层,有一个白底图层,然后这个二维码是三部分颜色组成:黑、白、灰

把白底图层涂成灰色(和二维码图层中的灰色一样的:[33,33,33]),用油桶或者填充都可以

然后 图像->调整->亮度/对比度 直接将亮度,对比度拉到最低,扫描二维码即可得到flag

D3CTFM1r@9e_T@nK_1s_Om0sh1roiii1111!!!!!Isn't_1t?

WannaWacca


流量包tcp contains "flag" tcp追踪长度最长的包

可以得到解flag.zip.WannaWacca的密钥
d3-win7-5f799647.vmem查看进程,比较可疑的是cmd.exe以及notepad.exe

cmdline查看发现几个可疑点,SmartFalcon.exereadme.txt

memdumpnotepadSmartFalcon的内存文件导出出来
readme.txt内容如下

What Happened to My Flag?
Your important flag is encrypted.

Can I recover My Flag?
Sincerely.We guarantee that you can recover your flag safely and easily. But you have not so enough time. If you don't pay in 48 hours, you won't be able to recover your flag.

How Do I Pay?
Payment is accepted in D3coin only. Send $126 worth of D3coin to the author. All ransom  will be used to play Wacca.

YOU WILL NEVER KNOW MY IP ADDRESS!

binwalk分析SmartFalcon.exe

foremost可以分离出来zip压缩包
从分离得到压缩包中,寻找zip文件头,提取第二个zip文件头到文件末尾的数据,另存为zip

得到完整的压缩包,只有一个png图片文件,但是有密码

有固定的文件头的压缩包,可以使用bkcrack进行明文爆破

echo -n "89504E470D0A1A0A0000000D49484452" | xxd -r -ps > key

bkcrack -C flag.zip -c "I can't see any light.png" -p key -o 0

bkcrack -C flag.zip -c "I can't see any light.png" -k bd363f25 3a7da3aa 4bbe3175 -d flag.png

得到flag.zip中的图片,根据图片特征,有很多白线,以及图片内容是一个苹果,猜测可能是苹果系统特供图

使用fotoforensics查看这张图在Apple端的显示内容: https://fotoforensics.com/


可以看到在Apple并行端显示的内容不一样,下载这张图可能不好下,F12之后再network中找到这张图的链接,下载这张图。或者审查源码下载也可

使用PS打开flag.png原图,分析图片上方的类似条码的东西。长:1920 宽:12

将这部分选中,提取出来的另存成另一张图片,尝试二进制、二维码都无果,之后发现可以分成若干个2*3的小块,类似盲文
测试前几个盲文,可发现数据内容是由十六进制组成,且是zip压缩包的字节流文件头
找一张比较标准的,含有数字和字母的盲文对照图

然后使用Python简单处理即可得到flag.zip

from PIL import Image
from binascii import *

img = Image.open('Braille.png')
width, height = img.size
num_map = ["[0, 1, 1, 1, 0, 0]":"0", "[1, 0, 0, 0, 0, 0]":"1",
		   "[1, 0, 1, 0, 0, 0]":"2", "[1, 1, 0, 0, 0, 0]":"3",
		   "[1, 1, 0, 1, 0, 0]":"4", "[1, 0, 0, 1, 0, 0]":"5", 
		   "[1, 1, 1, 0, 0, 0]":"6", "[1, 1, 1, 1, 0, 0]":"7", 
		   "[1, 0, 1, 1, 0, 0]":"8", "[0, 1, 1, 0, 0, 0]":"9"] 
alp_map = ["[1, 0, 0, 0, 0, 0]":"a", "[1, 0, 1, 0, 0, 0]":"b", 
		   "[1, 1, 0, 0, 0, 0]":"c", "[1, 1, 0, 1, 0, 0]":"d", 
		   "[1, 0, 0, 1, 0, 0]":"e", "[1, 1, 1, 0, 0, 0]":"f"]
num_prefixes = [0, 1, 0, 1, 1, 1]

all_data = []
for h in range(height):
	row_data = []
	for w in range(width):
		pix = img.getpixel((w, h))
		if pix == (255, 255, 255):
			row_data.append(1)
		elif pix == (0, 0, 0):
			row_data.append(0)
		else:
			print(pix)
			break
	all_data.append(row_data)

def get_pix(row_idx, col_idx):
	sin_bra_data = []
	for r in range(row_idx, row_idx + 3):
		for c in range(col_idx, col_idx + 2):
			data = all_data[r][c]
			sin_bra_data.append(data)
	return sin_bra_data

all_bra = []
for r in range(0, height, 3):
	for c in range(0, width, 2):
		bra_code = get_pix(r, c)
		all_bra.append(bra_code)

res_data = ''
idx = 0
for i in range(len(all_bra)):
	if all_bra[i] == num_prefixes:
		for dic_num in num_map:
			try:
				res_data += dic_num[str(all_bra[idx+1])]
			except:
				pass
		idx += 1
	else:
		for dic_alp in alp_map:
			try:
				res_data += dic_alp[str(all_bra[idx+1])]
			except:
				pass
		idx += 1

with open('flag.zip', 'wb') as f:
	f.write(unhexlify(res_data))



一首歌的歌词:《The Ray of Light》
含有很多不可显示字符:<0x7f>,但是并非零宽度字符隐写,再尝试了字频、wbstego文本隐写等多种文本隐写方式无果之后,想到了之前做盲水印的时候还有一种文本盲水印

Text_Blind_WaterMark: https://github.com/guofei9987/text_blind_watermark

但是缺少密码,密码很有可能在Apple并行端查看的另一张图片上,使用PS继续分析,在右下角可以发现还有一段类似原图的条码,继续尝试发现解出来的字符不对

多次尝试之后把图片发现顺时针旋转180度之后,可以解出来

注意有大小写字母区分
得到如下

UkB5MGYxITlodA equal equal

base64解码得到密码:R@y0f1!9ht

from text_blind_watermark import embed, extract

sentence_embed = open('Future will lead.txt').read()
password = 'R@y0f1!9ht'
wm_extract = extract(sentence_embed, password)
print("解出的盲水印")
print(wm_extract)


d3ctfb576241258a44b868ea25804b0ec1d4e

以上是关于AntCTF x D³CTF2023 MISC复现的主要内容,如果未能解决你的问题,请参考以下文章

AntCTF x D^3CTF MISC部分Writeup

杭电2023

杭电2023

2023年2月国内外CTF比赛时间汇总来了!

UOJ179 - 线性规划

HD OJ2023