
다양한 힙 익스플로잇 기법을 학습하기 위한 저장소입니다.
이 저장소는 다양한 힙 익스플로잇 기법을 학습하기 위한 것입니다.
우리는 Ubuntu의 Libc 릴리스를 기준으로 삼습니다. 각 기법은 해당 Ubuntu 릴리스에서 동작하는 것을 검증했습니다.
Debian 계열 운영 체제에서 apt source libc6를 실행하여 사용 중인 Libc의 소스 코드를 다운로드할 수 있습니다. 또한 ▶️를 클릭하면 브라우저에서 gdb를 사용하여 기법을 디버깅할 수 있습니다.
우리는 해킹 미팅 중에 이 아이디어를 떠올렸고, 다음과 같은 기법들을 구현했습니다:
| 파일 | ▶️ | 기법 | Glibc 버전 | 패치 | 적용 가능한 CTF 챌린지 |
|---|---|---|---|---|---|
| first_fit.c | glibc malloc의 first-fit 동작을 시연합니다. | ||||
| calc_tcache_idx.c | glibc의 tcache 인덱스 계산을 시연합니다. | ||||
| fastbin_dup.c | ▶️ | fastbin freelist를 악용하여 malloc이 이미 할당된 힙 포인터를 반환하도록 속입니다. | < 2.43 | patch | |
| fastbin_dup_into_stack.c | ▶️ | fastbin freelist를 악용하여 malloc이 거의 임의의 포인터를 반환하도록 속입니다. | < 2.43 | patch | 9447-search-engine, 0ctf 2017-babyheap |
| fastbin_dup_consolidate.c | ▶️ | fastbin freelist와 top chunk 모두에 포인터를 배치하여 malloc이 이미 할당된 힙 포인터를 반환하도록 속입니다. | < 2.43 | patch | Hitcon 2016 SleepyHolder |
| unsafe_unlink.c | ▶️ | 손상된 청크에 대한 free를 악용하여 임의 쓰기를 수행합니다. | latest | HITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots | |
| house_of_spirit.c | ▶️ | 가짜 fastbin 청크를 해제하여 malloc이 거의 임의의 포인터를 반환하도록 합니다. | latest | hack.lu CTF 2014-OREO | |
| poison_null_byte.c | ▶️ | 단일 널 바이트 오버플로를 악용합니다. | latest | PlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote | |
| house_of_lore.c | ▶️ | smallbin freelist를 악용하여 malloc이 거의 임의의 포인터를 반환하도록 속입니다. | latest | ||
| overlapping_chunks.c | ▶️ | 새 할당이 기존 청크와 겹치도록 unsorted bin에 있는 해제된 청크 크기의 덮어쓰기를 악용합니다. | < 2.29 | patch | hack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap |
| overlapping_chunks_2.c | ▶️ | 새 할당이 기존 청크와 겹치도록 사용 중인 청크 크기의 덮어쓰기를 악용합니다. | < 2.29 | patch | |
| mmap_overlapping_chunks.c | 새 할당이 현재 mmap 청크와 겹치도록 사용 중인 mmap 청크를 악용합니다. | latest | |||
| house_of_force.c | ▶️ | malloc이 거의 임의의 포인터를 반환하도록 Top Chunk (Wilderness) 헤더를 악용합니다. | < 2.29 | patch | Boston Key Party 2016-cookbook, BCTF 2016-bcloud |
| unsorted_bin_into_stack.c | ▶️ | 거의 임의의 포인터를 반환하도록 unsorted bin freelist에 있는 해제된 청크의 덮어쓰기를 악용합니다. | < 2.29 | patch | |
| unsorted_bin_attack.c | ▶️ | 임의 주소에 큰 값을 쓰기 위해 unsorted bin freelist에 있는 해제된 청크의 덮어쓰기를 악용합니다. | < 2.29 | patch | 0ctf 2016-zerostorage |
| large_bin_attack.c | ▶️ | 임의 주소에 큰 값을 쓰기 위해 large bin freelist에 있는 해제된 청크의 덮어쓰기를 악용합니다. | < 2.42 | patch | 0ctf 2018-heapstorm2 |