본문 바로가기
ftz 풀이 level14 ftz level14 풀어보겠습니다. 힌트조회 입니다. fgets 함수가 있는것으로 보아 버퍼오버플로우문제임을 알 수 있습니다. 또한 attackme 실행시에 입력을 받으면 바로 종료되기 때문에 이를 방지하기 위한 cat과 파이프를 이용하여 명령어를 사용하는 방법도 생각할 수 있습니다. 그 전과 다른점은 0xdeadbeef 값이 존재할 경우에 쉘을 실행시켜줍니다. 이번에는 따로 쉘코드는 설정안해도 될거 같습니다. 우선 디스어셈블러로 대략의 구조를 보겠습니다. 버퍼에 56바이트를 할당하는데 위에 변수 두개가 있었으므로 대략 구조는 아래와 같이 생각할 수 있습니다. 20(배열)+(dummy)+4(crap)+(dummy)+4(check)+(dummy)=56 그리고 빨간표시로된 부분을 보게 되면 에서 입력받는 .. 2017. 1. 3.
ftz 풀이 level13 ftz level13 풀어보겠습니다. 힌트조회부터 하겠습니다. 계속 비슷한 형식의 문제가 나오는거 같습니다. 이번에는 버퍼오버플로우 취약점이 존재하나 i의 값이 0x1234567 이 아니면 바로 종료되는 문제입니다. 저 해당조건을 우회할 수 있는 버퍼오버플로 공격을 하는게 목적이 될거 같습니다. 우선 늘 해왔던대로 tmp디렉터리에 옮겨주고, 디스어셈블러로 한번 구조를 보겠습니다. ebp에 i의 값(0x1234567)을 넣어 에서 비교를 하여 0x1234567이 아닐경우 종료하는 구조입니다. 1024(배열)+24(dummy)+4sfp(base pointer)+4ret(return address)=1056 이러한 구조로 생각할 수 있는데 24바이트의 더미 어딘가에 0x1234567값(비교를 위한 값)이 존재.. 2017. 1. 2.
ftz 풀이 level12 ftz level12 풀어보겠습니다. 힌트조회 입니다. level11과 유사한 코드이나 이번에는 gets 함수가 있음을 볼 수 있습니다. 저번과 다르지만 gets 함수의 BOF 취약점을 이용한 공격을 하겠습니다. 우선 메모리먼저 살펴보겠습니다. level11과 매우 유사합니다. 우선 배열할당과 크기는 전과 같습니다. 256(배열)+8(dummy)+4sfp(base pointer)+4ret(return address)=272 저번과 같이 환경변수를 만들어 268바이트에 아무문자나 넣고, 뒤에 4바이트는 쉘코드의 주소를 넣어 쉘코드를 실행시키도록 하겠습니다. 우선 환경변수를 만들어 줍니다. 쉘코드 앞에는 NOP를 붙여줍니다. 함수 점프시 메모리주소가 처음쉘코드에 안잡힐 수도 있습니다.쉘코드와 환경변수 설정은.. 2016. 12. 31.
ftz 풀이 level11 ftz level11을 풀어보겠습니다. 우선 힌트 조회 입니다. 힌트에는 C언어가 있습니다. strcpy 명령을 보니 버퍼오버플로를 생각할 수 있습니다. 그리고 attackme라고 자신을 공격해 달라는 파일이 떡하니 있습니다. 힌트로 코딩된 파일로 유추할 수 있습니다. attackme 파일을 실행해보면 뒤에 나오는 인자를 그냥 그대로 출력해 줍니다. 배열의 크기가 256이니 그 보다 큰 인자를 넣어서 버퍼 오버플로를 일으킨다고 생각하면 될거같습니다. 본격적인 작업을 하기전에 디버깅을 위해서 attackme 파일을 tmp 디렉터리 안으로 옮겨줍니다. 저는 attack이라는 파일로 복사하였습니다. 메모리 분석을 위하여 gdb [파일명] 을 사용하였습니다. gdb에 관한 명령어는 아래 URL을 참조하시기 바랍.. 2016. 12. 28.
ftz 풀이 level10 ftz level10을 풀어보겠습니다. 우선 힌트를 조회해 보니 대화방이 있는데 공유메모리를 이용하여 만들어 졌고 key의 값을 알려주었습니다. 그리고 대화를 도청하여 패스워드를 도출하라는 문제 입니다. 레벨을 다 풀면 소스를 지워달라고 하는 군요.. 우선 이번 문제에서는 공유메모리와 key_t 에 포커스가 맞추어져 있는거 같습니다. 그리고 소스를 지우라는거 보니 코딩도 하는거 같습니다. 우선 공유메모리에 대해 짚고 넘어가겠습니다. 공유메모리 : 보통 프로세스는 각자의 메모리공간을 가지게 되는데, 프로세스간의 통신이 필요해져 여러프로세스가 한 메모리 공간을 사용하며, 서로 통신을 하고 수행 속도도 원할하게 만드는 메모리 기술 입니다.쉽게 말해 한 메모리공간을 여러 프로세스(프로그램)가 사용하는 것 입니다.. 2016. 12. 12.
ftz 풀이 level9 ftz level9를 풀어보겠습니다. /usr/bin/bof 의 소스가 나오면서 이를 이용하여 level10의 권한을 얻으라고 합니다. 간단한 소스 분석부터 하겠습니다. #include #include #include main(){ char buf2[10]; //char 형으로 buf2 배열 선연 10바이트 char buf[10]; //char 형으로 buf 배열 선연 10바이트 printf("It can be overflow : "); //해당 문장 출력 fgets(buf,40,stdin); //입력받은값을 buf에 저장하는데 크기는 40바이트 이하여야 합니다. if ( strncmp(buf2, "go", 2) == 0 ) //buf2의 앞 2바이트와 "go" 를 비교했을때 같으면 { printf("G.. 2016. 12. 7.