WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
Learn & practice AWS Hacking: Learn & practice GCP Hacking:
공식 GNU 사이트에 따르면, 변수 **__malloc_hook
**는 malloc()
이 호출될 때마다 호출될 함수의 주소를 가리키는 포인터로, libc 라이브러리의 데이터 섹션에 저장됩니다. 따라서 이 주소가 예를 들어 One Gadget으로 덮어쓰여지면 malloc
이 호출될 때 One Gadget이 호출됩니다.
malloc
을 호출하기 위해 프로그램이 호출할 때까지 기다리거나 **printf("%10000$c")
**를 호출하여 libc
가 힙에 할당하도록 malloc
을 호출하게 할 수 있습니다.
One Gadget에 대한 더 많은 정보는 다음에서 확인할 수 있습니다:
GLIBC >= 2.34에서는 훅이 비활성화되어 있습니다. 최신 GLIBC 버전에서 사용할 수 있는 다른 기술이 있습니다. 참조: .
이는 정렬되지 않은 빈 공격을 남용한 후 빠른 빈 공격을 남용한 예제 중 하나에서 악용되었습니다:
이진 파일에 기호가 있는 경우 __free_hook
의 주소를 찾는 것이 가능합니다.
앞서 언급한 코드의 중단점에서 $eax
에는 free hook의 주소가 위치하게 됩니다.
이제 fast bin attack이 수행됩니다:
우선, __free_hook
위치에서 크기 200의 빠른 청크로 작업할 수 있다는 것이 발견되었습니다:
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook> gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
이 위치에서 크기 0x200의 빠른 청크를 얻으면 실행될 함수 포인터를 덮어쓸 수 있습니다.
이를 위해 크기 0xfc
의 새로운 청크를 생성하고, 그 포인터로 병합된 함수를 두 번 호출하여 크기 0xfc*2 = 0x1f8
의 해제된 청크에 대한 포인터를 얻습니다.
그런 다음, 이 청크에서 fd
주소를 이전 __free_hook
함수로 가리키도록 수정하는 편집 함수를 호출합니다.
이후, 크기 0x1f8
의 청크를 생성하여 빠른 빈에서 이전의 쓸모없는 청크를 가져오고, 또 다른 크기 0x1f8
의 청크를 생성하여 **__free_hook
**에서 빠른 빈 청크를 가져오고, 이를 system
함수의 주소로 덮어씁니다.
마지막으로, 문자열 /bin/sh\x00
를 포함하는 청크를 삭제 함수 호출로 해제하여 __free_hook
함수를 트리거하고, 이 함수는 /bin/sh\x00
를 매개변수로 하여 system을 가리킵니다.
에서는 기호 없이 free hook의 주소를 찾는 방법에 대한 단계별 가이드를 찾을 수 있습니다. 요약하자면, free 함수에서:
.
AWS 해킹 배우기 및 연습하기: GCP 해킹 배우기 및 연습하기:
확인하기!
**💬 또는 에 참여하거나 Twitter 🐦 를 팔로우하세요.
및 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.