The House of Force
The House of Force
존내 큰 chunk를 할당해버린다!
top chunk size를 ``c -1``로 만들어 ``c mmap()`` 호출을 방지하고,
target addr이 있는 곳 까지의 차 만큼의 커다란 chunk를 할당하면
그 다음 ``c malloc()`` 때 target 위치에 chunk를 할당 및 반환하게 된다.
```c
*top_ptr = -1;
difference = (target_addr - 2*sizeof(void*)) - top_ptr;
malloc(difference); // target 직전 까지 할당
target = malloc(); // return chunk that contain target
```
`` target_addr``이 `` top_ptr`` 보다 위에 위치해 있을 때는 음수가 나오지만, 상관없다.
memory range를 넘어가는 크기의 chunk를 할당하는 것 자체는 어차피 size field에 그대로 넣어주고 포인터만 반환하면 끝이니까 fault가 발생할 여지가 없다.
``c malloc()``에 존재하는 size check는 모두 bins에 있는 chunk를 제공할 때 수행하는 check이므로, 커다란 chunk를 요청할 때 수행하는 check는 따로 없어 신경쓰지 않아도 된다.
limitation
top chunk size를 ``c -1``로 변경할 수 있어야 한다.
'Security > System Exploit' 카테고리의 다른 글
SROP (0) | 2017.08.17 |
---|---|
The House of Einherjar (0) | 2017.08.16 |
[UNDEAD] The House of Mind (0) | 2017.08.15 |
unsorted bin attack (0) | 2017.08.15 |
[UNDEAD] unlink (0) | 2017.08.15 |