zj3t

email: euntaejang@gmail.com

Latest Posts

FTZ-level13

By 오후 8:27 ,

#include <stdlib.h> 

main(int argc, char *argv[])
{
   long i=0x1234567;
   char buf[1024];

   setreuid( 3094, 3094 );
   if(argc > 1)
   strcpy(buf,argv[1]);

   if(i != 0x1234567) {
   printf(" Warnning: Buffer Overflow !!! \n");
   kill(0,11);
   }
}

kill 함수가 모지 라고 생각했지만 프로그램을 이해하기에는 꼭 알고 넘어갈 필요는 없었습니다. 그냥 level11 문제에 i를 변환 시키면 안된다는 것이 추가 됬을 뿐입니다.


일단 이렇게 정리를 할 수가 있겠습니다. gdb어떤 버젼?? 부터 변수가 할당된 후 dummy가 추가 됬다고 합니다. level11 첫 버퍼오버플로우를 설명할 때 설명드렸던거 같아요~~


일단 무조건적으로 일일이 시험을 해봤습니다. 1036에서 변수 i의 값을 침범했습니다. 그럼

 처음부터 변수 i의 거리는 1035일까요?? 아닙니다. 우리는 문자 \x90, 즉 문자열을 일일히

 스택에 덮어씌었었습니다. 그렇다면 NULL문자는?? 문자열의 끝에는 항상 NULL문자열이

붙습니다. 따라서 \x90을 1035개 입력했을 때, 1036번째에는 NULL문자열이 들어가게 됩니

다. 1036개의 \x90을 입력했을 경우에는 1037번째에 NULL문자열이 들어가게 되고, 변수 i

의 영역을 침범했다는 메시지가 뜨게됩니다. 따라서 i까지의 거리는 1036이고 변수 i는 

1037번째 부터 값이 대입되어야 합니다.





level11, level12와 마찬가지로 환경변수에 /bin/sh셸 코드를 넣어 실행하는 방법으로 문제를 풀었습니다. 생략된 부분이 있으면 level11,level12를 보고 오시면 됩니다.

You Might Also Like

0 개의 댓글