- [MRCTF2020]:千层套路
- 0.信息分析
- 结论:
- 1.目录结构如下:
- 2.使用python解决套娃问题
- 3.执行代码后目录结构如下:
- **qr.txt内容如下:**
- 4.绘制二维码
- 1.opencv-绘制二维码.py
- 2.pil-绘制二维码.py
- 5.成功拿到二维码
0.信息分析
根据图片的线索测试了一下 0573.zip 的密码就是 0573
结论: 经过测试:0573.zip --> 密码0573,0114.zip --> 密码0114,一直套娃下去。
[MRCTF2020]千层套路
├─Example.py
├─0573.zip
├─flag
└─zips
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]
**[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,也可以猜到是二维码!
### 0.目录结构如下:
├─Example.py
├─0573.zip
├─flag
├─==opencv-绘制二维码.py==
├─==pil-绘制二维码.py==
└─zips
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()
上面两个代码任意选择一个即可。
扫描二维码,成功拿到flag:
MRCTF{ta01uyout1nreet1n0usandtimes}
改成flag{}这种形式,如下:
flag{ta01uyout1nreet1n0usandtimes}
完结!Github链接


![[MRCTF2020]:千层套路 [MRCTF2020]:千层套路](http://www.mshxw.com/aiimages/31/1012798.png)
