엄범


The House of Spirit

stack overflowstack에 있는 포인터 변수 hptr을 `` fake_chunk`` addr로 overwrite.

이후 ``c free(hptr)``하면 fastbin에는 ``c fake_chunk`` addr이 추가되므로, 그 다음 반환 chunk는 `` fake_chunk``


```c

/* set fake_chunk */

fake_chunk[1] = arbitrary_size;

/* set next chunk size */

...


void *hptr = malloc(SIZE);

char buf[4];

strcpy(buf, argv[1]);     // stack overflow


free(hptr)          // fake chunk is added in fastbin

fake = malloc(SIZE) // return fake chunk

```


[free] MINSIZE check

``c fake_chunk->size`` 채워주어야 한다.


[free] next size check (fast)

일반적인 경우 top chunk size가 존재하기 때문에 알아서 pass하지만, `` fake_chunk``는 그렇지 못하기 때문에

반드시 fake_chunk 뒤쪽에 next chunk의 size field를 넣어주어야 한다.

이 check만 통과하면 되므로 fake chunk's size와 같을 필요는 없으며 알맞은 위치에 size만 넣어주면 된다.


'Security > System Exploit' 카테고리의 다른 글

The House of Lore  (0) 2017.08.15
fastbin attack / fastbin_dup  (0) 2017.08.15
The House of Spirit  (0) 2017.08.15
Poison null byte  (0) 2017.08.15
overlapping chunk  (0) 2017.08.15
one_gadget / libc-database  (0) 2017.08.13