湘岚杯wp
字数 1620 2025-08-22 12:23:12

湘岚杯CTF比赛题目解析与教学文档

PWN题目解析

1. ret2text签到题

题目特点:

  • 基础栈溢出题目
  • 典型的ret2text类型

解题思路:

  1. 寻找程序中存在的危险函数(如gets, scanf等)
  2. 计算溢出偏移量
  3. 定位后门函数或system("/bin/sh")等可利用代码段
  4. 构造payload覆盖返回地址

2. ezlibc

题目特点:

  • 开启了canary保护的libc题目
  • 可作为libc利用的模板题

解题思路:

  1. 泄露canary值
  2. 绕过canary保护
  3. 泄露libc基地址
  4. 构造ROP链调用system("/bin/sh")

3. sandbox

题目特点:

  • 开启了canary保护的ORW(Open-Read-Write)题目
  • 使用纯ROP链实现ORW

解题步骤:

  1. 利用格式化字符串漏洞泄露canary
  2. 构造ROP链实现:
    • open("flag", 0)
    • read(fd, buf, size)
    • write(1, buf, size)
  3. 注意绕过沙箱限制

4. 宇宙射线(重点题目)

题目特点:

  • 允许修改程序任意内存位置一字节
  • 涉及/proc/self/mem机制

关键知识点:

  • /proc/self/mem指向当前执行的程序内存
  • 可以通过修改此文件来修改程序运行时的内存

解题步骤:

  1. 第一次输入: 提供一个十六进制地址

  2. 第二次输入: 修改该地址处的一字节内容

  3. 利用思路:

    • 找到程序中的sys_exit调用(系统调用号0xCh)
    • 修改一个字节将其变为sys_read(系统调用号0x0)
    • 通过调试观察sys_read写入时的栈空间布局(需要填充0x12+8个垃圾字节)
  4. ROP链构造:

    • 题目缺少pop rdi gadget
    • 利用程序提供的key:
      • pop rbp
      • mov rdi, rbp实现类似pop rdi的效果
    • 构造ret2libc攻击

EXP示例:

# 伪代码示例
# 1. 修改sys_exit为sys_read
modify_address(0xdeadbeef, 0x00)

# 2. 构造ROP链
payload = b'A'*(0x12+8)  # 填充垃圾字节
payload += p64(pop_rbp)
payload += p64(bin_sh_addr)
payload += p64(mov_rdi_rbp)
payload += p64(system_addr)

Crypto题目解析

1. RSA就是数学口牙(签到)

题目特点:

  • 基础RSA题目
  • 考察RSA数学原理

解题思路:

  1. 分解n得到p,q
  2. 计算φ(n) = (p-1)*(q-1)
  3. 计算d = e^-1 mod φ(n)
  4. 解密ciphertext

2. 你真的懂社会主义核心价值观吗

题目特点:

  • 结合社会主义核心价值观编码
  • 使用base64编码

解题步骤:

  1. 先使用社会主义核心价值观解码
  2. 再进行base64解码
  3. 注意编码顺序

MISC题目解析

1. 宇宙编史

题目特点:

  • 使用零宽字符隐写
  • 需要识别并提取隐藏信息

解题工具:

  • 零宽字符解码工具
  • 在线解码网站或Python脚本

2. base64游戏

题目特点:

  • 远程加密器,对输入进行base64编码
  • 需要获取修改后的base64编码表

解题步骤:

  1. 已知:
    • 标准base64原表
    • base64编码前后的数据
  2. 方法:
    • 将原表进行解码
    • 用程序编码原表,得到修改后的码表
  3. 通过对比找出编码表替换规则

EXP示例:

# 伪代码示例
original_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
encoded_by_program = get_encoded_result(original_table)
# encoded_by_program即为修改后的码表

关键知识点总结

  1. /proc/self/mem机制:

    • 允许进程访问自身内存
    • 可以修改运行时的程序代码
    • 在CTF中常用于修改关键指令或数据
  2. 系统调用号修改技巧:

    • 通过单字节修改改变系统调用行为
    • 如将exit(0xCh)改为read(0x00)
  3. ROP链构造技巧:

    • 缺少常用gadget时的替代方案
    • 组合指令实现所需功能(如pop rbp + mov rdi,rbp)
  4. base64变种识别:

    • 通过已知明文和密文对比
    • 重建自定义编码表
  5. 零宽隐写:

    • 使用不可见字符隐藏信息
    • 需要特殊工具或脚本提取

本教学文档涵盖了湘岚杯CTF比赛中的关键题目和解题技术,重点讲解了PWN题目中的内存修改技术和ROP构造技巧,以及Crypto和MISC题目的特殊编码处理方式。这些技术在CTF比赛中具有普遍适用性,掌握它们有助于解决类似的安全挑战。

湘岚杯CTF比赛题目解析与教学文档 PWN题目解析 1. ret2text签到题 题目特点 : 基础栈溢出题目 典型的ret2text类型 解题思路 : 寻找程序中存在的危险函数(如gets, scanf等) 计算溢出偏移量 定位后门函数或system("/bin/sh")等可利用代码段 构造payload覆盖返回地址 2. ezlibc 题目特点 : 开启了canary保护的libc题目 可作为libc利用的模板题 解题思路 : 泄露canary值 绕过canary保护 泄露libc基地址 构造ROP链调用system("/bin/sh") 3. sandbox 题目特点 : 开启了canary保护的ORW(Open-Read-Write)题目 使用纯ROP链实现ORW 解题步骤 : 利用格式化字符串漏洞泄露canary 构造ROP链实现: open("flag", 0) read(fd, buf, size) write(1, buf, size) 注意绕过沙箱限制 4. 宇宙射线(重点题目) 题目特点 : 允许修改程序任意内存位置一字节 涉及/proc/self/mem机制 关键知识点 : /proc/self/mem 指向当前执行的程序内存 可以通过修改此文件来修改程序运行时的内存 解题步骤 : 第一次输入 : 提供一个十六进制地址 第二次输入 : 修改该地址处的一字节内容 利用思路 : 找到程序中的 sys_exit 调用(系统调用号0xCh) 修改一个字节将其变为 sys_read (系统调用号0x0) 通过调试观察 sys_read 写入时的栈空间布局(需要填充0x12+8个垃圾字节) ROP链构造 : 题目缺少 pop rdi gadget 利用程序提供的key: 先 pop rbp 再 mov rdi, rbp 实现类似 pop rdi 的效果 构造ret2libc攻击 EXP示例 : Crypto题目解析 1. RSA就是数学口牙(签到) 题目特点 : 基础RSA题目 考察RSA数学原理 解题思路 : 分解n得到p,q 计算φ(n) = (p-1)* (q-1) 计算d = e^-1 mod φ(n) 解密ciphertext 2. 你真的懂社会主义核心价值观吗 题目特点 : 结合社会主义核心价值观编码 使用base64编码 解题步骤 : 先使用社会主义核心价值观解码 再进行base64解码 注意编码顺序 MISC题目解析 1. 宇宙编史 题目特点 : 使用零宽字符隐写 需要识别并提取隐藏信息 解题工具 : 零宽字符解码工具 在线解码网站或Python脚本 2. base64游戏 题目特点 : 远程加密器,对输入进行base64编码 需要获取修改后的base64编码表 解题步骤 : 已知: 标准base64原表 base64编码前后的数据 方法: 将原表进行解码 用程序编码原表,得到修改后的码表 通过对比找出编码表替换规则 EXP示例 : 关键知识点总结 /proc/self/mem机制 : 允许进程访问自身内存 可以修改运行时的程序代码 在CTF中常用于修改关键指令或数据 系统调用号修改技巧 : 通过单字节修改改变系统调用行为 如将exit(0xCh)改为read(0x00) ROP链构造技巧 : 缺少常用gadget时的替代方案 组合指令实现所需功能(如pop rbp + mov rdi,rbp) base64变种识别 : 通过已知明文和密文对比 重建自定义编码表 零宽隐写 : 使用不可见字符隐藏信息 需要特殊工具或脚本提取 本教学文档涵盖了湘岚杯CTF比赛中的关键题目和解题技术,重点讲解了PWN题目中的内存修改技术和ROP构造技巧,以及Crypto和MISC题目的特殊编码处理方式。这些技术在CTF比赛中具有普遍适用性,掌握它们有助于解决类似的安全挑战。