-
Use After FreeHack/Pwnable 2015. 7. 8. 02:35
UAF 즉, Use After Free는 malloc으로 동적할당한것을 free하고 재사용을 할경우에 터지는 취약점이다.
대충 하나 예제를 보자
#include <stdio.h>
#include <stdlib.h>
typedef struct samplestruct{
int number;
} sample;
int main()
{
sample *one;
sample *two;
one = malloc(256);
printf("[1] one-> number: %d\n", one->number);
one->number = 54321;
printf("[2] one->number : %d\n",one->number);
free(one);
two = malloc(256);
printf("[3] two->number:%d\n",two->number);
return 0;
}
sample이라는 구조체를 하나 생성하고 멤버에는 넘버가 존재한다.
그리고 메인에선 one과 two를 구조체포인터 변수로 등록해준다음, one에 256바이트만큼 malloc을 해준다.
그리고 초기화하지않은상태에서 one구조체변수의 number를 출력해주고, 뒤에선 54321을 초기화해주고 출력, 또 마지막으로
two를 동적할당해주고 printf를 해준다. 실행결과를보면 충격적이다.
root@CodeShell:/home/songsari/uaf# ./test
[1] one-> number: 0
[2] one->number : 54321
[3] two->number:54321
보면, 초기화하지않을땐 0, 초기화한후 54321 여기까진 지극히 정상적이지만 뒤에서 동적할당만 해줬을뿐인데 자동으로 54321이 들어간다.
응? 이건 무슨상황이지? 자동으로 덮여씌워졌다.
그럼 포인터 주소값으로 확인을 해보면된다.
root@CodeShell:/home/songsari/uaf# ./test
[1] one-> number: 0
[2] one->number : 54321
[*]Address : 0x883010
[3] two->number:54321
[*[Address : 0x883010
같은주소로 덮어씌워진다.
free(one)을 해주는데 왜 two가 해당값을 가지냐,
free(one)을하면 동적할당이 해제되지만 one이 사용하던자리에는 값이 남아있다.
two를 동적할당해주게되면 그 위치에 동적할당을 해주기때문에 그 값을 그대로 가지게되는것이다.
[참조: cd80.tistory.com]
성우형 감사합니다
'Hack > Pwnable' 카테고리의 다른 글
PinTool 설치 (0) 2015.07.24 printf disassembly (0) 2015.07.12 ARM 공부 (0) 2015.07.04 Memory Leak (0) 2015.06.27 Windows BOF (0) 2015.06.25