HanJeouk의 개인공부 블로그

링크 <- 출처[shellphish github]

조건

1. 스택에 값을 넣을 수 있어야 한다.

2. small 과 large 청크의 할당이 자유로워야 한다.

3. free된 청크의 bk의 값을 조작할 수 있어야 한다.


1. 스택에 fake_chunk 2개를 만든다.(line 34,35)

2. victim이라는 small bin을 하나 할당한다 (line 42)

3. victim_chunk라는 변수를 만들어 청크의 헤더 부분(8 or 16)만큼 빼준 값을 넣는다. (line 46)

4. 첫 번째 fake_chunk의 헤더 부분을 0으로하고  fd에 victim_chunk를 넣는다.(line 54,55,56) #small bin corruption을 막기 위해서다. 현재청크의 bk를 bck라고 했을 때 bck의 fd가 현재청크가 아니면 small bin corruption이 뜬다.  

5. 첫 번째 fake_chunk의 bk 부분에 두 번째 fake_chunk 주소를 넣는다.(line 61)

6. 두 번째 fake_chunk의 fd 부분에 첫 번째 fake_chunk 주소를 넣는다.(line 62)

7. victim이 free가 됐을 때 탑 청크와 병합하지 않도록 하기 위해서 large 청크를 하나 만든다.(line 66)

8. victim을 free한다.(line 71)

9. large 청크를 할당한다.(line 80) #free가 되면 victim은 바로 small bin으로 들어가지 않고 unsorted bin으로 들어간다. 그래서 unsorted bin에서 small bin으로 옮기기 위해 다른 large 청크를 하나 만들어주는 것이다. 여기서 왜 굳이 large bin이여야 하는지를 알아야 한다. malloc.c 찾아보기

10. victim의 bk 영역에 첫 번째 fake_chunk의 주소를 넣는다. #small bin corruption을 막기 위해서 현재청크의 bk를 bck라고 했을 때 bck의 fd가 현재청크가 아니면 small bin corruption이 뜬다.

11. victim 사이즈와 같이 할당해준다 (line 98)

12. victim 사이즈와 같이 할당해준다 (line 102) #여기에 우리가 할당하려는 스택에 할당이 된다. 

13. 이제 line 102에서 할당한 주소 +40이 ret니까 그 곳을 jackpot으로 덮으면 카나리를 뛰어넘어서 값이 들어가기 때문에 stack smashing 도 무시할 수 있다.

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

how2heap overlapping_chunks  (0) 2018.03.19
how2heap house of spirit  (0) 2018.03.03
how2heap house_of_force  (0) 2018.02.20
how2heap unsorted_bin_attack  (0) 2018.01.17
how2heap poison_null_byte  (0) 2018.01.16