整数溢出



这里的0 ~ 0x7fffffff就是 0~2147483647 ,
0x80000000 ~ 0xffffffff就是 -2147483648 ~ -1
from pwn import * |
这道题涉及整数溢出漏洞利用,目标是通过输入特定数字触发gift()函数获取flag。以下是完整的解题步骤:
漏洞分析
- 关键代码:
printf(“Enter an unsigned integer: “);
_isoc99_scanf(“%u”, &v4); // 读取无符号整数
if (v4 == -1) // -1在无符号中等于4294967295
gift(); // 触发flag输出 - 整数溢出原理:
v4是unsigned int类型(4字节)-1在内存中被解释为无符号整数的最大值:0xFFFFFFFF(4294967295)- 输入
4294967295可使条件v4 == -1成立
- 防护机制:
Full RELRO | Canary | NX | PIE
虽然防护较强,但无需绕过这些保护,因为利用不涉及栈溢出
利用步骤
- 计算目标值:
4294967295 = 2³² - 1 = 0xFFFFFFFF - 触发gift函数:
- 当输入
4294967295时:
v4 = 4294967295 = 0xFFFFFFFF
v4 == -1 → True // 因为-1在无符号中就是0xFFFFFFFF - 执行
system("cat /ctfshow_flag")

- 当输入
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Rhea's Blog!
评论
