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题

2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 决赛 Writeup,5题

2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,5题