호그와트

User After free 취약점

영웅*^%&$ 2022. 2. 19. 13:11
728x90

User After free 취약점 : 쉽게 말해서 이전에 메모리를 활용한 포인터가 메모리 해제 후 적절한 초기화를 하지 않아 발생하는 취약점이다.

예제 코드

#include <stdio.h>

#include <stdlib.h>

#include <string.h>s

truct NameTag {

char team_name[16];

char name[32];

void (*func)();};

struct Secret {

char secret_name[16];

char secret_info[32];

long code;};

int main() {

int idx;

struct NameTag *nametag;

struct Secret *secret;

secret = malloc(sizeof(struct Secret));

strcpy(secret->secret_name, "ADMIN PASSWORD");

strcpy(secret->secret_info, "P@ssw0rd!@#");

secret->code = 0x1337;

free(secret);

secret = NULL;

nametag = malloc(sizeof(struct NameTag));

strcpy(nametag->team_name, "security team");

memcpy(nametag->name, "S", 1);

printf("Team Name: %s\n", nametag->team_name);

printf("Name: %s\n", nametag->name);

if (nametag->func) {

printf("Nametag function: %p\n", nametag->예

(예제 코드 출처 : Memory Corruption: Use After Free | Dreamhack)

취약점이 발생하는 원인 : 먼저 secret을 할당하고 해제한 후, nametag를 할당하기 때문. 둘의 구조체 크기가 같기 때문에 같은 메모리 영역을 사용하게 된다

드림핵의 명장 : 예제를 통해 살펴봤듯, 동적할당한 청크를 해제한 뒤에는 해제된 메모리 영역에 이전 객체의 데이터가 남습니다. 이러한 특징을 공격자가 이용한다면 초기화되지 않은 메모리의 값을 읽어내거나, 새로운 객체가 악의적인 값을 사용하게 유도하여 프로그램의 정상적인 실행을 방해할 수 있습니다.

728x90

'호그와트' 카테고리의 다른 글

extract last page  (0) 2022.02.24
Dreamhack web PATCH-1  (0) 2022.02.21
dreamhack rev-basic-9  (0) 2022.02.14
드림핵 dreamschool ~~파도 ~~~ 별  (0) 2022.02.11
dreamhack return address Overwrite  (0) 2022.02.09