ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • fastbin_dup_consolidate - how2heap
    Heap exploitation/how2heap 2020. 2. 17. 21:20

    Abstract


    fast chunk와 large chunk를 이용한 fastbin_dup 기법이다. 이름대로 청크 병합을 할 때 발생하는 취약점인데, 힙에서 병합이 일어나는 경우는 아래 두가지가 있다.

    1. prev_inuse비트가 해제된 청크를 해제했을 때 prev chunk와 병합 혹은 prev_inuse 비트가 해제된 청크의 앞으로 두번째 청크가 해제했을 때 그 뒤 청크와 병합한다. (해제하는 청크의 앞 혹은 뒤 청크가 해제된 경우)
    2. large chunk를 할당했을 때 fastbin chunk와 인접해있는 경우 fastbin chunk와 병합한다.

    위 2번째 상황에서 large chunk와 fastbin chunk가 인접해있지 않은 경우 fastbin chunk를 smallbin으로 이동한다 → fast bin에서 해제되고 fastbinsY[i]에 있던 경우 bins[2*(i+1)]에 들어가게 된다. (smallbin의 같은 인덱스) 이후 다음 fast chunk의 prev_inuse 비트가 해제된다.

     

    Exploit Flow


    1. 같은 크기의 fast chunk를  두개 생성한다.
    2. 첫번째 힙을 해제한다.
    3. large chunk 사이즈의 힙을 할당한다.
    4. 첫번째 힙을 다시 해제한다.
    5. 같은 크기로 다시 두번 할당받으면 같은 주소가 반환된다.

     

    Code


     

    두개의 힙을 생성한 후 힙 영역의 상태이다. 이제 첫번째 힙을 해제한다.

     

    fastbinsY[3]에 들어갔다. 이 상황에서 large chunk를 할당하면 이 청크가 smallbin으로 옮겨가면서 bins[8]에 들어가게 될 것이다.

     

    large chunk가 생성되었고, 첫번째 힙이 smallbin에 들어간 것을 확인할 수 있다.

     

    이제 fastbin에서 첫번째 청크가 사라졌기 때문에 다시 한번 해제할 수 있다.

     

    첫번째 청크가 fastbin으로 들어가면서 fd가 0으로 초기화 되었기 때문에 smallbiin에서 fd가 깨졌다. 여기서 한번 malloc을 하게 되면 fastbin에서 먼저 꺼내서 할당해준다.

     

    한번 더 할당을 하면 smallbin에서 반환해주며 할당이 끝난 뒤 smallbin은 정상적으로 복원된다.

     

     

     

    'Heap exploitation > how2heap' 카테고리의 다른 글

    House of Orange - how2heap  (0) 2020.02.26
    fastbin_dup_into_stack - how2heap  (0) 2020.02.17
    fastbin_dup - how2heap  (0) 2020.02.17

    댓글

Designed by Tistory.