House of Force
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
이 공격의 목표는 특정 주소에 청크를 할당할 수 있는 것입니다.
상단 청크 헤더의 크기를 덮어쓸 수 있는 오버플로우 (예: -1).
힙 할당의 크기를 제어할 수 있어야 합니다.
공격자가 주소 P에 청크를 할당하여 여기의 값을 덮어쓰고 싶다면, 그는 상단 청크 크기를 -1
로 덮어쓰는 것으로 시작합니다 (아마도 오버플로우로). 이렇게 하면 malloc이 어떤 할당에도 mmap을 사용하지 않게 됩니다. 왜냐하면 상단 청크는 항상 충분한 공간을 가질 것이기 때문입니다.
그런 다음, 상단 청크의 주소와 할당할 대상 공간 사이의 거리를 계산합니다. 이는 해당 크기로 malloc이 수행되어 상단 청크를 그 위치로 이동시키기 때문입니다. 이렇게 하면 차이/크기를 쉽게 계산할 수 있습니다:
따라서 target - old_top - 4*sizeof(long)
크기를 할당하면(4개의 long은 상단 청크의 메타데이터와 할당된 새 청크의 메타데이터 때문입니다) 상단 청크를 우리가 덮어쓰고자 하는 주소로 이동시킵니다.
그런 다음, 목표 주소에서 청크를 얻기 위해 또 다른 malloc을 수행합니다.
이 시나리오의 목표는 ret2win으로, ret2win 함수의 주소에 의해 호출될 함수의 주소를 수정해야 합니다.
이 바이너리는 상단 청크 크기를 수정할 수 있는 오버플로우가 있으며, 이는 -1 또는 p64(0xffffffffffffffff)로 수정됩니다.
그런 다음 덮어쓸 포인터가 존재하는 위치의 주소를 계산하고, 현재 상단 청크의 위치에서 그곳까지의 차이를 malloc
으로 할당합니다.
마지막으로, 이 원하는 목표를 포함할 새로운 청크가 할당되며, 이는 ret2win 함수에 의해 덮어씌워집니다.
Input your name:
에는 힙에서 주소를 누출할 수 있는 초기 취약점이 있습니다.
그런 다음 Org:
및 Host:
기능에서 org name을 요청할 때 s
포인터의 64B를 채울 수 있으며, 이는 스택에서 v2의 주소 다음에 위치하고, 그 다음에 지정된 host name이 옵니다. 이후, strcpy가 s의 내용을 64B 크기의 청크에 복사하므로, host name에 넣은 데이터로 상단 청크의 크기를 덮어쓸 수 있습니다.
이제 임의의 쓰기가 가능해지면, atoi
의 GOT가 printf의 주소로 덮어씌워졌습니다. 그 후 %24$p
로 IO_2_1_stderr
의 주소를 누출할 수 있었습니다. 그리고 이 libc 누출로 atoi
의 GOT를 다시 system
의 주소로 덮어쓰고, /bin/sh
를 매개변수로 전달하여 호출할 수 있었습니다.
이 다른 글에서 제안된 대안 방법은 free
를 puts
로 덮어쓰고, 나중에 해제될 포인터에 atoi@got
의 주소를 추가하여 누출되도록 한 다음, 이 누출로 다시 atoi@got
을 system
으로 덮어쓰고 /bin/sh
로 호출하는 것입니다.
포인터를 지우지 않고 해제된 청크를 재사용할 수 있는 UAF가 있습니다. 일부 읽기 메서드가 있기 때문에, 여기에서 free 함수의 포인터를 GOT에 작성하여 libc 주소를 누출할 수 있습니다. 그런 다음 읽기 함수를 호출합니다.
그런 다음, House of force가 사용되어(UAF를 악용하여) 남은 공간의 크기를 -1로 덮어쓰고, free hook에 도달할 수 있을 만큼 큰 청크를 할당한 다음, free hook을 포함할 또 다른 청크를 할당합니다. 그런 다음 hook에 system
의 주소를 작성하고, 청크에 "/bin/sh"
를 작성한 후, 해당 문자열 내용을 가진 청크를 해제합니다.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)