본문 바로가기

DreamHack: System Hacking/F Stage 12

(4)
tcache_dup2 소스코드 및 보호 기법 Partial RELRO가 적용돼있으니 tcache_dup과 마찬가지로 GOT overwrite 공격을 고려해볼 수 있겠다. 소스코드에 청크의 데이터를 출력해주는 코드가 없으므로 libc base를 구하기 어려워 hook overwrite는 힘들고, while(1)을 통해 무한반복문을 돌기 때문에 bof를 통한 공격도 어렵다. #include #include #include #include char *ptr[7]; void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); } void create_heap(int idx) { size_t size; if (idx >= 7) exit(0)..
tcache_dup 소스코드 및 보호 기법 Partial RELRO가 적용돼있으니 GOT overwrite, hook overwrite 등등을 고려해볼 수 있겠다. while(1)을 통해 반복문이 무한 반복되므로 bof를 이용한 공격은 현실적으로 어렵다. // gcc -o tcache_dup tcache_dup.c -no-pie #include #include #include #include char *ptr[10]; void alarm_handler() { exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int cr..
Tcache Poisoning Tcache Poisoning Tcache Poisoning은 free list에 중복되어 있는 청크를 재할당하면, 해당 청크가 해제된 청크임과 동시에 할당된 청크라는 점을 악용하여 원하는 주소에 청크를 할당하고, 원하는 주소에 할당된 청크를 통해 원하는 주소의 값을 읽거나 원하는 주소의 값을 overwrite 시킬 수 있는 기법이다. 소스코드 및 보호 기법 -Full RELRO와 NX가 적용되어 있으니, hook overwrite를 고려해볼 수 있겠다. 소스코드에서 while(1)을 통해 반복문이 무한 반복되므로 bof를 통한 공격은 현실적으로 어렵다. #include #include #include int main() { void *chunk = NULL; unsigned int size; int i..
tcache의 구조 및 함수들의 동작 & Double Free Bug 개요 Double Free Bug & Duplicated Free List의 정의 -Double Free Bug란 임의의 청크를 두 번 혹은 그 이상 free 시킬 수 있는 버그를 뜻한다. -Duplicated Free List란 free list(tcache 또는 bins)에 임의의 청크가 중복해서 들어있는 것을 뜻한다. -Double Free Bug를 통해 duplicated free list를 만들 수 있다면 우리는 임의의 청크를 우리가 원하는 주소에 할당하여 그 청크를 통해 그 주소에 있는 데이터 값을 읽거나, overwrite 할 수 있게 된다. *Double Free Bug가 발생하는 가장 주된 이유는 바로 Stage 11에서 언급됐던 Dangling Pointer 때문이다. 이 글에서는 tcach..