警告
本文最后更新于 2023-02-01,文中内容可能已过时。
今天是 2022.12.16,为了复习一下 misc
我来复现 hnctf 了
MISC
python 逃逸先放一放,比较麻烦
week1
简单编码
图片文件尾得到一串 url 编码
1
|
%54%55%52%46%65%45%31%45%52%58%68%4E%56%45%46%33%54%56%52%46%65%45%31%45%51%58%68%4E%56%45%46%34%54%56%52%46%64%30%31%45%52%58%68%4E%52%45%56%34%54%55%52%42%64%30%31%55%52%58%64%4E%56%45%56%34%54%55%52%46%64%30%31%45%51%58%68%4E%56%45%46%33%54%56%52%46%64%30%31%45%52%58%68%4E%56%45%56%33%54%56%52%46%64%30%31%55%52%58%64%4E%56%45%56%34%54%55%52%42%65%45%31%55%52%58%64%4E%52%45%56%34%54%55%52%46%65%45%31%55%51%58%64%4E%56%45%56%33%54%56%52%46%64%30%31%45%51%58%68%4E%56%45%46%34%54%56%52%46%64%30%31%55%51%58%64%4E%52%45%56%34%54%55%52%42%65%45%31%55%51%58%64%4E%56%45%46%34%54%56%52%46%65%45%31%55%51%58%68%4E%56%45%46%34%54%55%52%42%64%30%31%45%52%58%68%4E%56%45%46%34%54%55%52%46%64%30%31%55%52%58%64%4E%52%45%46%33%54%56%52%42%65%45%31%55%51%58%68%4E%56%45%56%33%54%55%52%46%65%45%31%55%52%58%64%4E%52%45%56%33%54%56%52%46%64%30%31%55%51%58%64%4E%56%45%46%34%54%56%52%42%65%45%31%55%52%58%64%4E%52%45%56%34%54%55%52%42%65%45%31%55%52%58%64%4E%56%45%56%33%54%56%52%46%65%45%31%45%51%58%68%4E%56%45%46%34%54%55%52%42%65%45%31%45%52%58%68%4E%56%45%56%34%54%55%52%46%50%51%3D%3D
|

1
|
nssctf{nssctf_huanyingni}
|
三生三世
一个加密压缩包,爆破密码

得到一串 data:image 开头的 base64,直接放到浏览器地址栏
得到一个二维码

CQR 扫码
1
|
nc{lmTnc}stWceostsfeo__sf
|
N 型栅栏密码三栏

1
|
nssctf{Welcome_To_nssctf}
|
my_png
一个 png,文件尾分离出 zip
密码提示为四位纯数字
爆破得到 6666
解压得到 flag
1
|
NSSCTF{welc0me_t0_StegAn0graphY!!!}
|
piz.galf
先逆序
得到 flag.zip
里面又有个 pmb.galf
再次倒序

silly_zip
zip 有伪加密,先还原
解压得到一个 bmp
修改高度,可以看到 flag

week2
Kiana
两张全是马赛克的图

用 stegslove 两张图合起来 xor

1
|
NSSCTF{come_and_play_bh3}
|
ez_flow
流量包

tcp 的第 5 流里看到 flag
1
|
NSSCTF{Hacker!!!!_Y0u_g3t_nny_f10w}
|
ex_word
一个 docx,题目描述说 docx 的本质是什么
以 zip 的格式解压

在 media 中找到一个不能正常显示的 png
发现是 zip,解压得到一串 emoji

解 base100

1
|
nssctf{t01s_1s_th0_tru3_f1ag}
|
扫不出来的二维码
一个二维码,扫描得到一个蓝奏链接
1
|
https://wwz.lanzouy.com/iYZ6v0d8tk3e
|
下载 二维码里只有黑和白.pdf
重命名为 zip,解压是一个 MAXICODE
zxing 解码 再解 base64
1
|
nssctf{I_h0te_the_QRc0de!!!!}
|
calligraphy
复现不出来
odttf2ttf 报错
Matryoshka
一个 pass.txt 和一个加密压缩包

txt 里有零宽,解出来不是压缩包密码,明文是密码

得到一串 emoji

有密码联想到 emoji-aes

1
|
NSSCTF{wh4t_1s_th1s_huh}
|
PDF && PNG
pdf,里面有条很细的颜色线,是 npiet
用 acrobat 提取出来,执行得到一串 key
1
|
d1d_u_f1nd_Th1s_KEy_F1l3
|
再用 wbstego4.3 解密 pdf
得到 flag
1
|
NSSCTF{u_can_use_wbstego_and_find_flag}
|
Baldi’s Basics
用 pwntools 写交互脚本,计算 1000 道题
1
2
3
4
5
6
7
8
9
10
|
from pwn import *
from tqdm import tqdm
# context.log_level=('debug')
p = remote('43.143.7.97',28712)
p.recvuntil('1000 problems.\n')
for i in tqdm(range(1000)):
result = str(eval(p.recvline()))
p.sendline(result)
p.recvuntil('Correct!\n')
p.interactive()
|

1
|
NSSCTF{Y0u_3sc4ped_fr0m_th3_schoo1}
|
4 byte command
简单的 python 逃逸

1
2
3
4
5
|
input_data = input("> ")
if len(input_data)>4:
print("Oh hacker!")
exit(0)
print('Answer: {}'.format(os.system(input_data)))
|
关键部分源码
week3
TaQWaR
给了一张有 7x7 个二维码的图,逐个扫描然后再合并数据
还是 png 的 raw 数据,套娃继续扫就行
问题卡在,python 用 zxing 和 pyzbar 都不能出原始数据,手改过 zxing 也会有部分数据损坏

有很多数据变成了 3F
所以最后还是用了 zbarimg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#/bin/sh
convert file.png -crop 123x123 ./QR/QR-%02d.png
for i in `seq -w 0 48`;
do
zbarimg --raw -Sbinary ./QR/QR-$i.png > ./QR/$i.data
done
echo "done"
cat ./QR/*.data > 0.png
zbarimg --raw -Sbinary 0.png > 1.png
zbarimg --raw -Sbinary 1.png > 2.png
zbarimg --raw -Sbinary 2.png > 3.png
zbarimg --raw -Sbinary 3.png > 4.png
zbarimg --raw -Sbinary 4.png > flag.txt
cat flag.txt
|
1
|
NSSCTF{T@nj1Ji_think_U_hv_qu1ck_re3p0nse}
|
天书
crc 爆破
用 cn2an 把中文的数字转成阿拉伯数字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import zipfile,zlib,itertools,tqdm,cn2an
def crc_gen2():
crc_list=[]
crc_value_list = []
for i in itertools.product(range(256), repeat=2):
crc_list.append(int(zlib.crc32(bytes(i))))
crc_value_list.append(bytes(i))
return crc_list,crc_value_list
def crc_gen3():
crc_list=[]
crc_value_list = []
for i in itertools.product(range(256), repeat=3):
crc_list.append(int(zlib.crc32(bytes(i))))
crc_value_list.append(bytes(i))
return crc_list,crc_value_list
crc2_list ,crc2_value_list = crc_gen2()
crc3_list ,crc3_value_list = crc_gen3()
def solve():
z = zipfile.ZipFile('flag.zip')
crcs = [None for i in range(len(z.filelist)-1)]
for i in z.filelist[1:]:
filename = i.filename.encode('CP437').decode('gbk')
index=cn2an.cn2an(filename.rstrip('章册节卷本页话集回部.tx').lstrip('flag/第'))
crcs[int(index)-1] = i.CRC
print(crcs)
crcs[0] = b'Rar!'#注意第一个文件是4字节的
crcs =[crc2_value_list[crc2_list.index(j)] if j in crc2_list else j for j in crcs]
crcs =[crc3_value_list[crc3_list.index(j)] if type(j) !=bytes and j in crc3_list else j for j in tqdm.tqdm(crcs)]
open('result1.rar','wb').write(b''.join(crcs))
return
solve()
|
改进了一下算法,压缩时间到了四分之一,不过内存占用好像高了
看不见的代码
由空格和 tab 组成的隐写
whiteSpace 和 snow 的区别,我觉得主要是长短
whitespace 相对更短
找个在线运行
神秘的压缩包

爆破 6 位 crc 为密码
1
|
passwordisClassicalencryptionishint6
|
密码
1
|
Classicalencryptionishint6
|
解压得到
1
|
]cX^r:X\jXiV`jVm\ipV`ek\ijk`e^t
|
rot47 爆破得到 flag
1
|
flag{Caesar_is_very_intersting}
|
symbol
Wakanda symbol

1
|
flag{SYmbol_Substitui0r_Wakanda}
|
week4
ez_lsp
png,lsb 隐写

rgb0 层
分离出二维码

扫码然后解码
1
|
NSSCTF{Vi3_BashRc_lS_Fl4g!!!}
|
Bronya
加密压缩包,注释 2016????
掩码爆破得到密码
得到两张一样的图,双图盲水印
尝试发现,为 python3 的 bwm 双图盲水印

1
|
nssctf{Th3_P10t_S0_sweet}
|