[FTZ] level14 level14 문제를 확인해 보면 버퍼오버플로우나 포맷스트링으로 푸는 문제이다. #include #include main() { int crap; int check; char buf[20]; fgets(buf,45,stdin); if (check==0xdeadbeef) { setreuid(3095,3095); system("/bin/sh"); } } 코드를 확인하면, 문제를 풀기 위해 필요한 정보는 두가지이다. 1. fgets 함수에서 길이값 검증을 하지 않아 buf의 원래 길이는 20 bytes이지만 최대 45 bytes까지 입력 가능하다. 2. 쉘을 획득하기 위해서는 if함수를 통과해야하는데 이를 만족시키기 위해서, check 변수가 0xdeadbeef여야 한다. gdb를 통..
[FTZ] level13 level13으로 로그인하고 문제를 확인해보면 이번 문제도 bof를 하는 문제이다. #include 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); } } 코드를 확인해 보면, i, buf 변수 두 개가 있고, main함수에서 인자를 입력받아서 strcpy로 buf에 넣는다. 이곳이 길이 값을 확인하지 않기 때문에 취약하다. 이 부분을 오버플로우 해서 RET 값을 바꾸면 될..
[FTZ] level12 level12를 엽니다. 이문제도 level11처럼 bof를 이용할 수 있는 문제이다. str 변수에 대해서 gets함수에서 길이 제한 없이 받기 때문이다. str의 길이는 256bytes이지만, gdb로 분석해 보면 264bytes까지 할당되는 것을 통해서 8bytes의 dummy 부분이 있는 것을 알 수 있다. gets으로 변수를 입력받을 때, RET까지 덮어쓰면 가능 할거 같다. level11과 level12의 차이점이라면, level11은 main함수의 인자값으로 받기 때문에 ./attack 인자값으로 바로 전달이 된다면, level12는 main함수가 실행되고 나서 입력값을 넣기 때문에 | (파이프라인)을 이용해야 한다. level11의 환경변수를 이용해서 푼 것과 같은..
[FTZ] level11 level11 로 로그인을 하고 파일을 확인해 보면, hint 파일과 attackme 라는 파일이 있다. hint 안에는 코드는 attackme의 코드에 해당되는 거 같다. 이번 문제도 저번 level9와 같이 bof를 이용해야 하는 문제이다. #include #include int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); } 코드를 확인하게 되면, main 함수에서 인자값을 받는다. ▶ [참고] 2023.01.31 - [시스템/시스템 해킹] - main 함수 인자 그리고, strcpy라는 취약한 함수가 있는데 특별히 길이 ..
[FTZ] level10 level10 로 로그인한 후에 문제를 보면 공유 메모리를 알고 있어야 한다. [공유메모리(Shared Memory)] 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리. IPC(Inter-Process Communication)의 일종. - 데이터 공유 방식 1) 커널이 생성된 공유 메모리를 통해서 프로세스간 데이터 공유 2) 공유된 메모리 영역을 통해서 통신 3) 단순히 공유 메모리를 point 함으로써 프로세스에서 사용되는 메모리가 증가되지 않는다. - Share memory를 사용하기 위해 필용한 헤더 및 함수 #include #include int shmget(key_t key, int size, int shmflg) // shared memory 생성 또는..
[FTZ] level8 level8로 로그인을 해서 문제를 확인해 보았다. find명령어를 이용해서 파일 용량이 2700인 파일을 찾아보면 될 것 같다. find / -size 2700 2>/dev/null 하지만 위의 명령어로 파일을 찾아도 나오지 않았다. 그래서 find에서 찾을 수 있는 파일 크기를 찾아 보았더니 사이즈 단위로 다양했다. b : 블록단위 c : 바이트(byte) k : 키로 바이트 w : 워드 (2byte) m : 메가 바이트 g : 기가 바이트 모든 단위로 검색을 하니까, 읽을 수 있는 파일이 found.txt 밖에 나오지 않아 읽어보았다. 사용자의 패스워드 정책이 들어 있는 /etc/shadow 의 형식과 동일한 결과가 나왔다. level9:$1$vkY6sSlG$6RyUXtNME..
[FTZ] level7 level7로 로그인을 했다. 그래서 /bin/level7을 실행시켜 보았는데 진짜 Insert The Password : 창이 뜨는데 입력값을 넣고 엔터를 누르면 cat /bin/wrong.txt : No such file or directory 라는 에러메시지가 뜬다 level7 파일이 실행될 때, cat /bin/wrong.txt가 실행되는 거 같은데 해당 위치에 파일이 없어서 오류가 난다. [참고] 여기서 어떻게 문제를 풀어야 하나 했는데 구글링 해보니까 로컬 구축한 서버들 중에 /bin 폴더 안에 wrong.txt 파일이 없는 경우가 있다고 한다. 그러면 처음에 서버 구축을 위해서 사용했던 root 계정으로 로그인한 후에 wrong.txt 파일을 아래 내용처럼 넣어서 만들..