double free란?
해당 취약점은 libc 2.23에서 발생하는 취약점으로 free를 두번 하게 되면서 생기는 오류이다.
if (__builtin_expect (old == p, 0)
{
errstr = "double free or corruption (fasttop)";
goto errout;
}
이러한 코드로 인해 free를 두번 할 경우 오류가 생긴다. 하지만 만약 chunk1 해제후 chunk2를 해제하고 다시 chunk1을 해제하면 old는 chunk2이고 p는 chunk1이여서 이 오류검출을 우회할수있다.
그러면 같은 binlist에 같은 주소가 2개가 생긴다.
이렇게되면 재할당시 두개의 객체가 한 개의 주소를 가리킬수 있게 된다.
#include <stdio.h>
#include <malloc.h>
int main()
{
char *ptr = malloc(0x20);
char *ptr2 = malloc(0x20);
free(ptr);
free(ptr2);
free(ptr);
char *ptr3 = malloc(0x20);
char *ptr4 = malloc(0x20);
char *ptr5 = malloc(0x20);
fprintf(stderr, "ptr3 add : %p\\n", ptr3);
fprintf(stderr, "ptr4 add : %p\\n", ptr4);
fprintf(stderr, "ptr5 add : %p\\n", ptr5);
}
해당 취약점은 fastbin dup와 fastbin dup consolidate에서 이용된다.
<틀린 부분이 있다면 비난과 욕설을 해주세요>
'포너블 > Heap' 카테고리의 다른 글
unsorted bin attack & memory leak (0) | 2023.11.18 |
---|---|
fastbin dup, fastbin dup consolidate & Unsafe unlink (0) | 2023.11.18 |
UAF (0) | 2023.11.07 |
Tcache function(2.31) (0) | 2023.09.22 |
Tcache function (0) | 2023.09.22 |