목록전체 글 (66)
ghkdtlwns987
//fastbin dup into stack #include #include #include int main(){ unsigned long long chunk_size = 0x21; unsigned long long * a = (unsigned long long*)malloc(8); unsigned long long * b = (unsigned long long*)malloc(8); printf("%p %p \n",a,b); free(b); free(a); unsigned long long * c = (unsigned long long*)malloc(8); printf("%p \n",c); *b = (unsigned long long)(((char *)&chunk_size) - sizeof(b)); un..
Heap 으로 Memory leak 하는 방법은 무엇일까? 그 방법은 여러가지가 존재한다. (포인터에 특정 함수의 GOT 를 넣어 출력되게 하거나, File * 를 활용하거나... 등등) 이번에 Heap Exploit 할때, 가장 많이 쓰이는 방법을 하나 소개하려 한다. small bin 이나 large bin 을 해제하게 되면 unsorted bin 에 들어가게 된다. unsorted bin 에 들어가게 된 chunk 는 FD, BK 에 main_arena 의 주소가 들어가게 되는데, main_arena 는 libc.so.6 라이브러리에 존재하는 구조체이기 때문에, libc_leak 이 가능해 진다. 다음은 드림핵에 나와있는 코드를 컴파일 했다. 내가 보여줄 환경은 glibc2.23 버젼이다. (gli..
UAF vs Double free Bug UAF(Use After free) 는 malloc() 하고 free() 했을때 , 또다시 동일 size를 malloc() 하게 되면 기존에 존재하던 heap 영역을 재사용 할 수 있다. 근데 만약 heap 에 포인터가 존재한다면 그 포인터를 system() 과 같은 주소로 덮게 되면 exploit 이 된다. 하지만 UAF 는 glibc2.23 이상은 막혔다. Double free Bug DFB는 free() 를 연속으로 하게되면 발생하는 버그이다. free(ptr1) free(ptr1) -> glibc 2.23 까지는 이와같이 free() 해도 무방했는데, 이제 더이상 위와같이 free()하게 되면 오류가 발생한다. free(ptr1) free(ptr2) fre..