1.SAJOの奇妙冒险(一) 幻影之血
解压附件,由于第一题比较简单,打开辣鸡题目检测器
得到flag{hello,ctfer}
2.SAJOの奇妙冒险(二) 战斗潮流
解压附件,得到一张图片,国际惯例,binwalk
跑一下
发现文件有点多,foremost
拆开
多出来一个00001016.png
和一个00001805.zip
,其中压缩包需要密码。
故猜测密码存在于多出来的那张图片中,隐写检查一下
发现base64编码,猜测是zip的解压密码
Url解码得到flag{ctfer,congratulations}
3.SAJOの奇妙冒险(四) 疯狂钻石
解压附件,得到一个加密的压缩包与一张图片
然后打开压缩包发现有份同样的文件,压缩hint.png
,发现二者CRC32
值相同,考虑明文攻击
由于我Windows
下的ARCHPR
的明文攻击好像出了点问题,转战Linux
root@kali:~/wp# ls
flag.zip hint.png
root@kali:~/wp# zip -r hint.zip hint.png
adding: hint.png (deflated 22%)
root@kali:~/wp# pkcrack -C flag.zip -c hint.png -P hint.zip -p hint.png -d out.zip
Files read. Starting stage 1 on Sat Oct 26 21:51:08 2019
Generating 1st generation of possible key2_16071 values...done.
Found 4194304 possible key2-values.
Now we're trying to reduce these...
Done. Left with 1301 possible Values. bestOffset is 24.
Stage 1 completed. Starting stage 2 on Sat Oct 26 21:51:19 2019
Ta-daaaaa! key0=83158dc0, key1=d6ada718, key2=9f5aa4a9
Probabilistic test succeeded for 16052 bytes.
Strange... had a false hit.
Strange... had a false hit.
Strange... had a false hit.
Strange... had a false hit.
Strange... had a false hit.
Stage 2 completed. Starting zipdecrypt on Sat Oct 26 21:51:48 2019
Decrypting hint.png (1d3025a423dfae36093def1c)... OK!
Decrypting flag.txt (15d9c7a80b9ad4e8a074771f)... OK!
Finished on Sat Oct 26 21:51:48 2019
root@kali:~/wp# unzip out.zip
Archive: out.zip
replace hint.png? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
inflating: hint.png
extracting: flag.txt
root@kali:~/wp# cat ./flag.txt
flag{a_pure_zip}
root@kali:~/wp#
成功拿到flag{a_pure_zip}
4.SAJOの奇妙冒险(五) 黄金之风1
下载flag.zip
,解压几次发现似乎是无限循环???
打开辣鸡题目检测器
得到flag{easy_script}
5.SAJOの奇妙冒险(六) 黄金之风2
下载附件,发现和上一题有些一样,唯一区别是每层压缩包多了密码
解压一层,并将flag
里的flag.zip
复制为当前文件夹的tflag.zip
,编写脚本
import os
import zipfile
fn = 'tflag.zip'
i=0
dbg=0
while True:
dbg+=1
z=zipfile.ZipFile(fn)
if 'flag/flag.zip' in z.namelist():
i+=1
p=open('flag/hint.txt','r').read().split(' ')[4].split('=')[0]
print 'Round',str(i),': ',p,'->',eval(p)
z.extractall(pwd=str(eval(p)).encode())
os.system('mv flag/flag.zip tflag.zip')
else:
print 'It seems down'
break
经过漫长的等待...
➜ flag ls
flag.txt hint.txt useless.png
➜ flag cat flag.txt
flag{enjoy_the_coding_time}
➜ flag
6.中国移动流量包5元30MB
解压附件,得到wireshark2.pcapng
,改后缀为zip
解压,得到wireshark2_flag.txt
打开,得到SouthCTF{Congratulations!!!Wireshark_is_interesting}
7.豆破苍穹 (一)
题目提示与时间戳有关,于是进行掩码攻击
过了两秒
解压,得flag{d9832a587d8a4de1e69c94e1d907d421}
8.豆破苍穹 (二)
打开附件
# encoding: utf-8
from secret import flag, key
def encrypt(flag, key):
r = ""
for i in flag:
r += chr((ord(i) + key) % 128)
return r
print encrypt(flag, key).encode("base64")
# output:d31yeAxIQUZJSENDRHNEQUFHSUpCREp1c0F1SXVGdkdBR0J3Qw4=
分析代码,反写解密代码
import base64
douout = 'd31yeAxIQUZJSENDRHNEQUFHSUpCREp1c0F1SXVGdkdBR0J3Qw4='
inp = base64.b64decode(douout).decode()
for key in range(33):
out = []
for i in inp:
if ord(i) <= 32:
i = chr(ord(i) + 128)
out.append(chr(ord(i) - key))
print(''.join(out))
运行
得到flag{70587223b300689139db0d8d5e6061f2}
9.可恶的狗海豹
由于运维度假,此网站无法访问,开放之时补上
得到flag{}
10.Py_sandbox
由于运维度假,此网站无法访问,flag我忘了
经过尝试,发现import
被过滤,但eval
可以使用
构造payload
:eval('__tropmi__'[::-1])('os').popen('cat flag').read()
好像是这样我也记不清了,毕竟现在没环境
得到flag{}