ghkdtlwns987
[Heap] Unsorted bin attack 본문
hitcon training lab14 를 푸려고했는데, 약간 부족한거 같아, 공부했던걸 약간 끄적여보려고 한다.
Unsorted bin 이란? -> 나중에 정리하겠지만, small bin 이나, large bin 이 free() 되었을 때 unsorted bin 에 거쳐
free() 되어진다.
1. unsorted bin 공격이란?
Unsorted bin 에 들어가고, free() 될 때 발생하는 unlink 과정에서 발생하는 취약점을 이용해
main_arena 영역의 주소를 특정 메모리에 저장하는 기법이다.
2. Exploit Senario
1) 2개의 heap을 할당
2) index 0 chunk 해제 -> (unlink 취약점 이용)
3) index 0 chunk 의 bk에 주소를 overwrite
(이는 unsorted bin 에 공부하면 알겠지만, fastbin 의 크기가 아닌 chunk 를 해제하게 되면 FD, BK 영역에 main_arena 의 주소가 써진다.) (+추가로 x64 에서는 정확성을 위해 &공격대상의 주소 - 0x10을 해주면 더욱 좋다고 한다.)
↑↑↑↑↑↑
이 부분에 대해 의문을 가질수 있는데, 이는 malloc.c 를 분석해 봐야 알 수 있다.
일일히 분석하는건 힘들기 때문에,
unsorted bin 코드를 조금 가져와 봤다.
이 코드에서 unlink 취약점 비슷한게 발생하는 코드이다. 내가 표시해 둔 곳을 보자.
이는 unsorted list 를 제거할 때 실행되는 코드인데,
remove 과정에서 bck->fd = unsorted_chunks(av) 를 통해
victim 의 변경된 bk 영역에 저장된 값을 bck 를 저장한다.
이로 인해 변경된 unsorted chunk의 bk 값 + 0x10 영역에 main_arena.top 주솟값 (main_arena + 88) 을 저장할 수 있다.
4) 1번째 free() 시켰던 크기의 heap 할당 -> 공격 대상 영역에 main_arena 영역의 주소가 저장된다.
'Heap Exploitation' 카테고리의 다른 글
UAF vs Double free Bug간단 정리 (0) | 2021.01.29 |
---|---|
[glibc2.23] Heap bins 정리 4 (largebin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리3 (smallbin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리 2 (Unsorted bin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리1 (fastbins) (0) | 2021.01.28 |