본문 바로가기
시스템 해킹/HEAP

Use After Free

by sonysame 2018. 2. 16.

UAF


Heap 영역에서 해제(free)된 영역을 재사용(reuse)하면서 발생하는 취약점


Heap 영역의 데이터를 가리키는 포인터가 해제되었지만 해당 영역을 가리키는 포인터(dangling pointer)가 재사용되는 취약점


웹 브라우저에서 많이 터짐


Dangling Pointer: A left over pointer in your code that references free'd data and is prone to be re-used 해제된 영역을 가리키고 있는 포인터!


<glibc first fit algorithm>


free된 메모리 영역은 bin에 들어감


First bin은 Unsorted Chunk List 형태로 cache 형태로 동작함


비슷한 크기의 할당(malloc)요청이 들어오면 bin에 있는거 재사용!


Deferred Coalescing!!


UAF를 익스하긴 위해선, dangling pointer에 다른 타입의 객체를 가리키게 한다


#include <stdio.h>

#include <stdlib.h>
#include <string.h>
 
typedef struct {
    char name[10];
    void (*print)(void*);
} test;
 
typedef struct {
    char name[128];
} string;
 
void printName(test* t)
{
    printf("%s\n",t->name);
}
 
void shell(void)
{
    printf("This is Shell\n");
}
 
int main(void)
{
    test* t1;
    string* s1;
 
    /* malloc and free */
    t1 = malloc(256);
 
    strcpy(t1->name, "DOG");
    t1->print = (void*)printName;
 
    t1->print(t1);
 
    free(t1);
 
    /* malloc */
    s1 = malloc(256);
 
    scanf("%128s",s1->name);
 
    /* use */
    t1->print(t1);
 
    return 0;
}


https://bpsecblog.wordpress.com/2016/10/06/heap_vuln/

'시스템 해킹 > HEAP' 카테고리의 다른 글

Double Free BUG unlink  (0) 2018.02.17
Heap Overflow  (0) 2018.02.17
malloc free 실습 fastbin unsortbin 정리!  (0) 2018.02.16
Fast bin  (0) 2018.02.16
Top Chunk  (0) 2018.02.16