system hacking/dreamhack(드림핵)

Double Free Bug

blackbearwow 2022. 5. 5. 13:03

free()로 메모리를 해제하면 ptmalloc2는 해제된 메모리를 tcache나 bins에 추가하여 관리한다.

tcache나 bins같은 free list에 같은 메모리가 중복되어 추가된다면, 청크가 duplicated되었다고 말한다.

 

duplicated free list를 이용하면 임의 주소에 청크를 할당할 수 있다.

double free 보호기법을 우회하여 duplicated free list를 만들 수 있다면, free list의 청크의 fd, bk값을 조정할 수 있다.

https://cyber0946.tistory.com/101 이미지

freed chunk에서의 fd, bk는 allocated chunk의 data이니 해당 값을 쓰기가 가능하다면 fd, bk조정이 가능하다.

 

1. double free 보호기법 우회

tcache 구조체는 일반 청크의 fd에 해당하는 next와 double free를 감지하는 key로 구성되어있다.

tcache리스트에 등록할 때는 key에 tcache값을 대입한다.

tcache리스트에 등록된 청크를 다시 할당받았을 때는 key에 NULL을 대입한다.

할당된 상태에서 key는 NULL, free되고 tcache리스트에 등록되어있을 때는 tcache이다.

key의 값이 tcache일때 해당 청크를 또 free한다면 double free가 detect되어 abort가 일어난다.

key의 값이 tcache가 아니게 만들면 double free가 가능한 것이다.

key값을 변조시켜 double free가 가능한 코드

 

'system hacking > dreamhack(드림핵)' 카테고리의 다른 글

tcache_dup  (0) 2022.05.16
Tcache Poisoning  (0) 2022.05.13
uaf_overwrite  (0) 2022.04.17
basic_exploitation_003  (0) 2022.04.06
basic_exploitation_002  (0) 2022.04.05