Pwnable/Tech

Heap - House of Lore

Kon4 2021. 10. 26. 14:24

House of Lore 은 smallbin크기의 힙이 존재할때 bck->fd를 조작하여 임의의 주소에 청크를 할당할 수 있는 공격 기법이다.

 

이는 할당을 원하는 영역에 Fack chunk를 구성하고 bck->fd를 조작할 수 있다면 원하는 주소에 "힙 청크를 할당" 할 수 있다.

 

but, 방지 코드인 bck->fd를 검증하는 코드가 존재한다.

//nb = request size..

if(in_smallbin_range(nb)){

  idx = smallbin_index(nb)

  bin = bin_at(av, idx)

  if(victim = last(bin) != bin){

   if(victim == 0){

     //consolidate(av)

     }else{

       bck = victim -> bk // bin->bk(victim)->bk

       if(glibc_unlikely(bck->fd != victim)) //victim -> (bk -> fd)

         //errout

    }

  }

}

핵심 코드는 위와 같다.

위 조건들을 만족하면 bin -> bk = bck; bck -> fd = bin 코드가 실행되면서 임의의 주소에 힙을 할당 가능.

bin -> bk = bin -> bk -> bk

bin -> bk -> (bk -> fd) = bin

 

a|b|bin

a|a|bin

a|bin|bin

 

 

Fake chunck로

Fake Chunck -- smallbin -- Fake Chunk2

형태로 우회

 

스택에 힙청크 할당.

이는 힙에 입력하는 값을 통해 BOF를 일으켜, 시스템의 쉘을 딸 수 있다.