• 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)
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
    • 得到(13,5),(13,29)以后,丢到CyberChef里解码即可得到flag。
      在这里插入图片描述

    4、Misc:qrimg

    • 给出的是一个gif,可以用potplayer或ffmpeg分解一下,得到单个的图片。
      在这里插入图片描述

      ffmpeg -i qrimg.gif qrimg%d.png
      
      • 1
    • 将图片放入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="")
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28

      Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOalZsSlZWR3RPVlUxWGVIcFdiVFZyWVd4S2MxTnNXbFpOYmxJelZrUkdTMlJIVWtWV2JHUnBWa1ZaZWxaclkzaFdNbEpJVm10c1ZXSkdXbTlVVmxaM1ZWWmtWMVpzV214U2EzQllWMnRhYzFsV1NsVldiazVhWWtkU2RscEhlR0ZTVmtwMFpFWm9hR1ZzV2xoV1IzaHZVakpHUmsxSWJHeFNWR3hZV1ZSS1VtUXhVbFZTYkU1clVsUldTbGRyV2tkV2JGcEZVVlJWUFE9PQ==

    • 最后多次base64解密可以得到flag。
      在这里插入代码片

  • 相关阅读:
    QEMU 8.0 发布
    springboot+校园超市管理系统的设计与实现 毕业设计 -附源码201521
    pyrouge安装(Linux)新手
    嵌入式笔试面试刷题(day12)
    SRS5.0-报错: srt serve error code=6006
    Webpack
    SpringBoot基础(六)-- 辅助功能之一 -- 内嵌tomcat
    【知识串联】概率论中的值和量(随机变量/数字特征/参数估计)【考研向】【按概率论学习章节总结】(最大似然估计量和最大似然估计值的区别)
    ubuntu18.04设置开机自动启动脚本(以自动启动odoo命令行为例讲解)
    SpringBoot加载静态资源
  • 原文地址:https://blog.csdn.net/qq_33957603/article/details/126755463