第五届浙江省大学生网络与信息安全竞赛-技能挑战赛WP

Misc

一、好怪哦

下载下来得到一个数据逆置的压缩包,直接用逆置脚本

input = open('fuck.zip', 'rb')
input_all = input.read()
ss = input_all[::-1]
output = open('flag.zip', 'wb')
output.write(ss)
input.close()
output.close()

然后解压得到一个缺少png文件头的png文件,补上文件头:89 50 4e 47

打开得到一张CRC有问题的图片,直接上脚本爆破即可拿到flag

import binascii
import struct
import sys
​
file = input("图片的地址")
fr = open(file,'rb').read()
data = bytearray(fr[0x0c:0x1d])
crc32key = eval('0x'+str(binascii.b2a_hex(fr[0x1d:0x21]))[2:-1])
#原来的代码: crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
n = 4095
for w in range(n):
    width = bytearray(struct.pack('>i', w))
    for h in range(n):
        height = bytearray(struct.pack('>i', h))
        for x in range(4):
            data[x+4] = width[x]
            data[x+8] = height[x]
        crc32result = binascii.crc32(data) & 0xffffffff
        if crc32result == crc32key:
            print(width,height)
            newpic = bytearray(fr)
            for x in range(4):
                newpic[x+16] = width[x]
                newpic[x+20] = height[x]
            fw = open(file+'.png','wb')
            fw.write(newpic)
            fw.close
            sys.exit()

二、神奇的棋盘

下载解压得到一张棋盘图片和一段棋盘加密后的密码:

这段密码是古典密码中的Polybius密码,直接去除逗号拉入随波逐流解密

得到密文:agaxxdaggvggvdvadavxdgadvgdvaaddddfxafafdgdvxxdggdggdxddfddxvgxadgvdfxvvaaddxdxxaddvgggxgxxxxgxxggxgdvvvgggagaaaagaaggagdddagagggaggagagaaavaaaxgxgggxggxgxgxxxv

然后用zsteg跑那个board的图片,得到一串base32,解密得到位移key:

JRQXG5CLMV4XWWLVONQXS6LEON6Q====

LastKey{Yusayyds}

然后直接输入棋盘中的字符开始解密:

第五届浙江省大学生网络与信息安全竞赛-技能挑战赛WP_第1张图片

 

然后得到一串十六进制字符串 ,直接十六进制转字符串得到flag

【因为省赛不能联网,只能用本地的工具,然后这个Hex好像有点问题】

后来发现最新版的CyberChef_v9.46.5可以解出来

三、segmentFlow

下载后得到一个压缩包,里面有一个流量文件和七个4字节的文本文件

使用Github上的CRC爆破脚本进行爆破每个文本文件的CRC值,得到解压密码

 

用tshark导出数据

tshark -r segmentFlow.pcapng -Y "http.request" -T fields -e http.file_data > data1.txt

f = open('data.txt','r')
data=f.read()
data=data.split('&sa066b32bfb3e7=')
#print(data.split('&sa066b32bfb3e7='))
#以这个字符串为分隔符,后面八位就是我们要的数据
for i in range(1,len(data)):
    #从第一个到最后一个列表
    print(data[i][:8],end='')
    #一个列表元素的前八位

打开压缩包得到flag

reverse

一、ManyCheck

三层验证,前两层拉入ida看或者直接用计算器算出结果:77、55、49

第三层根据ida里的算法,直接写个for循环就出来了:1198089844

#include 
using namespace std;
​
int main()
{
    for (int v1 = 0; v1 <= 1718896489; v1++)
    {
        int v2 = 16;
        int v3 = (v1 >> (32 - v2)) | (v1 << v2);
        if (v3 == 1718896489)
            printf("%d", v1);
    }
    return 0;
}

Web

一、nisc_easyweb

1.扫出 /api/record/文件 里面有个发送get请求功能的php,利用hackbar发送get请求即可得到flag

二、nisc_学校门户网站

不知道是不是非预期,直接注册然后登录即可得到flag

三、吃豆人吃豆魂

进入web开发者工具,找到game的源码,在index.js中有对生命值和分数的定义,修改分数为10000000,再次请求页面,直接弹出flag

你可能感兴趣的:(CTF,网络安全)