WARGAME/FTZ [system] (20) 썸네일형 리스트형 ftz level 12 [level12] 이번 문제도 역시 오버플로우. 왠지 level11 과 버퍼 크기도 동일한게 비슷해보이는데 한번 /tmp 로 이동해 똑같이 .c 파일을 만들고 컴파일 한 후 디버깅해보자. 후후... gets 함수 위험하다고 알려준다. 디버깅해보면, 진짜 level11 이랑 똑같아 보인다. str[256] + dummy[8] + SEP[4] + RET[4] = 272 바이트. 그냥 level1 과 똑같이 환경 변수에 쉘코드를 담은 변수를 선언해두고 해당 주소를 ret 위치에 오도록 264 바이트를 nop 으로 채우고 환경 변수 주소를 입력해주어 실행하자. 환경변수 선언! 을 해야하지만 앞서 level11 에서 만들어뒀으니 패스, 이 후 환경 변수 주소를 출력해주는 실행 파일도 그대로 사용. 알아낸 익스 코드 담긴 환경 변수.. ftz level 11 [level11] 이번에도 힌트는 소스! 딱봐도 strcpy 를 써서 오버플로우 취약점을 이용해서 쉘을 따내는 문제 같다. 한번 ls로 attack 실행파일을 확인하고 실행시켜보자. 세그먼테이션 폴트.. /tmp 로 이동해 힌트의 소스를 긁어 attack.c 를 만들고 컴파일하여 디버깅 해보자. 컴파일까지 해서 gdb 로 확인해보면, 스택의 형태가 아마 0x080483c7 : lea eax, [ebp-264] 에서 264 바이트를 할당해주고 있는 것을 볼 수있고, str 은 256 바이트이기 때문에 둘의 차이인 8바이트가 더미의 크기가 될 것이다. 혹은 0x08048397 : sub esp, 0x108 과 (264) 0x080483a7 : sub esp, 0x8 을 보고 (8) 즉, 총 272 바이트 만큼 스택을 할당해주.. ftz level 10 [level10] 공유 메모리라는 단어가 보이고, key_t 의 값도 주어졌다. 우선 잘 모르겠으니 리눅스 공유 메모리를 구글링해보자. *** ipcs 명령어 : OS에서 프로그램이 사용하는 IPC, 공유메모리, 세마포어를 현황 파악 가능 : 옵션 [IPC 확인] ipcs -q [공유 메모리 (Shared Memory) 확인 ] ipcs -m [세마포어 확인 ] ipcs -s 한번 공유 메모리를 확인해보기 위해 ipcs 명령어를 이용해보자. key 0x0001d6a 가 보이고, 소유자는 root, 허가는 0666, 용량은 1028인 공유메모리가 있는 것을 볼 수 있다. 이 값은 10진수로 환산해보면, 힌트에 주어진 key 값인 7530 인 것을 알 수 있다. 이제 공유 메모리에 접속해서 사용할 수 있도록 함수 shmget.. ftz level 9 [level9] 드디어 bof 가 나오는 것 같다. buf2[10], buf[10] 을 할당하고, 역시 bof 취약 함수인 fgets 를 이용해서 buf 에 문자열 입력을 받는 것을 볼 수 있다. 그리고 system("/bin/bash") 를 실행하는 즉, level10 권한으로 쉘을 여는 부분이 실행되려면, buf2 의 맨 앞 두글자가 "go" 여야한다는 걸 알 수 있다. 스택은 아마 buf buf2 SFP RET 이런 식으로 생성될 것이다. 우리는 buf 에 문자열을 입력해서, buf 의 크기인 10 바이트 보다 더 많은 바이트를 입력해, buf2 의 맨 앞 두글자 자리에 "go" 가 들어가도록 오버플로우 시키면 될 것이다. 한번 buf가 10 바이트니까 10글자를 아무거나 입력하고 마지막에 go 를 입력했지만 역시.. ftz level 8 [level8] 용량이라는 말만 보고 dh -h 명령어를 사용했다가 디스크 용량 확인하는 명령어라는 걸 까먹었었다. ㅋㅋㅋㅋㅋ 그래서 다시 검색을 해서 find 와 -size 명령어로 파일 용량을 확인할 수 있다는 걸 알아낸 후, 사이즈 옵션도 몇가지 정리해보자. * find -size 단위 이렇다고 하는데 한번 차례대로 입력해보자. 그런데 이렇게 검색하니까 진짜 permission denied 가 너무 많아서 가독성이 떨어지므로, 2> /dev/null 을 뒤에 붙여 permission denied 와 같은 에러 출력되는 결과를 쓰레기통과 같은 역할을 하는 /dev/null 로 보내고 나머지 출력만 보도록 해보자. 하나씩 입력하다보니, 2700c 로 입력했을 때 found.txt 파일을 볼 수 있었다. 가장 우리가 열.. ftz level 7 [level7] /bin 으로 이동해서 ./level7 실행을 일단 해보자. 아무것도 안 쓰고 일단 엔터를 입력했더니 에러가 출력돼서 구글링 해당 디렉에 level7 파일이 없어서 root 로 로그인해서 직접 작성해주어야 한다고 한다. (?) 암튼 직접 입력해주라니까 따라서 입력을 해주고, 아무일도 없었던 것 처럼 다시 실행. ㅋㅋㅋㅋㅋㅋㅋㅋ 일단 맨 위 힌트에서 2진수 10진수라는 키워드가 힌트로 주어졌기 때문에 바로 -을 1로, _를 0으로 해석해서 띄어쓰기 기준으로 4개의 숫자를 만들어보자. 숫자 4개를 만들어냈다. 109 97 116 101 이제.. 딱봐도 다 알겠지..? 아스키코드표에서 변환한 값을 확인해보자. mate 가 된다. 입력하면, level7 password "break the world" 획득! ftz level 6 [level6] 접속하자마자 이번엔 hint 문구가 출력되었다. 인포샵 bbs 이 뭔지 모르겠지만 엔터를 쳐봤다. 접속하고 싶은 bbs 가 천리안? 천리안을 찾아보니 '미디어로그에서 운영하는 포털 사이트' 라고 한다. 그냥 예전 사이트 같다. 하나씩 입력해보자. 하나씩 입력해봤지만 그냥 해당 아이피로 접속하는 것 같았다. 다른 값을 입력하면 바로 종료되어 버리고 해서 중단을 눌러보았다. 쓸 수 없다고 한다. 그래서 접속하고 싶은 bbs 를 입력하세요 전에 ctrl+c 를 입력해보았다. 그랬더니 바로 level6 쉘이 등장. ls 로 확인, password 를 보면, level7 password " come together" 획득 ! 막 누르다가 풀 수 있는 문제인 것 같다. 인포샵 bbs 해킹을 구글링해도 문제 풀이만 .. ftz level 5 [level5] 임시파일 ?! 일단 심볼릭 링크부터 떠오른다.. ㅎㅎ 암튼 힌트에 따라서 /usr/bin 아래의 level5 을 실행시키면 /tmp 아래에 level5.tmp 가 생성된다는 뜻! 이동해서 level5 를 먼저 실행해보자. 실행을 하고 /tmp 로 이동해서 level5.tmp 가 생성되었는지 확인해봤는데 ? 없다고 뜬다 이 말은 level5 를 실행한 후 바로 지워지는 듯하다. 나는 바로 지워지는 파일을 중간에 저장할 수 있는 심볼릭 링크를 이용했다. level5.tmp 가 생성되었다가 지워질 /tmp 경로, 즉 같은 경로에 imsi 라는 파일을 만들어두고, ln -s 명령어를 이용해 심볼릭 링크를 걸어두면, level5.tmp 파일이 생성되고 삭제되어도 내용은 심볼릭 링크가 걸린 imsi 파일에 기록될 .. 이전 1 2 3 다음