ghkdtlwns987
[Heap Exploit Technique] fastbin_dup_into stack 본문
//fastbin dup into stack
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(){
unsigned long long chunk_size = 0x21;
unsigned long long * a = (unsigned long long*)malloc(8);
unsigned long long * b = (unsigned long long*)malloc(8);
printf("%p %p \n",a,b);
free(b);
free(a);
unsigned long long * c = (unsigned long long*)malloc(8);
printf("%p \n",c);
*b = (unsigned long long)(((char *)&chunk_size) - sizeof(b));
unsigned long long * d = (unsigned long long*) malloc(8);
printf("addr : %p \n",d);
printf("addr : %p \n",malloc(8));
return 0;
}
다음 코드를 보면 fastbin 에 속하는 chunk 2개 할당 후 해제(free)
그 이후 malloc() 으로 8byte allocate,
이후 free() 시키게 되면 * c 는 fastbin 에 들어가게 된다.
*c 의 주소는 *a 의 주소를 할당받는다. (LIFO구조이긱 때문)
이후 *b의 chunk_size - sizeof(b) 로 만들어 주는데,
malloc() 요청시 요청한 size와 b->fd 에 들어가는 (addr - 8byte) 위치의 size값이 같아야 하기 때문이다.
이후 *d 의 주소에 malloc(8) 을 하게 되면 *b 가 가리켰던 주소를 d에 할당받고,
또다시 malloc() 하게 되면 b의 fd에 스택영역의 주소를 쓸 수 있다.
'Heap Exploitation' 카테고리의 다른 글
[Heap Techniques] Heap Memory leak (Unsorted bin)(main_arena) (0) | 2021.01.31 |
---|---|
UAF vs Double free Bug간단 정리 (0) | 2021.01.29 |
[glibc2.23] Heap bins 정리 4 (largebin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리3 (smallbin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리 2 (Unsorted bin) (0) | 2021.01.28 |
Comments