CTF PWN选手避坑指南:BUUCTF栈题中那些意想不到的变量覆盖技巧(以ciscn_2019_n_1为例)
1. 浮点数存储格式的隐秘陷阱
在传统的栈溢出利用中,我们往往关注如何覆盖返回地址或劫持控制流。但ciscn_2019_n_1这道题却展示了另一种精妙的攻击思路——通过精准覆盖相邻变量来绕过条件判断。这要求我们深入理解浮点数在内存中的存储机制。
IEEE 754标准规定单精度浮点数(32位)的存储格式为:
| 符号位(1bit) | 指数部分(8bit) | 尾数部分(23bit) |
以题目中的目标值11.28125为例:
- 十进制转二进制:11.28125 → 1011.01001
- 科学计数法:1.01101001 × 2³
- 符号位:0(正数)
- 指数部分:127 + 3 = 130 → 10000010
- 尾数部分:01101001000000000000000
- 最终16进制表示:0x41348000
内存布局验证表:
| 偏移量 | 变量名 | 类型 | 大小 | 关键性 |
|---|---|---|---|---|
| -0x30 | var_30 | char数组 | 44字节 | 输入缓冲区 |
| -0x4 | var_4 | float | 4字节 | 条件判断变量 |
2. 非常规解法实战剖析
2.1 传统ROP思路的局限性
常规

&spm=1001.2101.3001.5002&articleId=154385191&d=1&t=3&u=a666dbfc5ff74032882e6c808a5a051a)
1238

被折叠的 条评论
为什么被折叠?



