상세 컨텐츠

본문 제목

[Heap Exploitation] Use-After-Free (UAF)

SYSTEM HACKING/Exploit Tech

by koharin 2019. 11. 25. 23:01

본문

728x90
반응형

1. 환경

공격자가 heap 영역을 할당(malloc), 해제(free)할 수 있어야 한다.

 

2. 공격 방법

 

1) 2개의 Heap 영역 할당(malloc)

2) 첫 번째 Heap 영역 해제(free)

3) Heap 영역 할당(malloc)

- Fastbin : 해제된 chunkfastbinsY에서 관리될 경우 해제된 Heap과 크기 동일하게 할당

- Unsorted bin : 해제된 chunkunsorted bin에서 관리되는 small, large chunk인 경우, 해제된 Heap의 크기와 같거나 작은 크기를 할당

4) 해제되었던 Heap 영역을 재할당받게 된다.

 

3. example vuln code

 

 

 

1) 크기 0x90인 힙 할당

2) 크기 0x100인 힙 할당

3) 크기 0x90인 힙 해제. 이때 a는 여전히 해제된 크기 0x90인 힙 주소 저장

4) 크기 0x90인 힙 할당. 해제된 a가 가리키던 힙 영역이 재할당됨.

따라서 c로 할당된 영역에 값을 넣으면, a는 여전히 동일한 힙 영역을 가리키고 있어서 a가 참조하는 영역의 값 출력 시 동일하게 “Secret message”가 출력됨

 

 

4. debugging

 

# break point 설정

bp1 : free() 함수 호출 (0x4005e1, main+43)

bp2 : malloc(0x90) 호출 (0x4005eb, main+53)

bp3 : leave 명령어 (0x400627, main+113)

 

 

포인터 a가 가리키는 heap 영역 주소는 0x602010, b가 가리키는 heap 주소는 0x6020b0이다.

 

 

free() 함수가 호출되고 a가 가리키는 0x602010 영역이 해제된다.

 

 

a heap 주소가 적혀있다.

 

 

이 영역이 해제되는 것이고, malloc(0x90)에 의해 c가 가리키는 heap 영역으로 재할당된다.

pwndbg> p main_arena.bins[1]

 

pwndbg> ni

 

 

free() 호출된 이후 unsorted bin0x602000이 등록되었다.

 

 

malloc(0x90) 호출 후 리턴된 heap 영역 주소는 0x602010(해제된 첫 번째 heap 영역)

 

 

-> gblicfirst-fit 알고리즘 이용해서 free chunk를 선택하는데 malloc() 함수는 해당 chunk가 요청된 heap 크기보다 충분히 크거나 같으면 해당 영역을 사용한다.

 

malloc(0x90)

0x6020b0 heap 영역은 앞의 chunk가 해제된 상태라서 flag0 (110)

-할당되지 않은 나머지 영역은 top chunk 영역 (0x20e50 바이트)

 

 

malloc(0x90)

 

 

 

0x6020b0 영역의 크기 저장하는 값에서 flag1로 바뀜

 

첫 번째 heap 영역 출력 시 세 번째 heap 영역에 복사한 문자열 출력됨

 

0x602010에 값이 들어가 있는 것 확인 가능

 

728x90
반응형

관련글 더보기