분류 전체보기(333)
-
FTZ level17 포인터 변조 2
level17번 문제입니다. 힌트를 봐보겠습니다 이번 문제에서는 level16번 문제와 선언된 변수들과 스택의 구조가 모두 똑같습니다 다른 점은 level16에 있던 shell()함수가 없다는 것입니다. 따라서 우리가 직접 환경변수에 쉘 생성코드를 작성해서 주소를 구합니다 그리고 포인터 call 을 환경변수의 주소로 초기화 시켜주면 call() 함수가 실행될 때 쉘이 떨어지게 될것입니다 쉘을 생성하는 코드는 따로 정리해놓았습니다. 아래 링크를 들어가시면 됩니다 쉘 생성코드 작성법
2017.05.28 -
FTZ level16 포인터 변조 1
level16에서 새롭게 등장한 개념은 " 함수포인터 " 입니다 #include void function(){ printf("Hello\n"); } int main(){ void (*call)() ; // 매개변수와 리턴값이 없는 함수 포인터 선언 call = function ; // function 함수의 메모리주소를 call 함수포인터에 저장 call(); // 함수포인터로 function 함수를 호출한다 // => "hello" 출력 // 또는 한 번에 선언과 초기화를 같이 시켜주는 방법도 가능하다 // void (*call)() = function; // call(); } 문제를 보면서 해당 개념을 다시 익혀보도록 하겠습니다 힌트파일의 소스를 복사해서 임시로 파일을 생성합니다 ( attackme파..
2017.05.23 -
FTZ level15 분기 루틴 2
level15는 level14문제에서 int형 변수에서 포인터형 변수로 바뀌고 나머지는 모두 똑같은 문제입니다 바로 문제 풀이 시작하겠습니다 힌트파일에 attackme 실행파일의 소스가 들어있습니다 해당 파일을 tmp 디렉토리에 복사하고 컴파일 시킨후 gdb분석을 시작합니다 ( gdb분석을 통해 각 변수들의 메모리 위치를 파악한다 ) 먼저 소스코드 실행 흐름을 파악해보겠습니다 [1] Procedure Prelude $0x38 = 56byte만큼의 공간을 지역변수에게 할당한다 [2] fgets() fgets( buf , 45 , stdin ) 45만큼의 문자열을 입력받고, buf에 저장한다 * buf의 시작주소를 알 수 있습니다 ( 에서 "0xbffffffc8" ..
2017.05.23 -
FTZ level14 분기루틴 1
level14 에서는 특별한 함수나 개념은 없고, level13 스택가드 문제와 비슷한 개념의 문제입니다 바로 문제 풀이에 들어가겠습니다. 우선 힌트를 열어봅시다 공격대상인 attackme의 코드를 옮겨 놓은 모습입니다. 특별히 어려운 코드는 없어보입니다 스택가드와 비슷한형태로 check변수의 값을 비교해서 프로세스를 실행할지 말지의 여부가 결정됩니다 힌트파일의 소스를 복사해서 새로운 실행파일을 만들어 줍시다 ( attackme파일에 break를걸어주고 파일을 실행할 권한이 제한되어 있습니다.. ) 해당 소스파일을 컴파일 시키고 gdb를 실행시켜줍시다 메인 함수를 디스어셈블하고 프로세스의 흐름을 읽어보도록 하겠습니다 [..
2017.05.23 -
FTZ level13 스택 가드 ( Stack Guard )
level13 문제는 스택가드에 대한 문제입니다 스택가드란 버퍼오버플로우의 방어책으로 제시된 방법입니다 스택가드의 작동 원리는 간단합니다. 아래 소스를 예로들어서 설명하겠습니다 #include #incluse int main(){ long guard = 0x12121212; // 스택가드의 역할을 수행한다 char str[100]; gets(str); if ( guard != 0x12121212 ){ // 스택가드의 값이 변하면 해당 프로세스를 종료시킨다 printf(" It is Buffer OverFlow !! Proccess is stopped "); exit(0); } printf(str); return 0; } 작성한 소스코드를 기반으로 Stack구조를 그려보았습니다 ( dummy는 무시합니다 ..
2017.05.23 -
FTZ level12 Buffer OverFlow
level9 에서 버퍼오버플로우를 이용해서 RET 메모리 공간을 변질시키는 공격법을 말한 적이 있습니다level12 에서는 RET 메모리공간의 값을 변질시켜서 level13쉘을 떨어지게 해보겠습니다 문제풀이 들어갑니다 힌트에서는 level13권한으로 setuid가 걸려있는 attackme 파일의 소스가 보입니다level13권한으로 setreuid을 실행하고 있고 gets() 함수로 문자열을 입력받습니다문자의 길이에 대한 제한이 없어서 오버플로우공격에 대해 취약점을 가지고 있음이 확인됩니다어떤식으로 공격을 해야할지 파악하려면 gdb로 해당 파일의 메모리 구조를 분석해야합니다 [level13 @ftz level13] gdb // gdb실행(gdb) file attackme // atta..
2017.05.23