다음 소스코드와 아래의 힌트가 있다


다음 코드는 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.

- 동시에 여러 명령어를 사용하려면?

- 문자열 형태로 명령어를 전달하려면?



아 눈아프다...


일.단.은 setuid가 level4인 파일을 찾아보자.





아이 갓잇@@@@!!!


이제 저 C 소스코드를 분석해보자


만약 argv[ ]의 인자가 2개인 경우 들어온 인자를 "dig@" 뒤에 붙여준다.


예를들어 sabjilkng 라는 문자열을 넣어주면 dig@sabjilking 가 된다.


그리고 그 다음줄은 version.bind chaos txt라는 문자열을 

현재 cmd 명령어 뒤에 추가한다.


우리가 autodig sabjilkng 를 입력하면

$ dig@sabjilkng version.bind chaos txt 라는 명령어를 실행하게 된다.


more hint를 참고하면 동시에 여러 명령어를 사용하려면? 이라고 힌트가 나와 있다.


리눅스에서는 ;(세미콜론)을 사용해서 여러개의 명령어를 ; 로 구분하여 여러 명령어를 입력하고 실행시킬 수 있다.


그렇다면 dig@sabjilkng version.bind chaos txt ; my-pass 명령을 이용하여 level4 의 패스워드를 알아낼 수 있지 않을까?



level3 의 패스워드가 출력되었다 ㅠㅠ


그 이유는 dig가 실행된 다음 my-pass 명령어가 실행되었기 때문이다.


여기서 more hint의 두번째 줄을 보면 문자열 형태로 명령어를 전달하려면? 이라는 힌트가 있다. 그렇다면?


인자를 따옴표로 묶어서 하나의 문자열로 넣어줌으로써 해결할 수 있다.



잇힝 나왔다!!

'pwnable > FTZ' 카테고리의 다른 글

level6  (0) 2016.08.03
level5  (0) 2016.08.03
level4  (0) 2016.08.03
level2  (0) 2016.08.03
level1  (0) 2016.08.02

+ Recent posts