# 第一届 “吾杯” 网络安全技能大赛
# Web
# Sign
题目提示了 “输入密码即可使用蚁剑”,直接尝试蚁剑连接即可,然后在根目录下发现 flag 文件
# Crypto
# Easy
题目中给出的伪代码和数据描述了如何生成密钥流并用它来 解密 flag 。 key = "hello world" 是解密的密钥。
要恢复原始的 flag ,我们需要逆向加密过程,步骤如下:
- 初始化状态
- 我们将
S数组初始化为0-255,并用key填充T数组。
- 我们将
- 扰乱数组
- 按照伪代码中给定的方式,通过
s[i]和s[j]的交换来扰乱数组S。
- 按照伪代码中给定的方式,通过
- 生成密钥流
- 通过伪代码中的逻辑生成密钥流。
- 解密操作
- 使用生成的密钥流与加密后的
flag数据进行异或操作,恢复原始的flag。
- 使用生成的密钥流与加密后的
编写脚本:
# RC4解密实现
def rc4_decrypt(key, encrypted_flag):
# 初始化S和T数组
S = list(range(256))
T = [ord(key[i % len(key)]) for i in range(256)]
# 初始化密钥流生成
j = 0
for i in range(256):
j = (j + S[i] + T[i]) % 256
S[i], S[j] = S[j], S[i]
# 解密过程
i = j = 0
decrypted_flag = []
for m in range(len(encrypted_flag)):
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
x = (S[i] + S[j]) % 256
decrypted_flag.append(encrypted_flag[m] ^ S[x])
return bytes(decrypted_flag).decode('utf-8', errors='ignore')
# 读取1.txt中的加密内容
hex_data = 'd8d2 963e 0d8a b853 3d2a 7fe2 96c5 2923 3924 6eba 0d29 2d57 5257 8359 322c 3a77 892d fa72 61b8 4f'
encrypted_flag = bytes.fromhex(hex_data.replace(' ', ''))
# 解密
key = 'hello world'
flag = rc4_decrypt(key, encrypted_flag)
print("解密后的flag:", flag)
# MISC
# Sign
签到题,直接丢到 **“随波逐流”** 一把梭,得到结果
# 太极
根据题目的几个提示,可以猜到是拼音有关,先查看页面给出的内容,转换一下字体,得到正确的中文内容

然后根据提示分析拼音提取的规律,不难发现是根据每个字符的位置按照 “1、2、3、4、5” 的顺序循环,这里需要注意的是不够的字符就重头循环,随后可以得到后面的字符内容
完整的 flag: WuCup{tieny-lieig-sieau-bunig-jieay}
# 旋转木马
给了两个很大的文件,这里最先开始尝试了 base64 分别解码,有点问题,厨子还解不了,后面发现两段内容的格式差不多,尝试在 flag1 后拼接 flag2 的内容
这里知道厨子解不了这么大的后,想到编写脚本解 base64,然后即是循环解 base64,得到内容:
循环解 base64 脚本:
# -*- coding:utf-8 -*-
# 使用说明:直接在脚本中设置文件路径,脚本会读取并进行多次Base64解码
import base64
def base64decoding_from_file(file_path):
try:
with open(file_path, 'r') as file:
# 读取文件中的Base64编码内容
src = file.read().strip()
num = 0
while True:
try:
# 尝试Base64解码
src = base64.b64decode(src)
num += 1
except Exception as e:
# 解码失败,打印结果并结束循环
print(f"[+] The result of decoding is: {src.decode('utf-8', 'ignore')}")
print(f"[+] The number of decoding is: {num}")
break
except FileNotFoundError:
print(f"[-] Error: The file '{file_path}' was not found.")
except Exception as e:
print(f"[-] An error occurred: {e}")
if __name__ == '__main__':
# 直接在此指定你的Base64编码文件路径
file_path = r'path' # 在这里替换为你的文件路径
base64decoding_from_file(file_path)
将这段内容丢到 **“随波逐流”** 一把梭,即可得到 flag:

# 原神启动!
给了一个图片和一个压缩包,压缩包发现有密码,从图片入手,尝试后发现用 **“Stegsolve”** 工具查看 Red plane 2 下有密码 1: WuCup{7c16e21c-31c2-439e-a814-bba2ca54101a}

解开压缩包后,发现是 docx 文件,docx 文件可以直接改后缀为 zip 文件,解压。
又发现一个 img.zip 文件,同样需要密码,同时在 media 目录下发现一张图片,能隐约看到字符,同样是 **“Stegsolve”** 工具查看 Gray bits 得到密码 2: WuCup{6bb9d97d-7169-434b-a7cf-0ee0b6fdfa30}
解压 img.zip 后得到 text.zip 文件,这里最先想到直接爆破,但考虑到前几个密码的格式,爆破时间也不现实,就回头找 docx 里面是否还藏了东西,后来逐个检查文件内容,发现 /word/document.xml 内容有断断续续的密码,拼接后即是密码 3: WuCup{f848566c-3fb6-4bfd-805a-d9e102511784}
最后解出 text.txt 内容:








