제목 그대로 unsorted bin 을 통해서 하는 libc leak 없이 진행될수 있는 fastbin duplicate다. 간단하게 got에도 libc 주소가 0x7f~~꼴로 들어가니까 이걸 써서 할수도 있는데, 지금 해볼건 조금 다른거다. 다음같은 조건이 있을경우 써먹을 수 있다. 1. bss영역에 heap pointer가 존재할것.2. view메뉴가 있을것 ( 상황에 따라 생략 가능 )3. bss에 stdin, stdout 중 하나가 있을것4. Heap edit가 가능할것 이 4가지만 있으면 간단하게 fastbin duplicate가 가능하다. bss에는 보통 stdin, stdout이 있는데, 이건 libc영역에 존재하는것이라, 0x7f~~꼴의 주소를 가지게 된다. 이를 이용해서 이부분에 fake..
만약 Free된 청크를 Realloc 시킨다면 어떻게 될까. 만약 저장되는 bin 이 바뀐다면, realloc 시 DFB가 터지게 된다. 하지만, 이런코드에서는 다음같이, Free된 같은 주소를 받아낼 수 있다. 이말은 Fastbin일경우 Free된 fd를 control이 가능하단 얘기이다 (grin)~
사실 이게 realloc.c 인줄았는데, 그냥 Implementation을 설명하기 위한 코드였다.... 실제 코드는 https://code.woboq.org/userspace/glibc/malloc/malloc.c.html#_int_realloc 여기 있는거 같다. 다음에 시간내서 분석해봐야겠다
https://github.com/juckchang/heap_exploit 정리중
Fastbin dup consolidate 1. fastbin size의 heap1, heap2를 할당 2. heap1를 free 3. largebin size의 heap3 할당 (malloc_consolidate) 4. heap1를 free (DFB) 5. 그 후 malloc 2번은 heap1의 주소로 할당됨 heap1를 free 한후 largebin size의 heap을 할당하면 malloc_consolidate가 호출되면서 free되었던 heap1이 unsorted bin 으로 이동하게 된다. 따라서 fast-top에는 heap1이 없어짐으로 heap1을 한번더 free할 수 있다. 그 후 malloc 2번은 각각 fastbin, unsorted bin 에서 주소를 꺼내오면서 Duplicate가 된다.
굳이 fastbin dup 을 해야지만 원하는 영역에 할당 받을 수 있는건 아니다. fastbin dup 을 제대로 이해했으면 다 알법 하지만 그래도 알아도 상황에 맞춰서 써먹기 힘든거 같아서,,, 좀 적어보겠다 Free 되어 fastbin 에 들어간 chunk 의 fd 를 조작할 수 있으면 굳이 duplicate 시키지 않아도 된다. 이 fd 를 조작할 수 없을경우, duplicate 시켜서 fd 를 조작할 수 있게 하는거다. 따라서 임의쓰기가 있고, heap address 를 leak 가능하다면, 굳이 duplicate 시키지 않고, free 시킨다음 직접적으로 fd 를 조작해 주는걸로 끝낼 수 있다. 막 내가 임의로 넣을 수 있는 값이 fd 영역에 들어가지 않는다던가 그런식일때 임의쓰기랑 연결해서 ..
overflow 로 Top chunk 사이즈 주작치고 더큰걸 할당하면 sysmalloc 으로 인해 Top chunk 가 free 된다.