pwn-64和32位ROP以及system与execve的差别

本文探讨了32位和64位ROP的调用约定差异,32位利用栈空间,64位则使用rdi寄存器。同时详细解释了system与execve的区别,execve是系统调用,会替换进程中的程序,而system是库函数,通过fork+execve+waitpid启动新进程,并因waitpid阻塞。system调用中,直接使用"/bin/sh"或通过环境变量"sh"均可启动shell。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### 64系统中的 `ret2text` 攻击原理 在64系统中,`ret2text` 是一种基于返回导向编程 (ROP) 技术的攻击形式。其核心思想是通过覆盖栈上的返回地址,使程序跳转到 `.text` 段中存在的可利用代码片段上执行特定操作[^3]。 #### 原理分析 `.text` 段通常包含了二进制文件的主要逻辑代码。如果目标 ELF 文件中存在某些可以直接被调用的功能性代码(例如 `system("/bin/sh")` 或其他敏感函数),那么攻击者可以通过精心构造输入数据来重定向程序流至这些代码置。 对于 64 系统而言,由于不再使用中断指令 (`int 0x80`) 调用系统服务,而是采用更高效的 `syscall` 指令完成系统调用请求,因此需要特别注意如何适配这种变化[^2]。 --- ### 实现方法 以下是实现 `ret2text` 攻击的具体过程: 1. **寻找可用 gadget** 使用工具如 `ropper` 或手动分析反汇编后的代码,定 `.text` 段内的有用 gadgets 功能代码块。例如查找是否存在类似于 `execve("/bin/sh", NULL, NULL)` 的实现路径或者能够间接帮助构建 shell 的序列[^4]。 2. **准备 payload 数据结构** 构造堆叠缓冲区溢出所需的恶意负载(payload),其中包含一系列指向所需 gadgets 地址的数据项以及最终要转向的目标代码入口点地址。考虑到现代保护机制的存在(比如 ASLR Address Space Layout Randomization),可能还需要额外的信息泄露手段辅助确定基址偏移量。 3. **绕过 NX bit 防护措施** 因为大部分操作系统默认启用了非执行内存页策略(NX Bit),所以单纯注入自定义 ShellCode 已经变得非常困难。而借助于现有的合法机器码(.text section),则完全规避了这个问题——因为这部分区域天然允许被执行。 4. **触发漏洞并控制 EIP/RIP 寄存器** 当成功诱导受害进程加载含有上述 Payload 的变量之后,一旦发生越界写入事件就会篡改当前帧指针(%rbp/%ebp)及其关联的下一条指令指针(%rip/%eip),从而达成预期效果:即让 CPU 开始按照预设顺序依次访问指定的置直至获得交互式的命令行界面为止[^1]。 下面是一个简单的 Python 脚本用于生成针对某假想脆弱应用程序的基础测试向量: ```python from pwn import * context.arch = 'amd64' elf = ELF('./vulnerable_binary') # Assume we know the offset to overwrite RIP and addresses of useful functions/gadgets. offset_to_rip = 40 target_function_addr = elf.symbols['useful_function'] # Example address from .text segment. payload = b'A' * offset_to_rip # Padding up to control RIP. payload += p64(target_function_addr) # Overwrite RIP with target function addr. print(payload) ``` 此脚本假设你知道确切的偏移量目标函数的实际物理存储置;实际场景可能会更加复杂一些,涉及更多细节调整优化等问题。 --- ### 注意事项 尽管本文描述的技术理论上可行,但在真实世界里实施起来往往面临诸多挑战,包括但不限于启用的各种防御特性(ASLR、Canaries Stack Guarding 等)。因此建议仅限学习研究用途,请勿非法滥用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值