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 = 'reetdrvhns0eutbftafmeon}linnd=a1cOh!gcedos{neuwkYav0irOceytounw'
    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。
    在这里插入代码片

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小哈里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值