Fast Bin Attack
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)
빠른 빈에 대한 자세한 정보는 이 페이지를 확인하세요:
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 맥락에서 유용합니다.
청크를 할당하고, 해제하고, 내용을 읽고, 채울 수 있습니다(오버플로우 취약점으로).
정보 유출을 위한 청크 통합: 이 기술은 기본적으로 오버플로우를 악용하여 가짜 prev_size
를 생성하여 하나의 이전 청크가 더 큰 청크 안에 들어가게 하여, 다른 청크를 포함하는 더 큰 청크를 할당할 때 그 데이터를 출력하고 libc 주소(main_arena+88
)를 유출할 수 있게 합니다.
malloc 훅 덮어쓰기: 이를 위해, 이전의 겹치는 상황을 악용하여 두 개의 청크가 동일한 메모리를 가리키도록 할 수 있었습니다. 따라서 두 청크를 모두 해제하고(보호를 피하기 위해 중간에 다른 청크를 해제하여) fast bin에 동일한 청크를 두 번 넣을 수 있었습니다. 그런 다음, 다시 할당하고, 다음 청크의 주소를 __malloc_hook
보다 조금 앞을 가리키도록 덮어쓸 수 있었습니다(그래서 malloc이 무료 크기로 생각하는 정수를 가리키게 됩니다 - 또 다른 우회). 그런 다음 다시 할당하고, malloc 훅에 주소를 받을 다른 청크를 할당했습니다.
마지막으로 one gadget가 그곳에 기록되었습니다.
힙 오버플로우와 사용 후 해제 및 이중 해제가 발생합니다. 청크가 해제될 때 포인터를 재사용하고 다시 해제할 수 있습니다.
Libc 정보 유출: 몇 개의 청크를 해제하면 메인 아레나 위치의 일부에 대한 포인터를 얻습니다. 해제된 포인터를 재사용할 수 있으므로 이 주소를 읽기만 하면 됩니다.
Fast bin 공격: 할당에 대한 모든 포인터가 배열에 저장되므로, 몇 개의 fast bin 청크를 해제하고 마지막 청크에서 주소를 이 포인터 배열보다 조금 앞을 가리키도록 덮어쓸 수 있습니다. 그런 다음 동일한 크기의 청크를 몇 개 할당하면 먼저 정당한 청크를 얻고 그 다음 포인터 배열을 포함하는 가짜 청크를 얻습니다. 이제 이 할당 포인터를 덮어써서 free
의 GOT 주소가 system
을 가리키도록 만들고, 그런 다음 청크 1에 "/bin/sh"
를 기록하여 free(chunk1)
를 호출하면 대신 system("/bin/sh")
가 실행됩니다.
한 바이트 오버플로우를 악용하여 정렬되지 않은 빈에서 청크를 통합하고 libc 정보 유출을 얻은 다음 fast bin 공격을 수행하여 malloc 훅을 one gadget 주소로 덮어쓰는 또 다른 예입니다.
UAF를 사용하여 정렬되지 않은 빈에서 libc 주소와 PIE 주소를 유출한 후, 이 CTF의 익스플로잇은 fast bin 공격을 사용하여 제어된 청크에 대한 포인터가 위치한 곳에 청크를 할당하여 특정 포인터를 덮어쓰고 GOT에 one gadget을 기록할 수 있었습니다.
정렬되지 않은 빈 공격을 통해 악용된 Fast Bin 공격을 찾을 수 있습니다:
fast bin 공격을 수행하기 전에 free-lists를 악용하여 libc/heap 주소를 유출하는 것이 일반적입니다(필요할 때).
우리는 0x100
보다 큰 크기의 청크만 할당할 수 있습니다.
정렬되지 않은 빈 공격을 사용하여 global_max_fast
를 덮어씁니다(ASLR로 인해 1/16의 확률로 작동하며, 12비트를 수정해야 하지만 16비트를 수정해야 합니다).
전역 청크 배열을 수정하기 위한 Fast Bin 공격. 이는 임의의 읽기/쓰기 원시를 제공하여 GOT를 수정하고 일부 함수를 system
을 가리키도록 설정할 수 있게 합니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)