use after free ๋ผ๋ ์ทจ์ฝ์ ์ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ Code/Data/Heap/Stack์ผ๋ก ๋๋ ์ ์๋๋ฐ Code+Data=Binary์์ญ Heap=ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์ ํ ๋น/ํ์/์ ์ด ํ ์ ์๋ ์์ญ Stack=ํจ์ ๊ฐ๋ณ๊ณต๊ฐ(์คํํ๋ ์),์ธ์์ ๋ฌ๋ฑ์ผ๋ก ์ฌ์ฉํ๋ ์์ญ ์ด๋ ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค ์ด ์ค์์ UAF๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ์์ญ์ ์๋ชป ๋ค๋ค์ ๋ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ด๋ค.
์๋์ ์์ค๋ฅผ ๋ณด์
#include <stdio.h>
#include <stdlib.h>
typedef struct UAF
{
int number;
}uaf;
int main(void)
{
uaf *one;
uaf *two;
one = malloc(100);
printf("one->number:%d\n",one->number);
one->number=12345;
printf("one->numver:%d\n",one->number);
free(one);
two=malloc(100);
printf("two->number:%d\n",two->number);
}
์์ค๋ฅผ ์คํํ๋ฉด
์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ์ ์๋ค. ๊ณผ์ฐ ์ด๋ ๊ฒ ๋๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ์ฐ๋ฆฌ๋ free๋ฅผ ์ด์ฉํด์ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ ๊ฑฐํด์ one ์ดํ two์๋ ๊ฐ์ด ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ง๋ง free๋ฅผ ์ด์ฉํด์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ค๊ณ ํด๋ ๊ฐ์ ์ง์์ง์ง ์๊ณ ์๋ค.
๊ทธ๋์ two ๋ํ 12345๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
๊ณผ์ฐ ์ฃผ์๊ฐ์ ๋ณด๋ฉด ์ด๋จ๊น?
์์์ ๋ณผ์ ์๋ฏ ๊ฐ์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ์ ์ฐธ์กฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ฌํ ์ทจ์ฝ์ ์ use after free ์ทจ์ฝ์ ์ด๋ค.
[์ฐธ๊ณ ]http://cd80.tistory.com/40
'Security Study > System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
integer overflow (0) | 2015.10.22 |
---|---|
system 24byte shellcode (0) | 2015.10.15 |
memory ์์ญ (0) | 2015.10.07 |
C์ธ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (0) | 2015.09.21 |
race condition(๊ฒฝ์ ์กฐ๊ฑด)attack (0) | 2015.09.17 |
๋๊ธ