HanJeouk의 개인공부 블로그

문서링크는 Poison_null_byte 

필요한 조건: 이미 할당된 청크 사이즈와 prev_size를 조작할 수 있어야 한다. 0x200만큼 할당이 가능해야 한다. off_by_one 취약점이 있어야 한다.

fastbin 할당이 자유로워야 한다.

1. a를 0x100, b를 0x200, c를 0x100으로 할당한다.

2. b의 사이즈를 0x211에서 0x200으로 바꾼다.

3. 그리고 b의 데이터 부분+ 0x200이 되는 주소에 0x200을 넣어준다. #chunksize(P) != prev_size (next_chunk(P))<-얘 때문에 청크의 data부분 - 0x10(청크의 헤더) + 0x210(b의 사이즈) = 다음 청크의 prev_size주소, 즉 다음 청크라고 구한 주소에 값을 넣어줘야함. 

4.  b를 free한다.

5. a에서 off_by_one을 이용해서 b의 사이즈를 덮는다. #0x211에서 0x200으로

6. c의 prev_size를 0x200으로 바꾼다.

7. b1(0x100)과 b2(0x80)을 할당한다. #b1을 할당하면 b가 있던 주소로 할당이 될 것이고, b2은 b1청크 바로 뒤에 있을 것이다.

8. 이제 b1과 c를 free한다. #이 과정에서 병합이 b1과 c가 병합된다. 0x200+0x100 = 0x300

9. 이제 0x300만큼 할당하면 b1의 주소에 할당이 될 것이고  b2의 값을 조작할 수 있다.


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

how2heap house_of_force  (0) 2018.02.20
how2heap unsorted_bin_attack  (0) 2018.01.17
house_of_einherjar  (0) 2018.01.15
first_fit & unsafe unlink  (0) 2018.01.08
fastbin_dup & fastbin_dup_into_stack  (0) 2018.01.03