Fast Bin Attack
AWS 해킹을 배우고 실습하세요: HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹을 배우고 실습하세요: HackTricks Training GCP Red Team Expert (GRTE)
기본 정보
빠른 바인에 대한 자세한 정보는 다음 페이지를 확인하세요:
Bins & Memory Allocations빠른 바인은 단일 링크드 리스트이기 때문에 다른 바인보다 보호 기능이 훨씬 적습니다. 그리고 해제된 빠른 바인 청크의 주소를 수정하는 것만으로도 이후에 임의의 메모리 주소에 청크를 할당할 수 있습니다.
요약하면:
당신은 https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html에서 매우 잘 설명된 코드의 완전한 예제를 찾을 수 있습니다:
만약 글로벌 변수 **global_max_fast
**의 값을 큰 숫자로 덮어쓸 수 있다면, 더 큰 크기의 fast bin 청크를 생성할 수 있어 이전에는 불가능했던 시나리오에서 fast bin 공격을 수행할 수 있게 됩니다. 이 상황은 large bin attack와 unsorted bin attack의 맥락에서 유용합니다.
예시
청크를 할당하고 해제하며, 그 내용을 읽고 채울 수 있습니다 (오버플로우 취약점을 이용).
Infoleak을 위한 청크 통합: 오버플로우를 악용하여 가짜
prev_size
를 생성하여 이전 청크를 더 큰 청크 안에 넣어주는 기술로, 더 큰 청크를 할당할 때 다른 청크를 포함한 더 큰 청크를 할당할 수 있어 libc(main_arena+88
) 주소를 노출시키고 릭할 수 있습니다.malloc 후크 덮어쓰기: 이를 위해 이전에 겹치는 상황을 악용하여 메모리를 가리키는 2개의 청크를 가질 수 있었습니다. 따라서 두 청크를 모두 해제하면 (보호 기능을 피하기 위해 중간에 다른 청크를 해제), 같은 청크를 fast bin에 2번 넣을 수 있었습니다. 그런 다음, 다시 할당하여 다음 청크를
__malloc_hook
바로 앞을 가리키도록 덮어쓰고 (malloc이 무료 크기로 인식하는 정수를 가리키도록 하여 또 다른 우회), 다시 할당하고 malloc 후크 주소를 받을 다른 청크를 할당할 수 있었습니다. 마지막으로 거기에 원 가젯을 작성했습니다.힙 오버플로우 및 사용 후 무료 및 이중 해제가 있습니다. 청크가 해제되면 포인터를 재사용하고 다시 해제할 수 있습니다.
Libc 정보 릭: 일부 청크를 해제하면 메인 아레나 위치의 일부를 가리키는 포인터를 얻을 수 있습니다. 해제된 포인터를 재사용할 수 있으므로 이 주소를 읽을 수 있습니다.
Fast bin 공격: 할당된 모든 포인터는 배열 안에 저장되므로 몇 개의 fast bin 청크를 해제하고 마지막 청크에서 이 포인터 배열의 바로 앞을 가리키도록 주소를 덮어쓸 수 있습니다. 그런 다음, 동일한 크기의 몇 개의 청크를 할당하면 먼저 정품 청크를 얻은 다음 포인터 배열을 포함한 가짜 청크를 얻을 수 있습니다. 이제 할당된 포인터를 덮어쓰기하여
free
의 GOT 주소를system
으로 가리키도록 설정하고 청크 1에"/bin/sh"
를 쓴 다음free(chunk1)
을 호출하여 실제로system("/bin/sh")
를 실행할 수 있습니다.unsorted bin에서 한 바이트 오버플로우를 악용하여 청크를 통합하고 libc 정보 릭을 얻은 다음 fast bin 공격을 수행하여 malloc 후크를 원 가젯 주소로 덮어쓸 수 있는 예시
unsorted bin을 악용한 정보 릭 후 UAF를 통해 libc 주소와 PIE 주소를 릭한 후, 이 CTF의 exploit은 fast bin 공격을 사용하여 제어된 청크의 포인터가 위치한 곳에 청크를 할당하여 특정 포인터를 덮어쓰고 GOT에 원 가젯을 작성할 수 있었습니다.
unsorted bin 공격을 통해 fast bin 공격을 악용한 예시를 찾을 수 있습니다:
fast bin 공격을 수행하기 전에 필요할 때 libc/힙 주소를 릭하기 위해 free-lists를 악용하는 것이 일반적입니다.
크기가
0x100
보다 큰 청크만 할당할 수 있습니다.ASLR로 인해 작동 비율이 1/16인 Unsorted Bin 공격을 사용하여
global_max_fast
를 덮어쓰기(12비트를 수정해야 하지만 16비트를 수정해야 함) 가능합니다.글로벌 청크 배열을 수정하기 위한 Fast Bin 공격. 이를 통해 임의의 읽기/쓰기 기본 기능을 얻을 수 있어 GOT를 수정하고 일부 함수를
system
으로 가리키도록 설정할 수 있습니다.
Last updated