House of Force

Reading time: 4 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

Basic Information

Code

  • 이 기술은 패치되었습니다 (여기) 그리고 이 오류를 발생시킵니다: malloc(): corrupted top size
  • 원하신다면 여기서 코드를 시도해 보실 수 있습니다.

Goal

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

Requirements

  • 상단 청크 헤더의 크기를 덮어쓸 수 있는 오버플로우 (예: -1).
  • 힙 할당의 크기를 제어할 수 있어야 합니다.

Attack

공격자가 주소 P에 청크를 할당하여 여기의 값을 덮어쓰고자 한다면, 그는 상단 청크 크기를 -1로 덮어쓰는 것으로 시작합니다 (아마도 오버플로우를 통해). 이는 malloc이 어떤 할당을 위해 mmap을 사용하지 않도록 보장합니다. 상단 청크는 항상 충분한 공간을 가질 것입니다.

그런 다음, 상단 청크의 주소와 할당할 대상 공간 사이의 거리를 계산합니다. 이는 해당 크기로 malloc이 수행되어 상단 청크를 그 위치로 이동시키기 때문입니다. 이렇게 하면 차이/크기를 쉽게 계산할 수 있습니다:

c
// 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을 수행합니다.

References & Other Examples

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기