hacktricks/binary-exploitation/libc-heap/house-of-force.md

6.9 KiB

힘의 집

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

기본 정보

코드

  • 이 기술은 (여기)에서 패치되었으며 다음 오류를 생성합니다: malloc(): corrupted top size
  • 테스트하려면 여기에서 코드를 사용할 수 있습니다.

목표

  • 이 공격의 목표는 특정 주소에 청크를 할당할 수 있는 것입니다.

요구 사항

  • 힙 할당의 크기를 제어할 수 있는 오버플로우가 필요합니다.
  • 힙 할당의 크기를 제어할 수 있어야 합니다.

공격

공격자가 특정 주소 P에 청크를 할당하여 여기에 값을 덮어쓰려면 다음과 같이 시작합니다. 먼저 top 청크 크기를 -1로 덮어쓰기(오버플로우를 사용할 수도 있음)하여 malloc이 Top 청크가 항상 충분한 공간을 가지고 있어서 mmap을 사용하지 않도록 합니다.

그런 다음 top 청크의 주소와 할당할 대상 공간 사이의 거리를 계산합니다. 이는 해당 크기로 malloc이 수행되어 top 청크가 해당 위치로 이동하도록 하기 위함입니다. 차이/크기를 쉽게 계산하는 방법은 다음과 같습니다:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

따라서 target - old_top - 4*sizeof(long) 크기를 할당하면 (4개의 long은 상단 청크의 메타데이터와 새로 할당된 청크의 메타데이터 때문입니다) 상단 청크를 덮어쓰고자 하는 주소로 이동시킬 수 있습니다.
그런 다음, 대상 주소에 청크를 또 다른 malloc으로 할당하십시오.

참고 및 다른 예시