XCTF-guess_num釜底抽薪式Pwn:我预判了你的预判,猜数字游戏?我直接看剧本!
💡
原文中文,约7600字,阅读约需19分钟。
📝
内容提要
本文分析了一个CTF题目,探讨了通过gets函数引发的栈溢出漏洞,利用Canary机制构造payload以控制随机数种子,从而猜测正确数字并获取flag。
🎯
关键要点
- 本文分析了一个CTF题目,探讨了通过gets函数引发的栈溢出漏洞。
- 题目来源为XCTF-Pwn-guess_num,分析了二进制文件的基本逻辑和保护措施。
- Canary机制是栈溢出保护机制,防止攻击者劫持程序流程。
- 要利用gets实现栈溢出,需要解决Canary的问题,可以通过泄露Canary值或不覆盖返回地址来绕过。
- 程序通过循环猜数字,猜对10次数字后可以获取flag。
- rand函数生成伪随机数,使用相同的种子可以得到相同的随机序列。
- 通过gets函数溢出数据到seed处,可以控制随机数生成的序列。
- 构造payload覆盖seed值为1,得到固定的随机序列以猜测数字。
- 成功构造本地和远程Poc,最终获取flag。
❓
延伸问答
XCTF-guess_num题目的主要漏洞是什么?
该题目的主要漏洞是通过gets函数引发的栈溢出漏洞。
Canary机制在这个CTF题目中起什么作用?
Canary机制用于防止攻击者劫持程序流程,保护返回地址不被覆盖。
如何通过控制随机数种子来猜测数字?
通过gets函数溢出数据到seed处,覆盖种子值为1,从而控制随机数生成的序列。
成功获取flag的条件是什么?
成功获取flag的条件是猜对10次数字。
如何构造payload以绕过Canary保护?
可以通过泄露Canary值或不覆盖返回地址的方式构造payload,达到绕过Canary的目的。
在这个CTF题目中,rand函数的作用是什么?
rand函数用于生成伪随机数,决定用户需要猜测的数字。
➡️