ghkdtlwns987

[Heap Exploit Technique] fastbin_dup_into stack 본문

Heap Exploitation

[Heap Exploit Technique] fastbin_dup_into stack

2020/03/31 2021. 1. 31. 18:58
//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에 스택영역의 주소를 쓸 수 있다.

 

Comments