123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include int main(){ fprintf(stderr, "이 파일은 fastbin_dup.c 의 확장이다.\n" "malloc을 속여서 포인터를 컨트롤 된 위치에 리턴한다.(이 경우, 스택이다.)\n"); unsigned long long stack_var; fprintf(stderr, "우리가 원하는 malloc()이 리턴하기 원하는 주소는 %p이다.\n", 8+(char *)&stack_var); fprintf(stderr, "3개의 버퍼를 할당합니다.\n"); int *a = malloc(8); int *b ..
123456789101112131415161718192021222324252627282930313233#include #include int main(){ fprintf(stderr, "이 파일은 fastbins 에서의 double-free 공격을 입증합니다.\n"); fprintf(stderr, "3개의 버퍼를 할당합니다.\n"); int *a = malloc(8); int *b = malloc(8); int *c = malloc(8); fprintf(stderr, "1st malloc(8): %p\n", a); fprintf(stderr, "2nd malloc(8): %p\n", b); fprintf(stderr, "3rd malloc(8): %p\n", c); fprintf(stderr, "첫번째 ..
first_fit.c1234567891011121314151617181920212223242526272829303132333435#include #include #include int main(){ fprintf(stderr, "이 파일은 공격에대한 증명을 하지는 않지만, glibc allocator의 특성을 보여줍니다.\n"); fprintf(stderr, "glibc는 free chunk를 선택하는데 first-fit 알고리즘을 사용합니다.\n"); fprintf(stderr, "만약 chunk가 free되고 충분이 그 크기가 크면, malloc은 이 chunk를 선택합니다.\n"); fprintf(stderr, "이것은 use-after-free 공격 상황이 될 수 있습니다.\n"); fprintf..