Studying Security

[Heap Exploit] House of Spirit 본문

개념 정리/Heap

[Heap Exploit] House of Spirit

J4guar 2022. 5. 5. 14:49
728x90
반응형

_int_free() 이해하기

메모리가 해제된 chunk의 포인터가 올바르게 정렬된 포인터인지 확인하기 위해 misaligned_chunk()를 요청함

chunk의 정렬이 올바르지 않다면 "free() : invalid pointer" 메시지와 함께 종료

해당 chunk의 size에 저장된 값이 MINSIZE 보다 작고 해당 값이 정상적으로 정렬된 값인지 확인함

조건을 충족하지 못한다면 "free() : invalid size" 메시지와 함께 종료

해당 chunk의 크기가 fastbin에 해당하는지 확인

다음 chunk의 size에 저장된 값이 아래 조건에 만족하는지 확인

  • (chunk의 "size"에 저장된 값 - 사용된 flag bit를 모두 제거한 값) <= 2 * SIZE_SZ 확인
  • (chunk의 "size"에 저장된 값 >= av->system_mem의 값) 확인
  • 해당 Arena가 lock 되어있지 않을 경우 av→system_mem에 저장된 값이 거짓일 경우가 있습니다.
  • 때문에 해당 Arena를 lock한 후에 앞에서 확인한 조건대로 값을 다시 확인합니다.
  • 해당 조건이 충족되면 다음 청크의 "size"에 저장된 값이 비정상
    • "free () : invalid next size (fast)"메시지와 함께 프로세스 종료

위의 조건을 모두 만족하면 해당 chunk는 정상적인 chunk이며 해당 chunk를 fastbin에 저장

전달된 chunk의 포인터가 Stack에 존재하는지 확인하지 않는다.

House of Spirit

조건

  • stack에 가짜 chunk를 쓸 수 있을 때
  • 해당 stack의 주소 + 0x10한 주소를 free()할 수 있을 때

과정

  • stack에 fastbin에 해당하는 fake chunk를 작성한 후 메모리 할당을 malloc()에 요청 합니다.
  • free( fake chunk의 주소 + 0x10 )를 하게되면 해당 chunk의 포인터가 fastbin[]에 저장됩니다.
  • 해당 chunk의 크기로 malloc()을 호출하면, fastbin[]에 저장된 fake chunk의 포인터를 반환합니다.

stack영역에 메모리를 할당받을 수 있습니다.

<House of Spirit flow>

Reference

 

The House of Spirit[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] House of einherjar  (0) 2022.05.08
[Heap Exploit] House of Lore  (0) 2022.05.07
[Heap Exploit] House of Force  (0) 2022.05.04
[Heap Exploit] Poison null byte  (0) 2022.05.04
[Heap Exploit] Overlapping chunks  (0) 2022.05.02
Comments