ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Use After Free
    Hack/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

    댓글

Designed by Tistory.