[MRCTF2020]:千层套路
文章目录
0.信息分析
根据图片的线索测试了一下 0573.zip 的密码就是 0573
结论:
经过测试:0573.zip --> 密码0573,0114.zip --> 密码0114,一直套娃下去。
1.目录结构如下:
[MRCTF2020]千层套路
├─Example.py
├─0573.zip
├─flag
└─zips
2.使用python解决套娃问题
Example.py
import os
import zipfile
zip_name = "0573.zip"
password = "0573"
zips_path = "./zips"
flag_path = "./flag"
while True:
zip = zipfile.ZipFile(zip_name, "r")
file_name = zip.namelist()[0]
suffix_name = zip.namelist()[0].split(".")[1]
if suffix_name == "zip":
zip.extractall(zips_path, pwd=password.encode())
else:
zip.extractall(flag_path)
exit()
zip_name = os.path.join(zips_path, file_name)
password = zip.namelist()[0].split(".")[0]
3.执行代码后目录结构如下:
**[MRCTF2020]千层套路**
├─Example.py
├─0573.zip
├─zips (把套娃的压缩包全放这个目录)
─ qr.zip
─ 1000.zip
─ …
─ 0007.zip
├─flag
─ qr.txt(执行脚本后获得的)
qr.txt内容如下:
行 | 内容 |
---|---|
1 | (255, 255, 255) |
2 | (255, 255, 255) |
… | … |
40000 | (255, 255, 255) |
如果有一些opencv基础的话很容易知道:
40000个像素点,RGB(红绿蓝)3通道,根据文件名qr,也可以猜到是二维码!
4.绘制二维码
### 0.目录结构如下:
├─Example.py
├─0573.zip
├─flag
├─==opencv-绘制二维码.py==
├─==pil-绘制二维码.py==
└─zips
1.opencv-绘制二维码.py
import cv2
import numpy as np
file = open("./flag/qr.txt", "r").read()
arr = [eval(i) for i in file.splitlines()]
img = np.array(arr, dtype=np.uint8).reshape((200, 200, 3))
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.pil-绘制二维码.py
import itertools
from PIL import Image
max = 200
file = open("./flag/qr.txt", "r")
img = Image.new("RGB", (max, max))
for y, x in itertools.product(range(max), range(max)):
pixel = eval(file.readline())
img.putpixel([x, y], pixel)
img.show()
上面两个代码任意选择一个即可。
5.成功拿到二维码
扫描二维码,成功拿到flag:
MRCTF{ta01uyout1nreet1n0usandtimes}
改成flag{}这种形式,如下:
flag{ta01uyout1nreet1n0usandtimes}
完结!Github链接