1. idea
topChunk의 size를 덮고 원하는 크기만큼 malloc해서 malloc이 특정 주소를 리턴하도록 하는 기법
* topChunk
- topChunk는 메모리의 마지막에 있는 특별한 chunk이다.
- malloc이 os에 더 많은 공간을 요구할 때 topChunk는 resize된다.
- topChunk 크기보다 작은 크기의 청크 요청 시 topChunk에서 chunk를 떼어주고,
topChunk 크기보다 더 큰 크기 요청 시 sbrk() 이용해 힙 영역을 확장해서 topChunk 사이즈를 키운 후 topChunk에서 떼어준다.
-topChunk에서 떼어주면 topChunk 주소는 현재 topChunk 주소 + 요청한 chunk 사이즈
-> topChunk 사이즈를 0xffffffffffffffff로 변조 후 특정 크기만큼 할당 시 topChunk의 주소는 요청한 사이즈에 상관없이 원하는만큼 청크 할당 가능
2. Exploit Plan
1) heap 영역 할당
2) top chunk의 사이즈 부분을 0xffffffffffffffff으로 덮어쓴다.
3) malloc()의 인자값으로 다음과 같이 계산된 값 전달해 heap 메모리 할당
원하는 주소 – chunk 헤더 사이즈 – 현재 topChunk 주소
-> 계산 값이 음수여도 상관없다. (2의 보수 표현으로 음수가 되므로 음수만큼 할당 후 topCHunk 주소가 내려가기 때문)
=> 청크의 bk 위치에 원하는 주소받게 된다.
4) malloc() 호출
- 공격자가 할당받기 원하는 영역 할당
3. example code
[Heap Exploitation] Overlapping chunks (0) | 2020.01.17 |
---|---|
[Heap Exploitation] The House of Lore (0) | 2020.01.15 |
[Heap exploitation] Unsorted Bin Attack (0) | 2020.01.09 |
[Heap Exploitation] unsafe unlink (0) | 2020.01.05 |
[Heap Exploitation] fastbin_dup_consolidate (0) | 2020.01.01 |