1. 整数溢出漏洞的攻防世界入门
第一次在CTF比赛中遇到整数溢出漏洞时,我盯着那个看似无害的输入框发了半小时呆。这个名为int_overflow的题目就像一扇通往二进制安全新世界的大门,后来我才知道,这是每个PWN手成长的必经之路。
整数溢出(Integer Overflow)本质上是计算机对数字理解的"认知偏差"。当变量存储的数值超过其数据类型所能表示的范围时,就会发生高位截断,就像用500ml的杯子接1L的水,多出来的部分会悄无声息地消失。这种特性在系统安全领域可能引发权限绕过、内存破坏等严重后果,在CTF赛题中则常被设计成关键突破口。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 漏洞原理深度解析
2.1 数据类型的边界陷阱
以32位系统为例,常见整数类型的表示范围如下表所示:
| 数据类型 | 字节数 | 表示范围 |
|---|---|---|
| int (有符号) | 4 | -2,147,483,648 ~ 2,147,483,647 |
| unsigned int | 4 | 0 ~ 4,294,967,295 |
| short | 2 | -32,768 ~ 32,767 |
| unsigned short | 2 | 0 ~ 65,535 |
当运算结果超过最大值时,会发生上溢(overflow);低于最小值时则发生下溢(underflow)。例如:
c复制unsigned short a = 65535;
a += 1; // 实际值变为0
2.2 典型漏洞场景分析
在CTF题目中,整数溢出常出现在以下三种场景:
- 内存分配计算:
malloc(size * count)中若size和count可控 - 数组索引计算:
buffer[index]中index经过运算后越界 - 长度校验绕过:输入长度检查时发生溢出导致校验失效
