HanJeouk의 개인공부 블로그

링크 <- 출처[shellphish github]

조건

1. 스택에 fake_chunk를 만들 수 있어야 한다.

2. 만든 fake_chunk의 주소를 알아야 한다. 즉 스택주소를 알아야 한다.

3. 힙 포인터를 조작할 수 있어야 한다.


1. malloc를 해준다. (line 9) #malloc(1)을 하게되면 자동으로 fastbin의 최소 size로 할당이 된다.

2. 변수명이 a인 포인터 변수를 하나 선언한다. (line 12)

3. 스택에 fake_chunk 변수를 배열로 선언한다. (line 14) #이 기법은 fake_chunk와 그 청크의 next_size까지 필요하기 때문에 fake_chunk[10]을 사용해서 2개의 fake 청크의 값을 설정하는 것이다.

4. 첫 번째 fake 청크의 사이즈를 0x40으로 설정해준다. (line 20) #free() invalid size 필터링 부분을 우회하기 위해서다.

5. 두 번째 청크 사이즈를 0x1234로 설정한다. (line 24) #free(): invaild size 필터링 부분을 우회하기 위해서다.

6. 아까 선언한 포인터 변수 a에 첫 번째 fake_chunk의 데이터 영역의 주소 값을 넣는다. (line 28)

7. 그리고 a를 free한다. (line 31) #그렇게 되면 첫 번째 fake_chunk가 진짜 청크라고 인식을 해서 free가 되고 fastbin에 첫 번쨰 fake_chunk가 등록된다. 

8.  청크를 할당하고 그 청크의 주소를 보면 스택에 할당된 것을 알 수 있다. (line 34)

끗 

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

how2heap overlapping_chunks2  (0) 2018.03.19
how2heap overlapping_chunks  (0) 2018.03.19
how2heap house_of_lore  (0) 2018.03.02
how2heap house_of_force  (0) 2018.02.20
how2heap unsorted_bin_attack  (0) 2018.01.17