SystemHacking/FTZ(22)
-
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 -
FTZ level11포맷 스트링 버그를 이용한 풀이
FTZ 11번문제는 버퍼오버플로우공격을 시도해도 공격이 이루어지지만, 포맷스트링 버그를 사용해서 문제를 풀어보겠습니다.포맷스트링 버그에 관한 자세한 설명은 다음 링크에 있습니다. http://itsaessak.tistory.com/115매우 쉽게 설명해놓았습니다. 읽어보고 해당 문제를 푸시면 많은 도움이 될겁니다 [ 그림1 ] printf()함수의 완벽한 형태가 아니죠 ? 포맷 스트링 버그 취약점이 생깁니다 [ 그림2 ] 취약점을 가진 해당 프로그램의 인자로 " %8x " 스트링을 넣어서 메모리 구조를 살펴볼 수 있습니다 4번째 " %8x "스트링에서 처음입력한 AAAA 문자열이 존재하고 있음이 보입니다이 부분이 우리가 문자를 입력할 수 있는 지점입니다. 해당 지점에 우리가 원하는 주소를 입력시킵시다우리..
2017.05.23 -
FTZ level10 공유메모리
level10 문제는 공유메모리에 관한 문제입니다. 공유메모리와 관련된 개념부터 알아보겠습니다 공유메모리란 여러 프로세스들이 특정한 메모리 공간을 공유해서 데이터를 주고받을 수 있도록 하는 메모리 공간입니다 공유메모리를 사용하는 소스코드를 살펴보도록 합시다 [1] shmget함수 shmget( key_t key , int size , int shmflg ) key_t key 공유 메모리들을 구별할 수 있게하는 식별 번호 int size 공유 메모리의 크기 int shmflg 동작 옵션 => IPC_CREAT key에 해당하는 공유메모리가 없다면 새롭게 생성해라, 있다면 접근권한을 지정해주어야한다 => IPC_EXCL 공유메모리가 이미 있다면 실패로 반환하고 공유메모리에 접근 불가능 ex) int main..
2017.05.23 -
FTZ level9 Buffer OverFlow
level9는 버퍼오버플로우에 관한 문제입니다 하나의 프로그램을 실행하면 해당 프로그램에서 사용하는 환경변수, 지역변수, 함수 들이 메모리에 쌓인다 그 메모리 구조를 스택(Stack)이라고 하고 스택은 특이한 특징을 가지고 있다 버퍼오버플로우는 데이터를 넘치게 함으로써 원하는 메모리 공간에 자신이 원하는 값을 위치시키게 하는 기법입니다 함수의 리턴주소(RET)를 침범하는 경우가 대표적입니다 해당 문제에서는 RET를 공격하지 않고 특정한 변수공간을 침범해서 데이터를 입력시키는 과정입니다 문제를 보면서 이해를 돕도록 하겠습니다 " /usr/bin/bof " 의 소스를 해석해보자면 [1] char형 변수 buf 와 buf2 가 선언되었습니다 [2] fgets( buf , 40 , stdin..
2017.05.23