Buffer Overflow

    Level 12

    Level 12

    힌트를 확인해 보자 ! gets() 함수의 취약점을 이용하는 문제다. gets() 함수는 입력받는 길이의 제한없이 입력가능하다. 이 때문에 str[256] 크기를 넘어서 데이터를 덮어 씌울 수 있게 된다. 기본적인 버퍼 오버플로우를 이용한 공격을 하라는 문제이다. gdb를 이용하여 attackme를 확인해보자 ! 위의 힌트에서 256byte만큼 char형 배열을 할당하는데, 확인해보니, 264byte만큼 스택에 공간을 할당한다. gcc 버전에 맞춰 dummy 데이터까지 포함된 공간을 할당하게 된다. 스택공간의 주소를 확인해 보자!! 프로그램을 수행하여 AAAA를 입력하였다. 그리고 esp의 위치부터 확인을 해보니 A(아스키코드로 41)이 할당된 위치가 0xbffffa20 이었다. 거기서 264Byte 만..

    Level 11

    Level 11

    11번 문제부터는 BOF 문제들이 많다. 하나하나 해결해 나가보자. 소스를 실행하면 3092 권한을 가지고 문자열을 str에 복사한 후 출력하는 내용이다. 여기서 자세히 봐야 하는 부분은 !! strcpy(str, argv[1]); 이 부분이다. strncpy() 함수와는 다르게 ! strcpy는 어느정도 크기를 복사해야 할지 명시되어 있지 않다. 복사해야 될 문자열의 크기만큼 복사하게 된다. 그렇게 되면 str변수보다 argv[1]의 크기가 더 크더라도, str 배열의 크기를 넘어서 복사된다. 다른 메모리를 침범하게 되는 것이다. 이 부분을 이용하여 문제를 푼다. 정말 단순한 BOF 문제이다. 3092를 확인해 보면 level12의 id임을 확인할 수 있다. 그럼 실행파일를 gdb를 이용하여 분석을 시..