新闻详情

新闻详情

首页 / 资讯中心 / 详情

图解原理:3个步骤搞定缓冲区溢出教程实战

发布时间:2026/11/4 22:24:43来源:尧图网络
图解原理:3个步骤搞定缓冲区溢出教程实战
图解原理:3个步骤搞定缓冲区溢出教程实战 版本升级后 API 全变了,你是不是也对着新文档抓耳挠腮?别慌,这篇缓冲区溢出教程不玩虚的,直接上图解原理和可运行代码。 项目目标:从零搭建可控溢出演示环境 很多应届生面试被问“怎么构造一个可控的缓冲区溢出”,脑子里一片空白。其实核心就三点:可控输入、已知布局、可观察崩溃。我们不用真实系统,用 Python + C 搭建一个最小化靶场,重点不是“黑进系统”,而是理解栈帧结构、返回地址覆盖机制,以及为什么现代系统要加栈保护(Stack Canary)。 本项目目标明确:用 C 写一个 vulnerable 函数,接收用户输入 用 Python 脚本生成精确长度的 payload 通过 GDB 观察寄存器变化,确认返回地址被覆盖 对比开启/关闭 -fstack-protector 的行为差异这不是玩具,而是复现 CTF 题目和面试手写题的标准流程。官方文档如 GCC 的 man gcc 中明确说明 -fstack-protector 会在栈帧插入 canary 值,这正是我们后续要“绕过”的对象。 目录结构:最小化可复现工程 buffer-overflow-lab/ ├── src/ │ ├── vuln.c # 含漏洞的 C 程序 │ └── main.c # 调用入口 ├── exploit.py # Payload 生成器 ├── run.sh # 一键编译+运行脚本 └── README.md所有文件都控制在 50 行以内,确保你能在 10 分钟内跑通。vuln.c 是核心,exploit.py 负责计算偏移,run.sh 自动化编译参数。 核心代码实现:逐行拆解 vulnerable 函数 先看 C 端,这是整个教程的根基: // src/vuln.c #include stdio.h #include string.hvoid vulnerable() {char buffer[16]; // 栈上分配 16 字节缓冲区gets(buffer); // 无边界检查,经典漏洞点printf(Input: %s\n, buffer); }int main() {printf(Enter input: );vulnerable();printf(Back to main\n); // 若返回地址被覆盖,这里不会执行return 0; }关键行解析:char buffer[16]:栈帧中固定大小区域,编译器不会自动检查写入长度 gets(buffer):C89 标准函数,无任何长度限制,已被 C11 标记为危险,但教学中仍常用因其行为最纯粹 printf(Back to main\n):验证函数是否正常返回。若 payload 覆盖了返回地址,程序会跳转到非法地址崩溃注意:gets 在较新 GCC 版本中默认禁用,需加 -D_FORTIFY_SOURCE=0 或改用 read(0, buffer, 999)。我们在 run.sh 中统一处理。 运行与测试:GDB 观察栈帧变化 先编译,必须关闭栈保护: # run.sh gcc -o vuln src/main.c src/vuln.c \-fno-stack-protector \-z execstack \-no-pie参数说明:-fno-stack-protector:禁用 canary,否则溢出会先触发 SIGABRT 而非跳转 -z execstack:允许栈可执行(实际 exploit 中不一定需要,但避免某些平台拦截) -no-pie:禁用位置无关执行,使地址固定,便于计算偏移用 GDB 加载: gdb ./vuln (gdb) break main (gdb) run输入 20 个 A,观察栈: (gdb) x/16xw $esp你会看到 buffer 起始地址,返回地址通常在 buffer 之后 16 字节(取决于编译器对齐)。用 exploit.py 精确定位: # exploit.py import sys# 假设 offset=20(需根据 GDB 实测调整) OFFSET = 20 TARGET_ADDR = 0xdeadbeef # 假地址,用于验证跳转payload = b'A' * OFFSET payload += TARGET_ADDR.to_bytes(4, 'little') # 小端序 sys.stdout.buffer.write(payload)运行 python3 exploit.py | ./vuln,若 GDB 显示 $eip = 0xdeadbeef,说明返回地址已被覆盖。这就是缓冲区溢出的本质:用数据区写入覆盖控制流。 优化扩展:应对现代防护机制 真实系统不会让你这么轻松。我们扩展三种常见防护: 1. 栈保护(Stack Canary) 重新编译时去掉 -fno-stack-protector,输入超长数据会触发: *** stack smashing detected ***: terminated原理:编译器在 buffer 后插入随机 canary,返回前检查其完整性。绕过方法:泄露 canary 值(需配合格式化字符串漏洞等),但超出本文范围。 2. ASLR(地址空间布局随机化) 每次运行 vuln,main 地址不同。解决:使用 readelf -s vuln 找 PLT 表固定符号 或找 ret 指令地址实现 ROP(Return-Oriented Programming)3. NX(不可执行栈) -z execstack 关闭后,即使跳转成功,若目标地址无代码权限仍会崩溃。此时需 shellcode 放在 .data 段或用 ROP 链。 面试高频追问: “如果开启所有防护,还能溢出吗?” 答:能,但需组合漏洞(如 info leak + ROP)。纯栈溢出在现代系统上已难独立利用,但原理仍是理解内存安全的基础。 小结:从教程到面试的衔接 这套缓冲区溢出教程没有教你“黑客技术”,而是拆解了栈帧布局、返回地址机制、防护原理。面试官问“什么是缓冲区溢出”,你该答:定义:写入超过分配空间,覆盖相邻内存 危害:可篡改返回地址,劫持控制流 防护:canary、ASLR、NX、SafeLibC这个知识点你面试被问过吗?留言说说你当时怎么答的,或者卡在哪个环节。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉