HanJeouk의 개인공부 블로그

링크 <- 출처[shellphish github]

조건

1. 탑 청크의 사이즈를 조작할 수 있어야 한다.

2. 청크 사이즈를 원하는 만큼 설정할 수 있어야 한다.


1. 청크를 하나 할당한다.

2. 할당한 후에 GDB로 Heap 영역을 보면 top chunk 사이즈가 나온다. (house of force가 되려면 무조건 이 탑청크 사이즈를 조작할 수 있어야 한다.) 이 사이즈를 이제 -1로 변경한다 (-1은 hex로 가장 큰 값이 0xffffffff로 나온다.) 

 ####첫 번쨰 청크 할당 후에 존재하던 top_chunk의 위치에는 나중에 두 번째 청크가 위치하게 된다.####(밑에 사진확인)

top chunk주목 0x20ef1

미르띤;; 0x20ef1이 청크 사이즈로 바뀜 

3. 이제 내가 할당하고자 하는 주소에서 32bit에서는 0x8 64bit 에서는 0x10을 빼주고 탑 청크의 주소를 빼준다. (0x8 or 0x16을 빼는 이유는 청크의 헤더부분을 빼야하기 때문이고 탑 청크의 주소를 빼주는 이유는 위의 말처럼 나중에 두번째 청크를 할당하면 탑 청크가 있던 주소는 두번째 청크의 주소가 자리잡아서 세번째 청크와의 오프셋을 구해야하기 때문이다. )

&두번째 청크+ size +(0x8 or 0x10) = &세번째 청크 <- 그래서 두번째 청크주소를 할당한 다음에 그 뒤에 오는 세번째 청크가 내가 원하는 주소가 되는 원리 ,값이 바로 들어가기 위해 청크의 헤더부분(0x8 or 0x10) 만큼 뺀다.

4. 뺀 값을 구하면 그 주소를 사이즈로하는 청크를 만든다. 그러면 top chunk가 있던 주소로 할당이 되니까 아까 구한 값이 맞아 떨어지면서 다음에 할당될 떄는 원하는 주소로 할당이 될 것이다.

이 글은 공부한 게 갑자기 기억이 안나면 복습용으로 보는거라 처음 공부하는 사람이 이걸 본다면 꼭 다른 사람들이 GDB를 이용해서 정리해놓은 걸 봤으면 좋겠다.

왜냐하면 gdb로 보는 게 더 공부가 잘 된다. ㅎ 

#설명을 너무 못한다 ㅎㅋ;;


'Documents > how2heap' 카테고리의 다른 글

how2heap house of spirit  (0) 2018.03.03
how2heap house_of_lore  (0) 2018.03.02
how2heap unsorted_bin_attack  (0) 2018.01.17
how2heap poison_null_byte  (0) 2018.01.16
house_of_einherjar  (0) 2018.01.15