2021 第四届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,4题
Posted 小哈里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021 第四届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,4题相关的知识,希望对你有一定的参考价值。
文章目录
1、Web:Checkin
题目:
- 给了一个网站链接
思路:
- 进入网站后,F12 ChromeDev对网站抓一个包即可。
2、Misc:听说你在找flag?
题意:
-
给了一个zip的压缩包, 一张图片以及一个被加密的rar文件,rar中有一个txt文件。
-
首先尝试从图片入手,拖入01Edit发现末尾的提示。
-
然后从压缩包入手,从第一个PK开始到最后,分离出了一个加密的zip。
-
ARCHPR纯数字爆破该压缩包的密码。
-
解压后,找到压缩包里最大的图片,01Edit先看看。发现末尾有一串base64.
-
丢进扔CyberChef里,保存成png图片,得到一张全新的图
-
修改图片的高度,得到新的base64
-
抄下来,继续扔进去解密。
RmluZGluZy4uLg==
-
得到rar压缩包的密码,解压得到flag.txt中的flag文件内容
3、Crypto:Easy Railfence
题意:
- 给了个py文件
思路:
-
观察代码,发现加密只进行了位置对换,不知道Rail和offset,但是知道了flag的格式。
肯定是最后m = flag _____ 长度已知 _______,然后经过两个参数加密后得到最终的字符串。 -
可以发现g,l,,这些字符在整个加密结果中只有一个并且位置已经确定,因此可以爆破得到Rail和offset只有两种可能。
-
代码中的encrypt部分是不用改的,flag只保留长度和flag这几个字符,然后枚举rail和offset判断一下即可。
import hashlib #m = 'reetdrvhns0eutbftafmeonlinnd=a1cOh!gcedosneuwkYav0irOceytounw' m = 'flag_________________________________________________________' def encrypt(c,rails,offset): c = '$' * offset + c length = len(c) result = x: "" for x in range(rails) for a in range(length): width = rails * 2 - 2 num = a % width if (num < rails): result.update(num: result[num] + c[a]) else: ll = 2 * rails - 2 - num result.update(ll: result[ll] + c[a]) d = "" for k in range(rails): d = d + result[k] d = d.replace('$','') return d # print (d), encrypt就这里return, 其他不改 for Rail in range(2,20): for Offset in range(0,30): if encrypt(m, Rail , Offset)[23:25]=='l': print(Rail,Offset)
-
得到(13,5),(13,29)以后,丢到CyberChef里解码即可得到flag。
4、Misc:qrimg
-
给出的是一个gif,可以用potplayer或ffmpeg分解一下,得到单个的图片。
ffmpeg -i qrimg.gif qrimg%d.png
-
将图片放入stegsolve中可以发现每一张图片在b0位都能看到一个二维码,扫码之后得到一个字母。
-
因此猜测是将所有二维码进行扫描后得到一串字符。
from PIL import Image import pyzbar.pyzbar as pyzbar for count in range(1,313): img = Image.open('.//qrimg//'+str(count)+'.png') img = img.convert('RGB') width,height=img.size result = "" for i in range(0,height): for j in range(0,width): tmp = img.getpixel((j,i)) result += bin(tmp[2])[-1] a = 0 pic = Image.new("RGB",(288,360)) for y in range(0,360): for x in range(0,288): if(result[a] == '0'): pic.putpixel([x,y],(0,0,0)) else: pic.putpixel([x,y],(255,255,255)) a += 1 img_size = pic.size barcodes = pyzbar.decode(pic) for barcode in barcodes: barcodeDATA = barcode.data.decode("utf-8") print(barcodeDATA,end="")
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOalZsSlZWR3RPVlUxWGVIcFdiVFZyWVd4S2MxTnNXbFpOYmxJelZrUkdTMlJIVWtWV2JHUnBWa1ZaZWxaclkzaFdNbEpJVm10c1ZXSkdXbTlVVmxaM1ZWWmtWMVpzV214U2EzQllWMnRhYzFsV1NsVldiazVhWWtkU2RscEhlR0ZTVmtwMFpFWm9hR1ZzV2xoV1IzaHZVakpHUmsxSWJHeFNWR3hZV1ZSS1VtUXhVbFZTYkU1clVsUldTbGRyV2tkV2JGcEZVVlJWUFE9PQ==
-
最后多次base64解密可以得到flag。
以上是关于2021 第四届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,4题的主要内容,如果未能解决你的问题,请参考以下文章
2021 第四届 浙江省大学生网络与信息安全竞赛技能赛 决赛 Writeup,5题
2021 第四届 浙江省大学生网络与信息安全竞赛技能赛 决赛 Writeup,5题
2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 决赛 Writeup,5题
2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 决赛 Writeup,5题