일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Sqix
- libpcap
- Overwatch League SaberMetrics
- vim
- vi 외부 명령어
- vi
- 오버워치 세이버메트릭스
- #Best of the Best #OS #MINT64 #Sqix
- #Qt Creator
- >
- Network
- #
- FTZ 레벨2
- BEST of the BEST
- libtins
- #IntelManual
- 인터럽트
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- C++11
- command
- KASAN
- 오버워치
- #MINT64 #Sqix
- linux
- Find
- ftz
- Today
- Total
Sqix
FTZ Level3 본문
깨진 한글 부분만 따로 검색했습니다.
다음 코드는 autodig의 소스코드이다.
/* 소스 코드 */
이를 이용하여 level4의 권한을 얻어라.
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
문자열 형태로 명령어를 전달하려면, " "를 달아주어 파라미터로 전달하면 됩니다.
또한, 동시에 여러 명령어를 사용하려면 ; (앞의 명령어의 성공 유무와 상관없이 실행), & (앞의 명령어가 성공하면 실행), && (명령 동시에 실행. 앞의 명령은 백그라운드로 실행됨)을 씁니다.
코드를 대충 둘러봐도 위험한 요소가 몇 개 보이네요.
strcpy, strcat 함수를 사용했는데, 해당 함수는 memory boundary 검사를 안 해서 BOF 취약점이 발생하는 함수입니다.
또한, system 명령어는 매우 위험한 함수로, 여기에 들어오는 인자를 조작해서 자신이 의도한 명령어를 실행시킬 수도 있습니다.
소스 코드를 일단 분석해 봐야 겠습니다.
100byte를 cmd 변수에 할당하고, 하나의 입력을 받아 외부 입력이 1개인지 검사합니다. 그 후, dig @ { 명령어 } version.bind chaos txt 라는 문자열을 만듭니다.
마지막으로 system(cmd)를 실행시킵니다. 즉, cmd 문자열이 /bin/sh와 my-pass를 실행시킬 수 있도록 해야 할 것 같네요.
우선 autodig를 실행해 보는게 좋을 것 같네요. level4 setuid가 걸린 autodig 파일을 찾아봅시다.
/bin/autodig이네요. -rwxr-x--- 권한입니다.
동시에 문자열로 여러 명령어를 한번에 넘기려면 "{명령어};{명령어};" 형식으로 인자를 전달하면 됩니다.
저는 shell을 따는게 목적이니, "AAAAA; /bin/sh;"를 파라미터로 넣어 보겠습니다.
그렇게 실행하니 바로 level4 명령어를 얻을 수 있었습니다.
이는 system 함수 파라미터로 "dig @ AAAAA version.bind chaos txt" 가 먼저 들어가고, 해당 명령이 실행된 직후 "/bin/sh"가 들어가기 때문입니다.
즉 두 번의 실행이 이루어져서 저 명령어가 실행되고, 다음에 /bin/sh 명령어가 실행되어서 쉘을 딸 수 있는 것입니다.
이제 my-pass를 하여 비밀번호를 얻어 버리면 끝입니다.
'Wargame > FTZ' 카테고리의 다른 글
FTZ Level6 (0) | 2018.06.12 |
---|---|
FTZ Level5 (0) | 2018.06.12 |
FTZ Level4 (0) | 2018.06.12 |
FTZ Level2 (0) | 2018.06.11 |
FTZ Level1 (0) | 2018.06.11 |