House of Einherjar

HackTricks 지원

기본 정보

코드

목표

  • 거의 모든 특정 주소에 메모리를 할당하는 것이 목표입니다.

요구 사항

  • 청크를 할당하려는 경우 가짜 청크를 생성합니다.

  • 포인터를 자신을 가리키도록 설정하여 무결성 검사를 우회합니다.

  • 한 청크에서 다음 청크로의 널 바이트를 사용하여 PREV_INUSE 플래그를 수정합니다.

  • 오프 바이 널 오용된 청크의 prev_size에 자신과 가짜 청크 사이의 차이를 표시합니다.

  • 가짜 청크 크기도 무결성 검사를 우회하기 위해 동일한 크기로 설정되어야 합니다.

  • 이러한 청크를 구성하려면 힙 누수가 필요합니다.

공격

  • 공격자가 제어하는 청크 내에 fdbk로 가리키는 가짜 청크 A가 생성됩니다.

  • 다른 2개의 청크(BC)가 할당됩니다.

  • B에서 오프 바이 원을 악용하여 prev in use 비트를 지우고 prev_size 데이터를 C 청크가 할당된 위치와 이전에 생성된 가짜 A 청크 사이의 차이로 덮어씁니다.

  • prev_size 및 가짜 청크 A의 크기는 체크를 우회하기 위해 동일해야 합니다.

  • 그런 다음, tcache가 채워집니다.

  • 그런 다음, C가 해제되어 가짜 청크 A와 통합됩니다.

  • 그런 다음, 가짜 A 청크에서 시작하고 B 청크를 포함하는 새로운 청크 D가 생성됩니다.

  • Einherjar의 집이 여기서 끝납니다.

  • 이것은 fast bin 공격 또는 Tcache 독감으로 계속할 수 있습니다:

  • B를 해제하여 fast bin / Tcache에 추가합니다.

  • Bfd를 덮어쓰어 D 청크를 악용하여 대상 주소를 가리키도록 만듭니다(이는 B를 포함하고 있기 때문에).

  • 그런 다음, 2개의 malloc이 수행되고 두 번째 malloc은 대상 주소를 할당하게 됩니다.

참고 자료 및 다른 예제

HackTricks 지원

Last updated