Tuuna Computer Science

[malloc] malloc & heap 찍어누르기 2탄(fastbin dup into stack) 본문

system hacking

[malloc] malloc & heap 찍어누르기 2탄(fastbin dup into stack)

GuTTe 2019. 7. 3. 23:05

malloc & heap 찍어누르기 2탄과 3탄은 트레이닝 바이너리 문제를 풀다가 unsortedbin을 통해 library leak과

fastbin을 통해 특정 메모리 할당에 대해 배운것을 정리할겸 작성

 

malloc을 통해 stack 공간 할당하기

 

 

기본적인 이론은 fastbin에 들어있는 chunk들은 병합을 하지 않으며 LIFO방식의 단일 연결리스트를 구성하고 있다. 

그리고 재할당시 최상위 chunk를 재할당하며 다음 재할당시 반환된 chunk의 fd값에 있는 chunk를 재할당하게 된다.

그럼 fd값을 조작할 수 있다면 조작된 fd값에 allocate가 된다.

일단 a와 b를 malloc을 통해 할당한다. 0은 8바이트로 취급된다. 

b와 a 순서대로 free한다. 

a와 b는 8바이트이므로 fastbin에 속하게 된다. 

단일 연결 리스트에속하게 되며 

a -> b -> ~ (LIFO 방식)

malloc요청시 LIFO방식에 따라 a가 재할당된다.  

그리고 b의 fd값에 원하는 스택영역의 주소값을 쓴다. 

그럼 malloc요청시 b의 청크가 재할당되고 다음 또 malloc요청시 b의 fd값에 있는 주소값을 재할당하게 된다. 

(현재는 free된 청크에 값을 쓰지만 실제 활용방안에선 a의 청크를 재할당되었을 때 overflow로 B의 청크를 건들이면 된다.) 

이때 중요한것은 malloc 요청시 요청한 size와 b의 fd값에 들어있는 (주소값 - 8byte)의 위치에 있는 size값이 

같아야 된다. 그래서 prev_size byte(8) + size(8 + 1) + fd(8) + bk(8) = > 0x21 (33)의 값이 들어있어여 한다.

 

0x7fffffffe650이라는 스택에 메모리가 allocate되었고 값에 접근이 가능해졌다.  

Comments