분류 전체보기 (17) 썸네일형 리스트형 05. [How2Heap] fastbin_dup_consolidate.c #include #include #include /*Original reference: https://valsamaras.medium.com/the-toddlers-introduction-to-heap-exploitation-fastbin-dup-consolidate-part-4-2-ce6d68136aa8This document is mostly used to demonstrate malloc_consolidate and how it can be leveraged with adouble free to gain two pointers to the same large-sized chunk, which is usually difficult to dodirectly due to the previnuse chec.. Heap Heap이란? -> 프로그램이 실행되는 도중 동적으로 할당되고 헤제하여 사용하는 메모리 영역 동적 메모리 할당자의 종류tcmalloc - googleptmalloc2 - glibcLibumem - SolarisJemalloc - FreeBSD and Firefoxdlmalloc - General purpose allocatordlmalloc현재 우분투에서 사용되는 메모리할당자의 기본 알고리즘은 dlmalloc과 동일 heap이 생기고 없어지는 원리char *p = malloc(size) 원하는 size만큼 malloc을 호출하여 동적 메모리 할당free(p) 사용한 메모리를 free하여 반환 생기는 위치특정 크기의 메모리 영역을 미리 할당한 뒤 이 영역을 사용하는 방식 -> free한 뒤에도 이 부분.. 04. [how2heap] - fastbin_dup_into_stack.c 서론fastbin_dup_into_stack.c를 보겠다.설명을 보면fastbin 여유 목록을 남용하여 malloc이 거의 임의의 포인터를 반환하도록 속입니다.라 되어있다.즉 fastbin freelist를 조작해 malloc()이 스택상의 임의 위치를 반환하도록 만드는 코드 이다.본론#include #include #include int main(){ fprintf(stderr, "This file extends on fastbin_dup.c by tricking calloc into\n" "returning a pointer to a controlled location (in this case, the stack).\n"); fprintf(stderr.. 03. [How2Heap] - fastbin_dup.c 서론fastbin_dup.c 을 보면 같은 chunk를 두 번 free하면 어떻게 되는가?를 알아보는 코드이다.본론버전우선 fastbin_dup.c가 그냥 how2heap 에 없다 파일 안으로 들어가야 하는데glibc_2.35 파일로 들어간다 그런데 왜 최신버전인 glibc_2.39 가 아닌 glibc_2.35로 들어갈까?glibc 2.26부터 도입된 tcache 시스템 때문tcache의 존재glibc 2.26 이후, malloc()과 free()는 우선적으로 tcache를 사용합니다tcache는 매우 빠르지만:fastbin보다 먼저 처리됨double free에 대한 보호가 추가됨fastbin_dup.c에서 기대하는 "같은 chunk가 두 번 fastbin에 들어감" 시나리오가 실제로는 tcache에서.. -02. calc_tcache_idx.c 서론저번 -01 과 같이 개념에 대해 정리해 볼 것이다.본론tcache index작은 크기 청크들을 속도 향상을 위해 미리 보관해두는 배열tcache는 총 64개의 슬롯 (즉, tcache[0] ~ tcache[63])이 있음CHUNKSIZE IDX 의미0x200최소 크기 chunk0x3010x20 요청 시 내부 처리 크기0x402...0x41062tcache가 지원하는 최대 크기> 0x410Xtcache에 저장 안 됨여기를 보면 calc_tcache_idx.c 에서는 0x10을 입력하면 0이되고, 0x30을 입력하면 2였다.하지만 표는 0x10은 안되고, 0x30이 1이 된다.즉 calc_tcache_idx.c은 그냥 계산 방식만 알려주려 한 코드였다.결론calc_tcache_idx.c는 CHUNKSI.. -01.first_fit.c 서론first_fit.c를 공부 하였지만, 추가적인 학습이 필요하다 생각하였다. 따라서 개념에 대한 정리를 하려한다. 본론힙이란?프로세스가 실행되는 동안 프로그램이 동적으로(실행 중에) 메모리를 할당하고 해제하는 영역이라고 한다. 쉽게 말하자면프로그램이 실행중일 때 크기가 정해지지 않은 데이터를 저장할 때 힙 영역에서 메모리를 할당하고, 데이터를 더이상 안쓸때 해제한다는 뜻이다. 동적할당, 정적할당, 자동할당?힙은 동적할당이다. 동적할당이란프로그램이 실행중에 메모리를 할당하고 해제하는 것이다.여기서 메모리를 할당한다는 말은 코드로 표현하면 malloc() 을 뜻한다.또한 해제를 뜻하는 코드 free(), delete() 이다.이는 힙 영역에 저장된다. 정적할당은 뭘까?정적할당은 전역변수나, static .. 02.How2Heap - calc_tcache_idx.c 서론이번에는 calc_tcache_idx.c을 해볼 것이다.설명은Demonstrating glibc's tcache index calculation.glibc의 tcache 인덱스 계산 방식을 시연라고 되어있다.본론우선 이 학습에서는 tcache 인덱스 계산 방식을 이해하는 것이다.우분투를 켜보겠다.다음을 입력하면 다음과 같이 결과가 출력된다.이 파일을 보면 우리가 알고싶은 것이 malloc(x)를 했을 때 그 청크는 tcache[idx]중 어디로 들어가는가? 가 중요한 포인트인 것을 알 수 있다.malloc(x)에서 x는 유저가 요청한 크기를 말한다. 하지만 힙 내부에는 크기와 정렬 보정이 추가된다. 따라서 실제 할당 크기(CHUNKSIZE)가 된다.CHUNKSIZE의 공식은CHUNKSIZE = ( x.. 01.How2Heap - first_fit.c 서론ChatGPT에 조언에 따라 Heap을 공부해 보겠다. Heap을 공부하기 위해 how2heap라는 힙 익스플로잇 기법 실습하며 학습할 수 있 오픈소스를 이용해 공부할 것이다.본론사전 설치우선 how2heap을 설치하겠다.git clone https://github.com/shellphish/how2heap.gitcd how2heap이를 하고 ls 를 입력하면다음과 같이 파일이 설치된다. 실행실행하기 전에 first_fit.c의 설명을 보자면Demonstrating glibc malloc's first-fit behaviorglibc malloc의 first-fit 동작을 보여줍니다.라고 되어있다. 코드를 분석하기 위해 cat first_fit.c 를 해보겠다.#include #include #inc.. 이전 1 2 3 다음