풀이
[해커스쿨] FTZ level19 풀이과정
2017/01/12 - [Study :)/FTZ] - [해커스쿨] FTZ level18 풀이과정 main() { char buf[20]; gets(buf); printf("%s\n",buf); } 힌트를 보면, buf사이즈는 20Byte이다. buf에 쉘코드를 넣기에는 작은 사이즈이므로, 환경변수에 쉘코드를 넣고 시작하자. //getenv.c main(){ printf("[%08p]\n", getenv("SHELL") ); } ShellCode(41Byte) \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe..
[해커스쿨] FTZ level18 풀이과정
2017/01/12 - [Study :)/FTZ] - [해커스쿨] FTZ level17 풀이과정 #include #include #include #include void shellout(void); int main() { char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(STDIN_FILENO,&fds); if(sel..
[해커스쿨] FTZ level17 풀이과정
2017/01/12 - [Study :)/FTZ] - [해커스쿨] FTZ level16 풀이과정 힌트 보자..level16에서는 shell()함수가 따로 존재하여 shell()함수에 setreuid()함수가 들어있었다.그래서 printit()함수를 불러오는 주소에 shel()함수 주소를 대체해서 넣어서 문제를 풀었다면,level17에서는 shell()이라는 함수가 따로 없고 main()함수에 포함되어 있다.문제를 풀기 전 예상을 해보면, main()함수에 call(); 명령어를 통해서 원하는 주소의 값을 실행 하는 방법과, 앞서 풀었던 BOF방식으로 RET주소에 원하는 주소를 넣는 방법이 있을 것 같다고 판단된다.이렇게 2가지 방법을 생각해 두고 문제를 풀어보자.... 먼저, hint의 내용을 /home..
[해커스쿨] FTZ level16 풀이과정
2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level15 풀이과정 힌트 볼깝숑~ㅋㅋㅋㅋㅋshell()함수가 정의되고, printit()함수가 정의되고, main함수에서 printit()함수가 불러지는 것을 확인 할 수 있다.딱 보니 감이 오지 않는가? shell()함수는 정의해놓고 안불러오는것을 보니, printit()함수를 불러오는 버퍼에 shell()함수의 주소를 대체해서 넣으면, printit()함수가 아닌 shell()함수를 불러오게 되면서 해결될 것 같지 않은가? 음하하하하하하하하하하하하하하~ㅋㅋㅋ; [ebp-16]에 "0x8048419"주소를 넣는다. 그리고 부분에보면 [ebp-16]의 값을 eax에 넣고, eax의 값으로 call을 한다. 이부분이 분명 prin..
[해커스쿨] FTZ level15 풀이과정
2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level14 풀이과정 level14(http://eunice513.tistory.com/59)랑 매우 흡시하지만.. 이번엔 check라는 변수가 포인터이다. 이것만 다르고 다 똑같다.gdb로 파헤쳐보자~ 0x38(56byte)만큼 공간 할당하고... 사용자로 부터 입력받은 값을 [ebp-56]에 저장하고..[ebp-16]의 주소를 eax에 넣어서 , eax에 있는 주소의 접근한 값이 "0xdeadbeef"인지 확인.. 맞으면 setreuid를 실행...일단, 사용자로부터 입력받은 값은 [ebp-56]이고, "0xdeadbeef"의 주소가 들어있는 값은 [ebp-16]이니까, 40byte만큼 떨어져있다는것을 확인 할 수 있다.에 B..
[해커스쿨] FTZ level11 풀이과정
2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level10 풀이과정 힌트!!! 보자고~ attackme 라는 파일이 보이고, 힌트에는 어떤 소스코드가 들어있다. attackme 를 실행시켜 보니. 역시 소스코드데로 실행된다. 즉, 힌트가 attackme의 소스코드 인것이다. 그러면 이 문제는 어떻게 풀어야 될까... 소스 코드를 보니 단순히 256byte의 str배열을 선언하고 setreuid를 실행하고 argv[1]의 인자값을 str에 복사하고 str를 출력하는게 끝이다. 그런데.. strcpy를 사용하는 것을 보니 이또한 버퍼 오버플로우에 취약하다. level9 풀이(http://eunice513.tistory.com/54)를 보면 Buffer Overflow에 대한 설명..
[해커스쿨] FTZ level10 풀이과정
2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level9 풀이과정 힌트를 보자...(맨날 똑같은 시작문구 ㅋㅋㅋ) 공유메모리... key_t의 값이 7530... 뭔지 모르겠지만, 일단 공유 메모리에 대해서 검색해보자. 공유 메모리에 대하여 : http://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory 위의 그림과 링크를 참조해보면, 2가지 이상의 프로세스들이 공유하는 메모리공간을 말한다. 그리고 공유메모리에 접근을 하기 위해서는 고유의 공유메모리 key 를 통해서 접근가능해지며, 이 key값을 통해서 다른 여러개의 공유메모리들과 구분되어 질수 있다.또, ipcs 명령어로 공유메모리 정보를 알 수 있으며, int shm..
[해커스쿨] FTZ level9 풀이과정
2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level8 풀이과정 힌트를 봐야 겠지? 힌트를 보니 Buffer Overflow 문제인 것같다. 버퍼 오버플로우는 어떻게 발생하는가? 버퍼 오버플로우를 이해하기 위해서는 먼저 프로그램이 데이터를 어떻게 저장하고 어떻게 함수가 호출되는지 알아야 한다. 하나의 프로그램은 수 많은 함수로 구성되어 있는데 이 함수가 호출될 때, 지역 변수와 복귀 주소(Return Address)가 스택(Stack)이라 하는 논리 데이터 구조에 저장된다. 복귀 주소가 저장되는 이유는 함수가 종료될 때 운영체제가 함수를 호출한 프로그램에 제어권을 넘겨야 하는데, 이 복귀주소가 없으면 함수가 종료된 후 어떤 명령어를 수행해야 할 지 모르기 때문이다. 버퍼 오..