엄범


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
unsorted bin attack  (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