【学习记录】Week15(一):从 ret2win 到 ret2libc+ROP——综合实战的热身序曲
写在前面欢迎进入 Week15 的综合实战训练在过去的四周里我们系统学习了堆利用Week11-12、IO_FILE 机制Week13、信息泄露与 ORWWeek14等高阶技术。本周我们将把这些技术融合贯通通过每日两道综合题的实战演练锤炼出真正在赛场上拿分的能力。今天作为热身我们将回顾并深化两种最基础但至关重要的 ROP 技术ret2win与ret2libc。它们是所有高级利用链的基石熟练掌握它们才能在复杂题目中快速构建出稳定的利用框架。 目录ROP 技术核心回顾与热身ret2win最直接的返回劫持ret2libc绕过 NX 的经典艺术综合实战思维从单一技术到组合拳总结与下篇预告1. ROP 技术核心回顾与热身返回导向编程ROP的核心思想是在栈溢出的基础上通过利用程序中已有的、以ret指令结尾的代码片段来控制程序的执行流程csdn.net。这些代码片段被称为Gadgets。1.1 为什么需要 ROP现代操作系统普遍启用了NXNo-eXecute保护使得栈、堆等数据段内存不可执行。传统的注入 shellcode 并跳转执行的方式失效blog.csdn.net1。ROP 通过复用程序自身或已加载库如 libc中的可执行代码巧妙绕过了这一限制。1.2 ROP 链构造核心要素构建一个有效的 ROP 链需要三个核心要素要素说明获取方式Gadgets以ret结尾的指令序列用于控制寄存器或执行逻辑ROPgadget --binary ./pwn栈布局控制精确计算溢出偏移控制返回地址及后续参数GDB 调试pattern offset地址信息目标函数如system及字符串如/bin/sh的地址信息泄露GOT 表或已知 libc栈溢出漏洞计算溢出偏移寻找 Gadgets控制寄存器获取目标地址泄露或计算构造 ROP 链填充栈布局触发漏洞执行 ROP 链2. ret2win最直接的返回劫持ret2win是 ROP 技术中最简单直接的形式。其核心是程序中存在一个后门函数如system(/bin/sh)我们只需通过溢出覆盖返回地址直接跳转到该后门函数即可csdn.net1。2.1 利用条件与流程存在后门函数程序中存在如backdoor(),get_shell()等函数。栈溢出漏洞能够覆盖返回地址。无 Canary 或已绕过否则溢出会触发检测。利用流程# 伪代码示例 from pwn import * p process(./pwn) elf ELF(./pwn) win_addr elf.symbols[win] # 后门函数地址 offset 112 # 溢出偏移量 payload bA * offset p64(win_addr) p.sendline(payload) p.interactive()2.2 实战要点精确偏移使用cyclic或 GDB 的pattern精准计算偏移避免覆盖栈帧其他重要数据。栈对齐64 位程序中函数调用需 16 字节栈对齐。若system内部使用movaps等指令不对齐会导致段错误。可在返回地址前加一个retgadget 进行调整。参数传递若后门函数需要参数如system(/bin/sh)需在 64 位下通过pop rdi; retgadget 设置rdi寄存器指向/bin/sh字符串。3. ret2libc绕过 NX 的经典艺术当程序中没有后门函数但启用了 NX 保护时ret2libc是最经典的利用方式blog.csdn.net1。其核心是通过泄露 libc 中已执行函数的真实地址计算出system和/bin/sh的地址然后构造 ROP 链调用system(/bin/sh)。3.1 核心原理PLT 与 GOT 表PLTProcedure Linkage Table程序链接表存储跳转指令。第一次调用函数时通过 PLT 跳转到动态链接器解析函数地址tencent.com1。GOTGlobal Offset Table全局偏移表存储函数的真实地址。函数第一次被调用后其真实地址会被写入 GOT 表对应项tencent.com1。调用 putsplt第一次调用跳转到 dl_runtime_resolve解析 puts 真实地址写入 GOT 表后续调用直接从 GOT 表取地址执行攻击者泄露 GOT 表获取 puts 真实地址计算 libc 基址和 system 地址3.2 利用流程详解第一步泄露 libc 函数地址利用程序已有的输出函数如puts,write打印另一个函数如puts自身的 GOT 表地址从而获取其真实地址csdn.net1。# 32位示例泄露 puts 真实地址 puts_plt elf.plt[puts] # puts 的 PLT 地址 puts_got elf.got[puts] # puts 的 GOT 地址 main_addr elf.symbols[main] # main 函数地址用于返回 payload bA * offset p32(puts_plt) p32(main_addr) p32(puts_got) p.sendline(payload) puts_addr u32(p.recv(4)) # 接收并解析 puts 的真实地址第二步计算 libc 基址与目标地址利用已知函数的真实地址及其在 libc 中的偏移计算出 libc 的加载基址进而算出system和/bin/sh的地址csdn.net1。# 假设已知 puts 在 libc 中的偏移 libc_base puts_addr - libc.symbols[puts] system_addr libc_base libc.symbols[system] bin_sh_addr libc_base next(libc.search(b/bin/sh))第三步构造第二次溢出执行 system(“/bin/sh”)再次触发栈溢出跳转到system函数并将/bin/sh字符串地址作为参数传入csdn.net1。# 32位示例 payload2 bA * offset p32(system_addr) p32(0xdeadbeef) p32(bin_sh_addr) p.sendline(payload2)3.3 32位与64位差异对比特性32位64位参数传递通过栈传递前6个参数通过寄存器传递Gadget 需求主要控制 EIP需pop rdi; ret等控制寄存器栈布局函数地址→返回地址→参数函数地址→返回地址→需通过Gadget设置参数常见难点栈平衡栈对齐16字节64位 ret2libc 关键点需寻找pop rdi; retgadget 来设置第一个参数/bin/sh地址。注意栈对齐system内部可能要求 16 字节对齐。可使用one_gadget工具寻找满足条件的execve调用简化利用bilibili.com。# 64位示例使用 pop rdi; ret gadget pop_rdi 0x4011e3 # pop rdi; ret 的地址 bin_sh 0x402354 # /bin/sh 字符串地址 system 0x401040 # system 函数的 PLT 地址若已知 payload bA * offset p64(pop_rdi) p64(bin_sh) p64(system) p.sendline(payload)4. 综合实战思维从单一技术到组合拳在真实的 CTF 题目中利用往往不是单一技术而是多种技术的组合。以下是几种常见的组合思路4.1 ret2libc 栈迁移当溢出长度有限不足以放下完整 ROP 链时可通过栈迁移技术将栈指针转移到可控区域如 bss 段再在该区域布置完整的 ROP 链csdn.net。4.2 ret2libc 格式化字符串结合格式化字符串漏洞进行信息泄露获取 libc 地址再利用栈溢出构造 ret2libc 链。这种组合在无输出函数或输出受限的题目中非常有效csdn.net。4.3 ret2libc ORW当题目开启沙箱Seccomp禁用execve时ret2libc 失效。此时需结合 ORW 技术通过 ROP 链调用open、read、write系统调用读取 flag 文件csdn.net。4.4 ret2libc 堆漏洞利用堆漏洞如 UAF、Tcache Poisoning实现任意地址写劫持__free_hook或_IO_list_all结合 ret2libc 技术完成控制流劫持csdn.net。否是是否是否漏洞类型分析是否有沙箱?ret2libc: system/bin/shORW: open/read/write溢出空间足够?直接构造 ROP 链栈迁移 ROP 链是否有可写内存?构造 ORW ROP 链结合堆漏洞劫持 GOT/IO_FILEGetshellGet Flag5. 总结与下篇预告5.1 核心知识点总结ROP 是基石ret2win 和 ret2libc 是所有高级利用技术的根基必须熟练掌握。地址泄露是关键ret2libc 的核心在于通过 PLT/GOT 表泄露 libc 函数真实地址进而计算目标地址。版本差异要注意32位和64位在参数传递、栈布局、Gadget 需求上存在显著差异需针对性构造 ROP 链。组合思维破局复杂题目往往需要结合多种技术如栈迁移、格式化字符串、ORW单一技术难以奏效。5.2 下篇预告在下一篇中我们将进入漏洞组合实战的第一站fmtstr canary ROP结合格式化字符串泄露 Canary并绕过栈保护构造 ROP 链。off-by-one tcache利用单字节溢出破坏 Tcache 链表结构实现任意地址分配。将通过 BUUCTF 或 pwn.college 的真题演示如何从漏洞分析到完整 exp 构造的全过程。结语ret2win 和 ret2libc 就像是 PWN 选手的“起手式”看似简单却蕴含着控制流劫持的核心思想。当你能在任何题目中快速识别出这两种利用路径并灵活与其他技术组合时你就具备了攻克综合题的基础。本周的实战训练就从熟练掌握这两个基础开始。

相关新闻

Windows XP Home Edition重制版制作指南:集成更新与驱动注入

Windows XP Home Edition重制版制作指南:集成更新与驱动注入

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在整理旧电脑时,翻出了一台还能正常启动的“老古董”,上面运行着经典的 Windows XP Home Edition。出于怀…

2026/7/5 23:33:35阅读更多 →
游戏化机器人教育的多模态设计与实践

游戏化机器人教育的多模态设计与实践

1. 游戏化与机器人教育的融合现状分析 机器人教育作为STEM教育的重要载体,近年来呈现出与游戏化学习深度融合的趋势。通过对95项研究的系统梳理,我们发现当前实践主要呈现三种典型模式: 1.1 游戏化元素在机器人课堂的应用 在传统机器人编程…

2026/7/5 23:33:35阅读更多 →
手动部署的隐性成本:时间、质量、协作与机会的四大损耗

手动部署的隐性成本:时间、质量、协作与机会的四大损耗

1. 项目概述:当“点一下就上线”变成团队的慢性失血“手动部署”这四个字,听起来像老派工程师的勋章——熟悉服务器、能敲命令、敢改配置,仿佛自带一种手艺人式的踏实感。但过去三年,我带过六支不同规模的技术团队,从五…

2026/7/5 23:28:34阅读更多 →
WSL2 挂载 SMB 网络共享:3种方案对比与 2 个常见报错解决

WSL2 挂载 SMB 网络共享:3种方案对比与 2 个常见报错解决

WSL2 挂载 SMB 网络共享:3种方案对比与 2 个常见报错解决 对于在 Windows Subsystem for Linux 2 (WSL2) 环境下开发的用户来说,访问局域网内的共享文件夹或 NAS 存储是一个常见需求。本文将深入分析三种主流挂载方案的技术细节,并提供两个高…

2026/7/6 1:53:46阅读更多 →
SPSS 与 R 协同 PSM 分析:突破 1:1 限制实现 1:N 匹配的 4 步流程

SPSS 与 R 协同 PSM 分析:突破 1:1 限制实现 1:N 匹配的 4 步流程

SPSS 与 R 协同 PSM 分析:突破 1:1 限制实现 1:N 匹配的 4 步流程1. 理解 PSM 的核心逻辑与跨平台协作价值倾向性评分匹配(Propensity Score Matching, PSM)作为观察性研究中平衡混杂变量的黄金标准,其本质是通过构建一个"虚…

2026/7/6 1:53:46阅读更多 →
MySQL 8.0 Join 算法演进:Hash Join 对比 BNLJ 在 1亿 数据量下的性能跃迁

MySQL 8.0 Join 算法演进:Hash Join 对比 BNLJ 在 1亿 数据量下的性能跃迁

MySQL 8.0 Join 算法演进:Hash Join 对比 BNLJ 在 1亿数据量下的性能跃迁当数据规模突破1亿行时,数据库表连接操作的性能直接决定了业务系统的响应能力。MySQL 8.0引入的Hash Join算法与传统Block Nested-Loop Join(BNLJ)之间究竟…

2026/7/6 1:53:46阅读更多 →
MySQL Join 算法实战:从 10万 行数据实测看 INLJ、BNLJ 与 BKA 性能差异

MySQL Join 算法实战:从 10万 行数据实测看 INLJ、BNLJ 与 BKA 性能差异

MySQL Join 算法性能对决:10万行数据实测与深度调优指南引言在数据库查询优化领域,Join操作堪称性能优化的"分水岭"。当数据量突破10万行门槛时,不同Join算法的性能差异可能达到数量级之别。本文将通过实际测试数据,揭示…

2026/7/6 1:53:46阅读更多 →
SAP CKM3 成本组件分割价格取数:3个核心表CKMLHD/CKMLPRKEPH/CKMLPRKEKO关联逻辑详解

SAP CKM3 成本组件分割价格取数:3个核心表CKMLHD/CKMLPRKEPH/CKMLPRKEKO关联逻辑详解

SAP CKM3成本组件分割价格取数:核心表关联逻辑与实战解析 在SAP产品成本控制模块中,CKM3事务码作为物料成本分析的核心工具,其底层数据架构与取数逻辑直接影响成本分析的准确性与效率。本文将深入剖析CKMLHD、CKMLPRKEPH、CKMLPRKEKO三张关键…

2026/7/6 1:53:46阅读更多 →
高并发秒杀三大核心技术实战

高并发秒杀三大核心技术实战

在构建高并发秒杀系统时,确保系统在高流量冲击下仍能保持高性能、高可用和数据一致性是核心目标。经过对业界主流方案的梳理,可以提炼出三大核心技术支柱:原子性库存扣减、分布式锁防超卖、以及异步消息队列解耦。下面将结合具体技术实现和实…

2026/7/6 1:48:45阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →