상세 컨텐츠

본문 제목

[Heap Exploitation] fast_dup

SYSTEM HACKING/Exploit Tech

by koharin 2019. 11. 25. 23:07

본문

728x90
반응형

1. 조건

Double free bug 가 가능해야 함

(해제된 fast chunk를 한 번 더 해제하는 것이 가능해야 함)

 

2. 공격 방법

 

1) 동일한 크기 fast chunk 3개 생성(malloc)

 

2) 첫 번째 fast chunk 해제(free)

fastbinsY[6] = 0x602000

 

3) 두 번째 fast chunk 해제(free)

fastbinsY[6] = 0x602080 -> 0x602000(fd)

 

4) 첫 번째 fast chunk 해제(free) -> double free

fastbinsY[6] = 0x602000 -> 0x602080(fd) -> 0x602000(fd)

 

5) 공격 대상 영역과 같은 크기의 heap 3개 할당(malloc)

-> 첫 번째 heap 영역과 세 번째 heap 영역 주소(0x602000) 같음

 

0x602000 영역 malloc 해줌, fastbinsY[6] = 0x602080 -> 0x602000(fd) -> 0x602080(fd)

0x602080 영역 malloc 해줌 fastbinsY[6] = 0x602000 -> 0x602080(fd) -> 0x602000(fd)

0x602000 영역 malloc 해줌, fastbinsY[6] = 0x602080 -> 0x602000(fd) -> 0x602080(fd)

 

 

3. example code

 

 

# break point 설정

bp1 : 첫 번째 free() 함수 호출

bp2 : 두 번째 free() 함수 호출

bp3 : 세 번째 free() 함수 호출

bp4 : 4 번째 malloc() 함수 호출

bp5 : 5 번째 malloc() 함수 호출

bp6 : 6 번째 malloc() 함수 호출

 

 

free() 함수 호출 전에는 fastbinsY에 등록된 chunk 없음

첫 번째 free() 함수 호출 후 fastbinsY0x602000 영역이 등록됨

 

 

pwndbg> ni

 

 

bp2 : 두 번째 heap free() 호출 후

 

 

두 번째 heap 영역 주소가 fastbinsY에 등록되고 0x602000(fd)을 가리킴

 

 

해제된 두 번째 chunkfd0x602000 값이 적혀있음

bp3 : 해제된 첫 번째 chunk 다시 free()

 

 

fastbinsY에 첫 번째 heap 주소 적혀있음 0x6020100x602080(fd) 가리킴

 

 

bp4~bp6 ; 동일한 크기(112)heap 영역 할당(malloc)

malloc() 함수는 fastbinsY에 동일한 크기의 free chunk가 존재하기 때문에 fastbinsY에 등록된 heap 영역을 재할당해준다.

=> fastbins free chunksingle list로 관리하가 때문.

동일한 크기의 fast chunk가 여러 개 해제되면 chunk headerfd 영역을 이용해 관리하는데, double free로 인해 buf1buf2 free chunkfd 값이 상대 chunk를 가리키기 때문에 이런 현상 발생

fastbinsY[6] = 0x602000 -> 0x602080 -> 0x602000 -> 0x602080

 

 

fastbinsY[6] = 0x602000 -> 0x602080

 

728x90
반응형

관련글 더보기