Studying Security

[Heap Exploit] Unsorted bin attack 본문

개념 정리/Heap

[Heap Exploit] Unsorted bin attack

J4guar 2022. 5. 2. 10:23
728x90
반응형

malloc()이 unsorted bin에 등록된 chunk를 재할당 할때

                                                         해당 chunk를 unsorted bin의 list에서 어떻게 삭제하나?

  1. 메모리 할당 요청(malloc)
  2. 요청 size에 적합한 chunk가 fast bin, small bin, large bin에 존재하는지 확인한다.
  3. 2번 과정에서 적합한 chunk를 찾지 못하면 unsorted_chunks(av)->bk와 unsorted_chunks(av)의 반환 값 비교한다.
    • 서로 다르다면 Unsorted bin에 free chunk가 존재한다는 뜻을 의미
  4. Unsorted bin에 free chunk가 있다면 unsorted_chunks->bk의 값을 victim에 저장한다.
  5. victim->bk가 가지고 있는 데이터를 bck에 저장한다.

 

간단한 그림

Unsorted bin에 free된 chunk가 존재한다는 사실을 bk와 unsorted_chunks(av)랑 같지않다는 것을 확인함으로써 알 수 있습니다.

<3번 과정>

만약 해당 요청에 적합한 chunk가 존재한다면 unsorted bin은 doubly linked list이기 때문에 chunk의 fd와 bk 포인터를 변경해주어야 합니다.

<4, 5번 과정>

자세한 그림

<과정>

 

해당 코드(참고 glibc-2.25)

<unsroted_chunks>
<bin_at>

bin_at은 main_arena[0]의 주소에서 16을 뺀 값을 반환합니다.

<malloc_state>

av는 malloc_state의 구조체입니다.

 

Unsorted bin attack

  • 할당자가 Unsorted list에서 chunk를 삭제하기 전에, free chunk의 bk에 값을 덮어써서 원하는 영역에 main_arena의 주소("&main_arena.bin[0] - 16")를 저장하는 기술입니다.
  • 공격자가 stack 주소(0x7fffffffe248)를 Unsorted list에 등록된 chunk의 "bk"에 덮어쓰면, 할당자는 bck에 보관된 주소가 0x7fffffffe248이기 때문에 unsorted_chunks()가 반환한 주소를 bck→fd(0x7fffffffe258)에 저장합니다.

 

Reference

 

unsorted bin attack[Korean] - TechNote - Lazenca.0x0

“html” 매크로 렌더링 오류 Notify your Confluence administrator that "Bob Swift Atlassian Apps - HTML" requires a valid license. Reason: VERSION_MISMATCH Excuse the ads! We need some help to keep our site up. “html” 매크로 렌더링 오

www.lazenca.net

 

반응형

'개념 정리 > Heap' 카테고리의 다른 글

[Heap Exploit] Poison null byte  (0) 2022.05.04
[Heap Exploit] Overlapping chunks  (0) 2022.05.02
[Heap Exploit] Heap Feng Shui  (0) 2022.05.01
[Heap Exploit] Heap Spray  (0) 2022.05.01
[Heap Exploit] Double Free Bug(DFB)  (0) 2022.04.22
Comments