
Heap ๊ตฌ์กฐ
์ถ์ฒ : https://dokhakdubini.tistory.com/35
: ์ปดํจํฐ ์์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ค ์ฌ์ฉ์๊ฐ ์์๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
โท malloc ํจ์๋ฅผ ์ด์ฉํด ์ ์ธํด์ฃผ๊ณ , free ํจ์๋ฅผ ํตํด ํด์ ํด์ค
1. First-Fit ์๊ณ ๋ฆฌ์ฆ
: ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ต ์ค ํ๋๋ก, ๋ฆฌ๋ ์ค ์ด์์ฒด์ ๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฑํํ๊ณ ์๋ค.
- First-Fit ๋ง๊ณ ๋ Best-Fit, Worst-Fit๋ ์์
์)
char *a = malloc(20); // 0xe4b010
char *b = malloc(20); // 0xe4b030
char *c = malloc(20); // 0xe4b050
char *d = malloc(20); // 0xe4b070
free(a);
free(b);
free(c);
free(d);
a = malloc(20); // 0xe4b070
b = malloc(20); // 0xe4b050
c = malloc(20); // 0xe4b030
d = malloc(20); // 0xe4b010
๊ฐ๊ฐ 20๋ฐ์ดํธ์ฉ heap์ 4๊ฐ์ ํฌ์ธํฐ์ ์์ญ์ ํ ๋น ํด์ฃผ์๊ณ , free๋ฅผ ํด์ค ๋ค์ ๋ค์ 4๊ฐ์ ์์ญ์ ํ ๋น๋ฐ์๋ค.
์ด๋ ํ ๋น์ด ๋ ๋๋ LIFO(Last In First Out)์ ๋ฐ๋ฅธ๋ค.
2. UAF(Use After Free)
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ ์ฌ์ฌ์ฉํ ๋ ์๊ธฐ๋ ์ทจ์ฝ์
์)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* heap1;
int* heap2;
int* heap3;
heap1 = (int*)malloc(256);
heap2 = (int*)malloc(256);
printf("heap1์ ์ฃผ์ : %p\n", heap1);
printf("heap2์ ์ฃผ์ : %p\n", heap2);
*heap2 = 1234;
printf("heap2 number : %d\n", *heap2); //1234
free(heap2);
printf("free heap2\n");
heap3 = (int*)malloc(256);
printf("new heap์ ์ฃผ์ : %p\n", heap3);
printf("new heap number: %d\n", *heap3); //์์์๋ ๊ฐ์ ์ด๊ธฐํ๋จ
*heap3 = 4321;
printf("new heap์ ๋ด์ฉ์ \"%d\"๋ก ๋ฐ๊พธ์์ต๋๋ค.\n\n", *heap3);
printf("heap2๋ฅผ ๋ค์ ๋ถ๋ฅธ๋ค๋ฉด?: %d\n", *heap2); //heap3์ ๊ฐ๊ณผ
return 0;
}
heap1 = (int*)malloc(256);
heap2 = (int*)malloc(256);
- malloc์ ์ฌ์ฉํด์ heap1๊ณผ heap2์ ๊ณต๊ฐ์ ํ ๋นํด์ฃผ์๋ค.
*heap2 = 1234;
free(heap2);
printf("free heap2\n");
- heap2์ ๊ฐ์ 1234๋ก ๋ฐ๊ฟ์ฃผ์๋ค
- heap2๋ฅผ freeํด์ฃผ์๋ค.
heap3 = (int*)malloc(256);
printf("new heap์ ์ฃผ์ : %p\n", heap3);
printf("new heap number: %d\n", *heap3); //์์์๋ ๊ฐ์ ์ด๊ธฐํ๋จ
- heap3์ mallocํ๋ฉด ์์ ์ดํด๋ณธ First-Fit์ ๋ฐ๋ผ heap3์๋ heap2์ ์ฃผ์๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- heap3์ ๊ฐ์ ์คํํด์ ํ์ธํด๋ณด๋ฉด ์ด๊ธฐํ ๋์ด์๋ค๋ ๊ฑธ ์ ์ ์๋ค.
์์ cํ์ผ์ ์ปดํ์ผํ๊ณ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์คํ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
์ด์ ๊ฐ์ด UAF๋ฅผ ์ด์ฉํ์ฌ ์๋ก์ด heap์ ํ ๋นํด์ค ํ ์ํ๋ ๊ฐ์ ์ ๋ ฅํ ๋ค์ ๊ธฐ์กด heap์ ์คํํด์ ์ต์คํ๋ก์ ํด์ค ์ ์๋ค.
'DreamHack' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
POX ๋ฌธ์ ๋์ปค ํ์ผ ์ ์ - exploitMe (0) | 2022.10.07 |
---|---|
POX ๋ฌธ์ ๋์ปค ํ์ผ ์ ์ - Rotten EGG filter (0) | 2022.10.07 |
POX ๋ฌธ์ ์ ์ ๋ฐ ํ์ด - Rotten EGG filter (0) | 2022.10.03 |