unsorted bin attack
https://github.com/shellphish/how2heap/blob/master/unsorted_bin_attack.c
unsorted bin에 있는 chunk가 할당될 때, 역시 unsorted bin에서 chunk를 제거하기 위해 unlink가 일어난다.
단, 여기서는 unlink macro를 사용하지 않고 처리한다.
[malloc] unsorted bin size check [malloc] unsorted bin unlink
```c
for (;; )
{
int iters = 0;
while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))
{
bck = victim->bk;
if (__builtin_expect (chunksize_nomask (victim) <= 2 * SIZE_SZ, 0)
|| __builtin_expect (chunksize_nomask (victim)
> av->system_mem, 0))
malloc_printerr (check_action, "malloc(): memory corruption",
chunk2mem (victim), av);
size = chunksize (victim);
......
/* remove from unsorted list */
unsorted_chunks (av)->bk = bck; // bck == victim->bk == &stack_var - 2
bck->fd = unsorted_chunks (av); // (&stack_var - 2)->fd == stack_var
......
```
결과적으로 ``c stack_var = &av->bins[0]`` 가 대입된다.
size check를 제외하면 별 다른 check가 없기 때문에 unlink처럼 ``c victim->fd/bk`` 값을 컨트롤하지 않아도 돼서
해당 영역의 `` fd/bk`` 컨트롤 가능 여부에 관계없이 아무데나 `` victim``을 설정할 수 있지만,
쓰게 되는 값은 ``c &av->bins[0]``으로 고정이라는 점이 큰 단점이다.
따라서, 주로 `` global_max_fast`` 같은 설정 변수를 큰 값으로 변경하고자 할 때 사용하게 된다.
'Security > System Exploit' 카테고리의 다른 글
The House of Force (0) | 2017.08.15 |
---|---|
[UNDEAD] The House of Mind (0) | 2017.08.15 |
[UNDEAD] unlink (0) | 2017.08.15 |
The House of Lore (0) | 2017.08.15 |
fastbin attack / fastbin_dup (0) | 2017.08.15 |