2025年第十六届蓝桥杯网络安全CTF国赛总决赛真题详解Writeup(Web漏洞挖掘、Crypto密码学、Misc杂项、Reverse逆向、Pwn二进制漏洞)

简介: 2025年第十六届蓝桥杯网络安全CTF国赛总决赛真题详解Writeup(Web漏洞挖掘、Crypto密码学、Misc杂项、Reverse逆向、Pwn二进制漏洞)


今年是第三届蓝桥杯CTF,相⽐于以往两届,题⽬数量略微多了一点,并且解题人数也有所增加。

第一题:逆向reverse类:encodefile

1.1 题目描述:

image.gif

题目内容:分析一个用于加密明文的可执行程序,通过识别其加密逻辑成功解密生成的密文文件,恢复出原始数据内容。

下载题目:打开后发现一个程序文件,一个加密文件。

image.gif

1.2 解题步骤:

第一步:拖入die发现64位程序,无壳

image.gif

第二步:拖入IDA中分析,先查看strings字符串,发现有关键信息flag.txt    enc.dat     key2025lqb

image.gif

跳转到对应函数,逻辑显示是通过key加密flag.txt数据后存储到enc.dat。

image.gif

连续3年出的RC4题目,这题大概率只能盲猜涉及到key的加密算法,输入加密文件enc.dat的十六进制数据进行RC4解密

image.gif

第二题:杂项misc类:flowzip2

2.1 题目描述:

image.gif

题目内容:

There are many encrypted zip files.

下载题目:打开后,解压发现是一个流量包文件。

image.gif 编辑

2.2 解题步骤:

第一步:用老师给的工具打开流量包文件,选择文件->导出对象-> http

image.gif 编辑

image.gif

第二步:导出发现很多压缩包,并且提示密码是三位数字。


2.3 exp代码:

可以直接编写脚本进行爆破:


import pyzipper  # 支持 AES 加密
import os
import re
def decrypt_and_search_flag():
    zip_files = [f"{i:03d}.zip" for i in range(200)]  # 000.zip ~ 199.zip
    
    for zip_file in zip_files:
        if not os.path.exists(zip_file):
            print(f"⚠️ 文件 {zip_file} 不存在,跳过...")
            continue
        print(f"\n🔍 正在处理 {zip_file}...")
        found_password = None
        # 尝试密码 000 ~ 999
        for pwd in (f"{i:03d}" for i in range(1000)):
            try:
                with pyzipper.AESZipFile(zip_file) as zf:
                    zf.extractall(pwd=pwd.encode(), path="temp_extracted")  # 解压到临时目录
                    found_password = pwd
                    print(f"✅ 解密成功!密码: {pwd}")
                    break
            except (RuntimeError, pyzipper.BadZipFile):
                continue
            except Exception as e:
                print(f"❌ 解压错误: {e}")
                continue
        if not found_password:
            print(f"❌ 未找到 {zip_file} 的密码(尝试 000-999)")
            continue
        # 检查解压的文件是否包含 "flag"
        flag_found = False
        for root, _, files in os.walk("temp_extracted"):
            for file in files:
                file_path = os.path.join(root, file)
                try:
                    with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
                        content = f.read()
                        if "flag" in content.lower():  # 不区分大小写搜索
                            print(f"🚩 发现 flag 在 {file}:")
                            print(content.strip())
                            flag_found = True
                except Exception as e:
                    print(f"⚠️ 无法读取 {file_path}: {e}")
        if not flag_found:
            print("🔍 未找到 flag 相关内容。")
        # 清理临时文件
        for root, _, files in os.walk("temp_extracted"):
            for file in files:
                os.remove(os.path.join(root, file))
        os.rmdir("temp_extracted")
if __name__ == "__main__":
    decrypt_and_search_flag()

image.gif

第三题:杂项misc类:server_logs

3.1 题目描述:


题目内容:

某服务器在2023-06-15 02:00-04:00期间被入侵,请分析日志并回答:

1.攻击者使用的SSH用户名和IP

2.植入的恶意服务名称

3.泄露机密文件时使用的DNS域名

提交形式:flag{SSH用户名_IP_恶意服务名称(不包括后缀)_DNS域名(固定部分)}

真题下载地址www.whsjyc.cn网页底部领取。

3.2 解题步骤:

第一步:在auth.log中发现:

SSH 用户名: attacker

攻击者 IP: 192.168.42.77

image.gif

第二步:在syslog中发现:

恶意服务名称: hidden_backdoor(不包括 .service 后缀)

image.gif

第三步:在dnsmasq.log中发现:

DNS 域名固定部分: data.leak.ev


按照题目要求进行组合得到最终flag为flag{attacker_192.168.42.77_hidden_backdoor_data.leak.ev}。

第四题:密码学Crypto类:xxtea

4.1 题目描述:


题目内容:

It's getting hard to even copy the data this time.

4.2 解题步骤:

第一步:打开题目发现是xxtea加密,这种加密题目在培训班讲过多次解法。


第二步:复制出十六进制代码,直接用赛博厨师逆向解密即可


获得答案flag{4eb88a16-be48-4de2-ab2a-ed09a09ed386}

第五题:逆向reverse类:rand_pyc

5.1 题目描述:


题目内容:

对由Python打包生成的exe文件进行逆向处理,提取并还原出其核心源码,以便进一步分析程序逻辑并获得正确的输入。

5.2 解题步骤:

第一步:打开题目发现python逆向题目,直接用老师上课时候教过的方法解题就可以了。先使用pyinstxtractor将exe反编译为pyc文件:


第二步:然后使用uncompyle6将pyc反编译为py源代码:

image.gif


5.3 exp代码:

检查输入Flag的Base64编码拼接"_easyctf"后,每个字符作为随机种子生成的数字是否匹配预设的列表。编写脚本爆破并重排序回去得到flag:

image.gif

import random
import base64
# 预计算字符到随机数的映射
char_to_rand = {}
for c in range(0, 128):
    random.seed(c)
    rand_num = random.randint(1000000, 9999999)
    char_to_rand[rand_num] = chr(c)
# 给定的随机数列表
iii111 = [
    4417023, 5690625, 9639225, 1327718, 4417023, 5085550, 5752075, 
    9556690, 5240080, 6431679, 3428007, 3189766, 3438336, 5757818, 
    3189766, 5690625, 4148389, 2254831, 6292433, 2122126, 5240080, 
    6431679, 9488271, 2464675, 7216908, 5757818, 3189766, 5690625, 
    3438336, 6431679, 2360475, 6002055, 5240080, 9040261, 8655414, 
    9347278, 3438336, 2254831, 2122126, 5135281, 2360475, 9347278, 
    4417023, 1327718, 3438336, 3448715, 9488271, 5501611, 5240080, 
    5757818, 9488271, 5501611, 5240080, 9347278, 4148389, 1714134, 
    9923116, 4267438, 4263793, 5752075, 2464675, 7777627, 6002055, 
    3485900
]
# 逆向Base64字符串
base64_str = ""
for num in iii111:
    if num in char_to_rand:
        base64_str += char_to_rand[num]
    else:
        print(f"Unknown random number: {num}")
        base64_str += "?"
print("Base64 + suffix:", base64_str)
# 提取并解码Base64部分
base64_part = base64_str.split("_easyctf")[0]
flag = base64.b64decode(base64_part).decode()
print("Flag:", flag)

image.gif

第六题:web漏洞类:fastcoll

6.1 题目描述:


题目内容:

这是一个MD5碰撞挑战:你能找到两个不同文件,但却拥有相同的MD5值吗?

6.2 解题步骤:

这种题目老师在上课时候讲过,就是web题目里面的md5漏洞

创建tmp.txt文件,写入gamelab


然后使用fastcoll工具生成:

fastcoll_v1.0.0.5.exe -p tmp.txt -o msg1.bin msg2.bin


使用Cyberchef取生成的两个文件的Base64值提交到靶机即可得到Flag。



相关文章
|
12天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1269 5
|
1天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
11天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1288 87
|
12天前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
1824 13