2025年第二届“铸剑杯”全国大学生网络安全攻防竞赛线上预选赛writeup
字数 1591 2025-11-30 18:08:53

2025年第二届"铸剑杯"全国大学生网络安全攻防竞赛线上预选赛Writeup教学文档

一、PWN类题目分析

1.1 堆利用题目(我不吃牛肉)

题目特征

  • GLIBC版本:2.23
  • 漏洞类型:UAF(Use-After-Free)漏洞
  • 特殊机制:功能选择采用伪随机数,输入数字作为随机数种子

漏洞利用步骤

步骤1:功能映射分析

  • 由于采用固定种子的伪随机数,需要手动测试每个输入数字对应的功能
  • 建议编写测试脚本或手动尝试0-9数字对应的功能

步骤2:泄露libc地址

  1. 申请一个堆块并释放到unsorted bin中
  2. 利用UAF漏洞通过show函数泄露libc地址
  3. 计算libc基地址

步骤3:攻击向量构建

  1. 尝试修改__malloc_hook为one_gadget
  2. 发现one_gadget条件不满足时,使用realloc调整栈帧
  3. 构造最终利用链获取shell

关键代码示例

from pwn import *

context(log_level='debug', arch='amd64')

def exploit():
    # 连接设置
    p = remote('113.201.14.253', 43870)
    elf = ELF('./pwn1')
    libc = ELF('/path/to/libc.so.6')
    
    # 功能测试和利用代码
    # ...具体利用逻辑...

1.2 格式化字符串漏洞题目(我最好的初代同事)

题目特征

  • 开始阶段:需要进行加法计算验证
  • 主要漏洞:格式化字符串漏洞
  • 输入限制:只能读入0x10字节

漏洞利用步骤

步骤1:初始验证绕过

  • 使用for循环读取并计算加法题
  • 正确完成后进入主功能

步骤2:格式化字符串漏洞利用

  1. 泄露返回地址的栈地址(偏移为10)
  2. 构造a→b→c修改链
  3. 发现偏移14处存在abc链路,返回地址位于c链路

步骤3:地址修改

  1. 将返回地址修改为后门函数地址
  2. 注意远程环境栈地址变化,需要多次尝试

关键技术点

  • 格式化字符串偏移计算
  • 栈地址链式修改技术
  • 部分地址覆盖技术(修改尾部字节)

利用代码框架

def fmt_exploit():
    p = remote('113.201.14.253', 15871)
    
    # 通过格式化字符串泄露和修改地址
    # 关键payload构造
    payload = b"%10$p"  # 泄露栈地址
    # ...后续利用代码...

二、Web类题目分析

2.1 Redis漏洞利用(Redis爱你呦)

漏洞信息

  • CVE编号:CVE-2025-32023
  • 影响版本:特定Redis版本
  • 参考资源:GitHub相关PoC

利用步骤

  1. 从Docker容器复制redis-server到本地
  2. 运行专用exp获取shell
  3. 参考阿里云先知社区分析文章

关键利用代码

import redis
from pwn import *

def redis_exploit():
    HOST, PORT = 'target_ip', target_port
    r = redis.Redis(HOST, PORT)
    
    # HLL相关漏洞利用
    HLL_DENSE = 0
    HLL_SPARSE = 1
    HLL_DENSE_SIZE = 0x3010
    
    # 构造恶意HLL数据
    pl = b'HYLL' + p8(HLL_DENSE)
    pl = pl.ljust(HLL_DENSE_SIZE, p8(0))
    r.set('hll:dense', pl)
    r.pfadd('hll:dense')

2.2 SSH提权漏洞(最近还好吗)

漏洞信息

  • 环境特征:SSH连接,flag在根目录
  • 需要权限提升:利用最新CVE漏洞
  • 相关CVE:CVE-2025-32463

利用步骤

  1. 登录SSH服务
  2. 上传exploit.sh到服务器
  3. 执行提权操作
  4. 读取flag

操作命令

chmod +x exploit.sh
id  # 检查当前权限
./exploit.sh  # 执行提权
id  # 验证提权结果
cat /flag  # 读取flag

三、Misc类题目分析

3.1 游戏类题目(我勒个超级玛丽奥)

解题方法

  1. 在游戏界面右键调出bash终端
  2. 探索app目录结构
  3. 发现flag存放目录并读取

关键技术点

  • 游戏界面隐藏的终端访问
  • 文件系统遍历技巧
  • 权限绕过方法

四、通用技术要点总结

4.1 漏洞利用通用技巧

信息泄露技术

  • 堆地址泄露:通过unsorted bin特性
  • 栈地址泄露:格式化字符串偏移计算
  • libc基地址计算:通过泄露的地址偏移

权限提升方法

  • 堆利用:UAF漏洞结合hook函数
  • 格式化字符串:栈地址链式修改
  • 服务漏洞:CVE漏洞直接利用

4.2 工具使用要点

PWNTools技巧

  • 上下文设置:架构和日志级别
  • 交互函数封装:send、recv系列函数
  • 地址处理:64位和32位地址提取

调试技巧

  • GDB附加调试
  • 本地与远程环境差异处理
  • 多次尝试机制(针对ASLR)

4.3 比赛策略

时间管理

  • 优先识别漏洞类型
  • 快速验证利用可行性
  • 备选方案准备

资源利用

  • 官方文档和CVE详情
  • 社区Writeup参考
  • 工具脚本复用

五、防御建议

5.1 开发安全

  • 避免UAF漏洞:及时清空释放的指针
  • 格式化字符串防护:使用安全函数
  • 服务安全:及时更新补丁

5.2 系统加固

  • 权限最小化原则
  • 服务隔离部署
  • 安全监控机制

本教学文档详细分析了2025年"铸剑杯"竞赛中的关键技术点和解题思路,涵盖了PWN、Web、Misc等多个方向的漏洞利用技术,为CTF竞赛学习和网络安全技能提升提供全面参考。

2025年第二届"铸剑杯"全国大学生网络安全攻防竞赛线上预选赛Writeup教学文档 一、PWN类题目分析 1.1 堆利用题目(我不吃牛肉) 题目特征 GLIBC版本:2.23 漏洞类型:UAF(Use-After-Free)漏洞 特殊机制:功能选择采用伪随机数,输入数字作为随机数种子 漏洞利用步骤 步骤1:功能映射分析 由于采用固定种子的伪随机数,需要手动测试每个输入数字对应的功能 建议编写测试脚本或手动尝试0-9数字对应的功能 步骤2:泄露libc地址 申请一个堆块并释放到unsorted bin中 利用UAF漏洞通过show函数泄露libc地址 计算libc基地址 步骤3:攻击向量构建 尝试修改 __malloc_hook 为one_ gadget 发现one_ gadget条件不满足时,使用realloc调整栈帧 构造最终利用链获取shell 关键代码示例 1.2 格式化字符串漏洞题目(我最好的初代同事) 题目特征 开始阶段:需要进行加法计算验证 主要漏洞:格式化字符串漏洞 输入限制:只能读入0x10字节 漏洞利用步骤 步骤1:初始验证绕过 使用for循环读取并计算加法题 正确完成后进入主功能 步骤2:格式化字符串漏洞利用 泄露返回地址的栈地址(偏移为10) 构造a→b→c修改链 发现偏移14处存在abc链路,返回地址位于c链路 步骤3:地址修改 将返回地址修改为后门函数地址 注意远程环境栈地址变化,需要多次尝试 关键技术点 格式化字符串偏移计算 栈地址链式修改技术 部分地址覆盖技术(修改尾部字节) 利用代码框架 二、Web类题目分析 2.1 Redis漏洞利用(Redis爱你呦) 漏洞信息 CVE编号:CVE-2025-32023 影响版本:特定Redis版本 参考资源:GitHub相关PoC 利用步骤 从Docker容器复制redis-server到本地 运行专用exp获取shell 参考阿里云先知社区分析文章 关键利用代码 2.2 SSH提权漏洞(最近还好吗) 漏洞信息 环境特征:SSH连接,flag在根目录 需要权限提升:利用最新CVE漏洞 相关CVE:CVE-2025-32463 利用步骤 登录SSH服务 上传exploit.sh到服务器 执行提权操作 读取flag 操作命令 三、Misc类题目分析 3.1 游戏类题目(我勒个超级玛丽奥) 解题方法 在游戏界面右键调出bash终端 探索app目录结构 发现flag存放目录并读取 关键技术点 游戏界面隐藏的终端访问 文件系统遍历技巧 权限绕过方法 四、通用技术要点总结 4.1 漏洞利用通用技巧 信息泄露技术 堆地址泄露:通过unsorted bin特性 栈地址泄露:格式化字符串偏移计算 libc基地址计算:通过泄露的地址偏移 权限提升方法 堆利用:UAF漏洞结合hook函数 格式化字符串:栈地址链式修改 服务漏洞:CVE漏洞直接利用 4.2 工具使用要点 PWNTools技巧 上下文设置:架构和日志级别 交互函数封装:send、recv系列函数 地址处理:64位和32位地址提取 调试技巧 GDB附加调试 本地与远程环境差异处理 多次尝试机制(针对ASLR) 4.3 比赛策略 时间管理 优先识别漏洞类型 快速验证利用可行性 备选方案准备 资源利用 官方文档和CVE详情 社区Writeup参考 工具脚本复用 五、防御建议 5.1 开发安全 避免UAF漏洞:及时清空释放的指针 格式化字符串防护:使用安全函数 服务安全:及时更新补丁 5.2 系统加固 权限最小化原则 服务隔离部署 安全监控机制 本教学文档详细分析了2025年"铸剑杯"竞赛中的关键技术点和解题思路,涵盖了PWN、Web、Misc等多个方向的漏洞利用技术,为CTF竞赛学习和网络安全技能提升提供全面参考。