D^3CTF 2022 WP | WHT战队招新
共 4467字,需浏览 9分钟
· 2022-03-09
本文来自“白帽子社区知识星球”
作者:末初
BadW3ter
附件是wav,但是文件头有点问题,对比一下正常的wav即可发现前十六个字节被修改了
CUY1nw31lai
PS可以选择打开TIFF文件
图像->调整->亮度/对比度
直接将亮度,对比度拉到最低,扫描二维码即可得到flagD3CTF{M1r@9e_T@nK_1s_Om0sh1roiii1111!!!!!Isn't_1t?}
WannaWacca
流量包 tcp contains "flag"
tcp追踪长度最长的包
d3-win7-5f799647.vmem
查看进程,比较可疑的是cmd.exe
以及notepad.exe
cmdline
查看发现几个可疑点,SmartFalcon.exe
、 readme.txt
memdump
把notepad和SmartFalcon的内存文件导出出来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
使用fotoforensics查看这张图在IOS端的显示内容: https://fotoforensics.com/
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)
d3ctf{b576241258a44b868ea25804b0ec1d4e}
WHT战队招新:
WHT战队欢迎对CTF有浓厚兴趣的师傅加入我们。
有半年以上CTF竞赛经验的。
包括但不限于Web、Misc、Reverse、Crypto、Pwn等各方向的CTFer加入。
加分项:有一年以上CTF竞赛经验的各方向CTFer。
有意向的师傅请扫描二维码联系我们
如果觉得本文不错的话,欢迎加入知识星球,星球内部设立了多个技术版块,目前涵盖“WEB安全”、“内网渗透”、“CTF技术区”、“漏洞分析”、“工具分享”五大类,还可以与嘉宾大佬们接触,在线答疑、互相探讨。
▼扫码关注白帽子社区公众号&加入知识星球▼