House of Force

HackTricks 지원하기
  • 구독 요금제를 확인하세요!

  • 💬 디스코드 그룹가입하세요(https://discord.gg/hRep4RUj7f) 또는 텔레그램 그룹참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.

  • HackTricksHackTricks Cloud 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.

기본 정보

코드

  • 이 기법은 (여기)에서 패치되었으며 다음 오류를 생성합니다: 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을 수행하십시오.

참고 자료 및 다른 예시

Last updated