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