Heap Allocation and Free 공부
해당 소스는 how2heap 문서에 있는 first_fit.c 의 소스이다. 해당 소스로 배울 수 있는 것들이 많아서 블로그에 정리하게 되었다.
-m32 옵션을 사용해서 컴파일 후 실행해보면, 다음과 같은 결과값을 볼 수 있다.
This file doesn't demonstrate an attack, but shows the nature of glibc's allocator.
glibc uses a first-fit algorithm to select a free chunk.
If a chunk is free and large enough, malloc will select this chunk.
This can be exploited in a use-after-free situation.
Allocating 2 buffers. They can be large, don't have to be fastbin.
1st malloc(512): 0x97a4008
2nd malloc(256): 0x97a4210
we could continue mallocing here...
now let's put a string at a that we can read later "this is A!"
first allocation 0x97a4008 points to this is A!
Freeing the first one...
We don't need to free anything again. As long as we allocate less than 512, it will end up at 0x97a4008
So, let's allocate 500 bytes
3rd malloc(500): 0x97a4008
And put a different string here, "this is C!"
3rd allocation 0x97a4008 points to this is C!
first allocation 0x97a4008 points to this is C!
If we reuse the first allocation, it now holds the data from the third allocation.
일단 a가 가르키는 주소와 b가 가르키는 주소의 차이가 520byte이기 때문에 heap chunk가 8byte라는 것을 알 수 있다. heap chunk 에는 fd, bk 값이 Linked List 형식으로 들어간다. Linked List 형식이기 전 heap 공간과 뒤 heap 공간의 bk, fd가 각각 바뀌게 된다.
두 번째로 알 수 있는 사실은 free 한 후, free한 공간보다 작은 공간을 다시 할당하려 할 때 free했던 공간을 사용한다는 것이다. (해당 사실을 c로부터 알 수 있다. a에 할당한 주소가 c에 할당된 것을 볼 수 있다.
'Hacking > Pwn.' 카테고리의 다른 글
pwntools 사용 팁 (0) | 2018.04.09 |
---|---|
Codegate 2018 quals Cat Shop Write up (0) | 2018.04.08 |
Meltdown, Spectre 정리 (0) | 2018.01.16 |
심볼 없을 때 gdb 디버깅 (0) | 2017.12.14 |
gdb에서 no debugging symbols found라고 뜰 때 (0) | 2017.10.06 |