Polarctf2025春季赛题解
字数 1269 2025-08-29 08:29:58

PolarCTF 2025春季赛题解教学文档

1. bllhl_mom题目解析

漏洞分析

  1. 存在三次利用机会:
    • 第一次:泄露canary
    • 第二次:任意数据写入
    • 第三次:进行栈迁移到bss段

利用方法

  1. 通过三次操作完成攻击:
    • 第一次操作获取canary值
    • 第二次操作写入任意数据
    • 第三次操作执行栈迁移到bss段
  2. 最终执行system($0)获取shell

2. koi题目解析

漏洞分析

  1. xxx函数中存在栈溢出漏洞
  2. 可构造ret2libc攻击

利用条件

  1. 需要使变量v4和n都等于520
  2. 其他函数中只有wrshell函数有用

利用方法

  1. 溢出8字节覆盖rbp
  2. 分析main函数switch后的逻辑:
    • 将rbp-4作为scanf读入的地址
  3. 在wrshell函数中控制rbp为n的地址+4,从而向n中写入数据
  4. 完成ret2libc攻击

3. thinks题目解析

漏洞分析

  1. 输入5212,判断magic是否大于0x145c
    • 如果大于则进入wish函数(后门函数)
  2. 无UAF漏洞,但edit函数存在堆溢出

利用方法

  1. 先free一个堆块进入fastbins
  2. 对该堆块的上一个堆块进行edit
  3. 利用溢出修改被free堆块的fd为magic附近地址
  4. 再次申请该堆块,向magic写入数据

4. ez_heap1题目解析

题目特点

  1. 与thinks题目的攻击方法相同
  2. 使用one_gadget
  3. 基于2.23版本的堆题标准菜单题
  4. 存在UAF漏洞

5. fmt_text题目解析

漏洞分析

  1. 32位程序
  2. GOT表可攻击
  3. 存在gets溢出和格式化字符串漏洞

利用方法

  1. 使用fmtstr_payload
  2. 修改printf为system

6. libc题目解析

题目特点

  1. 32位的ret2libc
  2. 标准攻击方式,无特殊技巧

7. bllbl_shellcode_2题目解析

漏洞分析

  1. 存在jmp_rsp指令
  2. 只有5+8个字节空间写入shellcode

利用方法

  1. 构造execve shellcode
  2. 刚好13个字节完成攻击

8. NICOUAF题目解析

漏洞分析

  1. 32位堆题
  2. 存在UAF漏洞

利用点

  1. show函数中存在判断逻辑:
    • 如果输入的堆序号存在则打印数据
    • 如果不存在则执行(*((void (__cdecl **)(char *))page + 1))(page)
    • 该指针可被控制

利用方法

  1. 利用UAF漏洞伪造指针
  2. 在堆上构造system(/sh)
  3. 具体步骤:
    • 先free 0号堆块
    • 再申请回来,此时0号和1号是同一个堆块
    • 修改1号堆块内容
    • 调用show(0)触发攻击

通用攻击技巧总结

  1. 栈溢出利用

    • 注意canary泄露
    • 栈迁移技术
    • ret2libc构造
  2. 堆漏洞利用

    • UAF漏洞利用
    • fastbin attack
    • 堆溢出修改关键数据
  3. 格式化字符串漏洞

    • GOT表劫持
    • 函数指针修改
  4. shellcode构造

    • 空间受限时的精简shellcode
    • 寄存器状态分析
  5. 特殊技巧

    • 通过控制rbp实现任意地址写入
    • 利用判断逻辑触发后门函数
PolarCTF 2025春季赛题解教学文档 1. bllhl_ mom题目解析 漏洞分析 存在三次利用机会: 第一次:泄露canary 第二次:任意数据写入 第三次:进行栈迁移到bss段 利用方法 通过三次操作完成攻击: 第一次操作获取canary值 第二次操作写入任意数据 第三次操作执行栈迁移到bss段 最终执行 system($0) 获取shell 2. koi题目解析 漏洞分析 xxx函数中存在栈溢出漏洞 可构造ret2libc攻击 利用条件 需要使变量v4和n都等于520 其他函数中只有wrshell函数有用 利用方法 溢出8字节覆盖rbp 分析main函数switch后的逻辑: 将rbp-4作为scanf读入的地址 在wrshell函数中控制rbp为n的地址+4,从而向n中写入数据 完成ret2libc攻击 3. thinks题目解析 漏洞分析 输入5212,判断magic是否大于0x145c 如果大于则进入wish函数(后门函数) 无UAF漏洞,但edit函数存在堆溢出 利用方法 先free一个堆块进入fastbins 对该堆块的上一个堆块进行edit 利用溢出修改被free堆块的fd为magic附近地址 再次申请该堆块,向magic写入数据 4. ez_ heap1题目解析 题目特点 与thinks题目的攻击方法相同 使用one_ gadget 基于2.23版本的堆题标准菜单题 存在UAF漏洞 5. fmt_ text题目解析 漏洞分析 32位程序 GOT表可攻击 存在gets溢出和格式化字符串漏洞 利用方法 使用fmtstr_ payload 修改printf为system 6. libc题目解析 题目特点 32位的ret2libc 标准攻击方式,无特殊技巧 7. bllbl_ shellcode_ 2题目解析 漏洞分析 存在jmp_ rsp指令 只有5+8个字节空间写入shellcode 利用方法 构造execve shellcode 刚好13个字节完成攻击 8. NICOUAF题目解析 漏洞分析 32位堆题 存在UAF漏洞 利用点 show函数中存在判断逻辑: 如果输入的堆序号存在则打印数据 如果不存在则执行 (*((void (__cdecl **)(char *))page + 1))(page) 该指针可被控制 利用方法 利用UAF漏洞伪造指针 在堆上构造 system(/sh) 具体步骤: 先free 0号堆块 再申请回来,此时0号和1号是同一个堆块 修改1号堆块内容 调用show(0)触发攻击 通用攻击技巧总结 栈溢出利用 : 注意canary泄露 栈迁移技术 ret2libc构造 堆漏洞利用 : UAF漏洞利用 fastbin attack 堆溢出修改关键数据 格式化字符串漏洞 : GOT表劫持 函数指针修改 shellcode构造 : 空间受限时的精简shellcode 寄存器状态分析 特殊技巧 : 通过控制rbp实现任意地址写入 利用判断逻辑触发后门函数