Heap - House of Lore
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를 일으켜, 시스템의 쉘을 딸 수 있다.