您现在的位置是:百科 >>正文

什么是缓冲区溢出漏洞

百科9人已围观

简介```html 1988年11月2日,康奈尔大学研究生罗伯特·莫里斯在MIT的终端上敲下几行代码,释放了后来被称为“莫里斯蠕虫”的程序。这个不到100行的程序利用了一个叫fingerd服务里的漏洞—— ...

```html

1988年11月2日,什缓康奈尔大学研究生罗伯特·莫里斯在MIT的冲区终端上敲下几行代码,释放了后来被称为“莫里斯蠕虫”的溢出程序。这个不到100行的漏洞程序利用了一个叫fingerd服务里的漏洞——它从网络读取用户输入时,没有检查输入长度,什缓直接把数据塞进了一个固定大小的冲区缓冲区。结果呢?溢出蠕虫感染了大约6000台机器,占当时互联网总量的漏洞十分之一。莫里斯成了第一个因《计算机欺诈与滥用法》被定罪的什缓人。这个漏洞,冲区就是溢出缓冲区溢出。

缓冲区是漏洞什么?你可以把它理解成程序在内存里划出的一小块“储物格”,用来临时存放数据。什缓比如C语言里声明char buf[64];,冲区就是溢出告诉系统:给我64字节的连续空间。问题出在,C语言不帮你检查边界。你往这个格子里写数据,写多少它都收,多出来的部分就漫到隔壁去了。

隔壁住着谁?可能是别的变量,更危险的是——函数返回地址。程序调用函数时,会把“执行完这个函数后该回到哪里继续”这个地址压在栈上。如果攻击者精心构造一段超长输入,让溢出的数据恰好覆盖这个返回地址,改成指向自己注入的恶意代码,那函数执行完一“返回”,CPU就跳去执行攻击者的指令了。这就是最经典的栈溢出利用方式。

我见过一个教学演示,用strcpy把一个100字节的字符串拷进20字节的数组。编译时不报错,运行时前20字节正常,后面80字节直接糊在栈上。如果那80字节里藏着0x90909090...(x86的NOP指令)加上一段shellcode,再把返回地址改成指向NOP滑梯的起点,程序就彻底失控了。整个过程不需要什么魔法,就是内存布局的物理事实。

缓冲区溢出分好几类。栈溢出最常见,堆溢出更隐蔽但利用难度高,还有整数溢出导致的缓冲区分配不足——比如你算长度时用了unsigned short,输入长度65536被截断成0,程序以为不用分配空间,结果写入时直接冲垮内存。格式化字符串漏洞也能配合溢出使用,printf(user_input)这种写法让攻击者通过%n直接往任意地址写值。

防御手段这些年多了起来。栈保护(Stack Canary)在返回地址前放一个随机值,函数返回前检查它有没有被改,改了就直接崩。ASLR让内存地址随机化,攻击者猜不到该跳去哪。DEP/NX把栈标记为不可执行,注入的代码跑不起来。还有更彻底的,用Go、Rust这类内存安全语言,从编译层面杜绝这类问题。但C和C++依然统治着操作系统、嵌入式设备和大量遗留系统,所以缓冲区溢出至今没死透。

2014年OpenSSL的“心脏出血”漏洞,本质是memcpy时没检查长度,攻击者能读取服务器内存里最多64KB的数据,包括私钥。2021年Log4j的JNDI注入,虽然不完全是缓冲区溢出,但根源同样是输入验证缺失。每次出大事,翻到最后都是“没检查用户输入长度”这几个字。

写C代码的人有个习惯得改:永远别信输入。用fgets代替gets,用strncpy代替strcpy,用snprintf代替sprintf。编译器警告别忽略,-Wall -Wextra打开。静态分析工具跑起来,fuzzing测试喂各种畸形输入。这些不是银弹,但能挡住大部分低级错误。

缓冲区溢出说到底是信任问题——程序信任了不该信任的数据长度。内存不会说谎,你写多少它就放多少,多出来的部分总得有个去处。那个去处,往往就是攻击者的入口。

```

Tags:

相关文章

  • 怎么找一些能用的代理IP

    百科

    找代理IP这事儿,说白了就三个渠道:免费池子、付费服务、自建代理。每个渠道的水深浅不一样,我一个个说。 免费代理IP列表网站,比如Free Proxy List、ProxyScrape这些,看着挺诱人 ...

    【百科】

    阅读更多
  • 找房

    百科

    中介小王第三次打电话来的时候,我正蹲在出租屋的阳台上啃面包。他说有个一居室,朝南,月租三千二,问我下午能不能看房。我嚼着面包含混地应了,其实心里清楚,这个价位在四环内基本等于"有诈"。 看房约在下午四 ...

    【百科】

    阅读更多
  • 充值商户自行处理充值与商场无关

    百科

    充值商户自行处理充值与商场无关——这句话现在挂在不少商场收银台旁边,白纸黑字,还盖着红章。但真出了事,消费者找谁?去年冬天,我朋友老周在城西某商场二楼的儿童乐园充了三千块,办的是年卡。三个月后乐园关门 ...

    【百科】

    阅读更多


友情链接