상세 컨텐츠

본문 제목

[Heap exploitation] Unsorted Bin Attack

SYSTEM HACKING/Exploit Tech

by koharin 2020. 1. 9. 16:08

본문

728x90
반응형

1. 목적

 

Unsorted Bin에 들어있는 unsorted chunk를 다시 할당할 때 unlink 과정에서 발생하는 취약점을 이용해서

main_arena 영역의 주소를 특정 메모리에 저장하는 것

 

* Unsorted Bin : 해제된 small chunk, large chunk 관리

 

2. Exploit Plan

 

1) 2개의 chunk 할당(malloc)

2) 1번째 chunk 해제(free) 

    -> 해제된 1번째 chunk가 unsorted bin에 등록된다.

3) 1번째 chunk의 bk에 (해제되면 chunk의 user data 영역이 fd와 bk가 됨) 공격 대상 주소를 적는다.

    -> 64bit : &공격대상주소 - 0x10

 

* unlink() 과정에서 bck->fd = unsorted_chunks (av); 를 통해

victim의 변경된 bk 영역에 저장된 값을 bck에 저장한다.

이로 인해 변경된 unsorted chunk의 bk 값 + 0x10 영역에 main_arena.top 주소값 (main_arena+88)을 저장할 수 있다

 

 

4) 1번째 heap 영역과 동일한 크기의 heap 영역 할당(malloc)

- 공격 대상 영역에 main_arena 영역의 주소가 저장된다.

 

3. vuln code

 

 

 

1) chunk 2개 할당

2) 1번째 chunk를 해제

3) 0x602000+0x18(bk) 영역에 &state-0x10 저장하고, 0x602000+0x10(fd) 영역에 main_arena+88 (main_arena의 top 영역) 저장

1번째 heap 영역과 같은 크기 할당 -> state 변수에 main_arena+88  영역 값이 저장된다.

 

* freeChunk의 bk 영역을 덮어썼기 때문에 이런 현상 발생

- free() 함수에서 덮어쓴 bk값을 확인하고 다음 Chunk가 존재한다고 판단.

- free() 함수는 0x7fffffffe248 영역이 다음 chunk이므로

다음 chunk의 fd 영역(0x7fffffffe258)에 freeChunk의 fd 값 (0x7ffff7dd37b8)을 저장한다.

 

state 변수에 값이 저장되어 있으므로 if문 조건 우회 가능 -> printf문 출력

 

이 코드에서는 if문 조건을 우회하기 위해 unsorted bin attack을 사용했지만 

main_arena 영역에 값을 덮어쓰거나 global_max_fast 값을 변경하는 것으로 사용할 수도 있다.

 

728x90
반응형

관련글 더보기