how2heap
[how2heap] house_of_spirit
Indexhouse_of_spirit.c (glibc 2.23)Analyze with GDBtcache house of spirit (glibc 2.26~)house of spirit 기법에 대해 정리해볼 것이다. 이 기법은 fastbin chunk 크기의 fake cunk를 해제하여 bin에 삽입하는 공격이다. house_of_spirit.c (glibc 2.23)#include #include int main() { fprintf(stderr, "This file demonstrates the house of spirit attack.\n"); fprintf(stderr, "Calling malloc() once so that it sets up its memory.\n"); malloc(1); fp..
[how2heap] unsafe_unlink
Indexunsafe_unlinkunsafe_unlink.cunlink 매크로 함수 분석_int_free 함수 예제 코드(unsafe_unlink.c) GDB 분석Reference💡환경 : ubuntu 16.04 (glibc 2.23) unsafe_unlink이 기법은 fake chunk와 인접한 chunk가 병합이 일어나면서, 비정상적인 unlink가 발생하는 취약점이다. 사용 조건으로는 2개의 allocated chunk가 필요하고, 앞 chunk에서 힙 오버플로우가 발생해야 한다. 또한, 힙 영역을 전역변수에서 관리해야 한다. unsafe_unlink.c#include #include #include #include #include uint64_t *chunk0_ptr; int main() { se..
[how2heap] fastbin_dup_consolidate
환경 : ubuntu 16.04 (glibc 2.23)fastbin_dup_consolidatefastbin의 consolidate 하는 과정을 통해 malloc.c _int_free 함수의 double free 검증을 우회한다. 따라서, 동일한 chunk를 두번 할당 받을 수 있다. fastbin_dup_consolidate.c#include #include #include int main(void) { void* p1 = malloc(0x40); void* p2 = malloc(0x40); fprintf(stderr, "Allocated two fastbin: p1=%p p2=%p\n", p1, p2); fprintf(stderr, "Now free p1!\n"); free(p1); void* p3 ..
[how2heap] fastbin_dup_into_stack
https://github.com/shellphish/how2heap환경 : ubuntu 16.04 (glibc 2.23) fastbin_dup_into_stack.c#include #include int main() { fprintf(stderr, "This file extends on fastbin_dup.c by tricking malloc into\n" "returning a pointer to a controlled location (in this case, the stack).\n"); unsigned long long stack_var; fprintf(stderr, "The address we want malloc() to return is %p.\n", 8+(char *)&stack_var..
[how2heap] fastbin_dup
https://github.com/shellphish/how2heaptcache가 없는 glibc 2.23 (ubuntu 16.04) 버전으로 실습을 진행했다. fastbin_dup.c#include #include #include int main() { fprintf(stderr, "This file demonstrates a simple double-free attack with fastbins.\n"); fprintf(stderr, "Allocating 3 buffers.\n"); int *a = malloc(8); int *b = malloc(8); int *c = malloc(8); fprintf(stderr, "1st malloc(8): %p\n", a); fprintf(stderr, "2nd..
[how2heap] first_fit
https://github.com/shellphish/how2heaphow2heap을 따라 heap에 대한 공부에 입문하고자 한다.glibc 버전 별로 크로스 컴파일을 해주기 때문에, 원하는 버전을 빠르고 쉽게 분석해볼 수 있다.먼저, github에서 코드를 clone 받고, make를 통해 컴파일을 하자. git clone https://github.com/shellphish/how2heap cd how2heap && make 다음과 같이 파일이 구성된다. 공부 순서는 github README.md 파일에 있는 파일 순서대로 분석할 예정이다. first_fit.c#include #include #include int main() { fprintf(stderr, "This file doesn't demo..