처음 문제를 딱 마주치게 되면 nc(NetCat)를 통해서 접속을 해야합니다.
저는 윈도우에서 nc 접속을 하기 위해 putty 라는 프로그램을 사용하였습니다.
(윈도우 기준으로) 각 PC에 맞는 버젼을 선택하면 됩니다. 위에는 32bit, 아래는 64비트입니다.
그리고 로컬 설정을 한 뒤에, 해당 vm 안에서 ifconfig를 입력하고,
푸티를 통해 접속을 하면 됩니다.
이때, Window - Translation 에 들어가서 Remote character set 를 Use font encoding으로,
Window - Appearance 에 들어가서 글꼴을 한글이 지원되는 폰트로 바꾸고, 크기도 적절하게
바꾸면 한글에 대한 에러는 보통 없이 시작할 수 있습니다.
이제, 실제로 로그인 해서 들어가게 되면 아이디와 비밀번호를 입력해야 합니다.
각각 아이디, 비밀번호에 level1, level1 를 입력하면 로그인이 됩니다.
먼저, 해당 레벨에서는 몇 가지 알아야 할 것이 있습니다.
바로 pwd 명령어, ls 명령어, cat 명령어, find 명령어 그리고 /bin/sh 입니다.
- pwd 명령어
pwd는 현재 디렉토리(작업중인 디렉토리)를 출력해줍니다.
윈도우의 파일 탐색기로 생각해보면 상단에 나오는 현재 폴더를 나타냅니다.
(왼쪽은 평상시 상태, 오른쪽은 경로 창의 빈 공간을 클릭했을 때의 상태)
- ls 명령어
ls는 list 의 줄인말로, 파일 목록을 보는 명령어입니다.
여러가지 옵션이 있습니다.
그중 여기서는 a 와 l 옵션을 사용하였는데,
a 는 모두 보기(숨김파일 등 기본적으로 표시되지 않는 파일) 옵션이고,
l은 자세히 보기 옵션입니다. (--mode=long 의 약자) l 옵션을 주게 되면
파일 형태, 사용권한, 하드링크 번호, owner 이름, group 이름, 파일 크기, 시간(따로 지정하지 않으면 파일이 만들어진 날자)
을 자세하게 나열합니다. 시간은 여섯달 이전 것이면, 시간이 생략되고, 파일의 연도가 포함됩니다.
── 출처 ──
-a / -l / -al 과 같이 사용할 수 있습니다.
- cat 명령어
그냥 cat 명령어를 치게 되면 커서가 깜빡거리고 아무 동작도 일어나지 않게 됩니다.
그 상태에서 아무 말이나 쓴 다음에 엔터를 누르게 되면, 그 말이 출력됩니다.
그리고, 또 cat 명령어 뒤에 파일 이름을 붙이면 그 파일의 내용을 출력합니다.
그래서 풀이 도중 cat hint 를 치게 되는데, hint 파일 안의 내용을 읽기 위해서입니다.
- find 명령어
find 명령어는 파일을 찾는 명령어입니다.
위의 풀이에서는 다음과 같이 사용되었습니다.
그런데, 뒤에 '/ -perm -4000 -user level2 2>/dev/null' 이라는 문구가 더 붙었습니다.
한개씩 분석해보겠습니다.
1. '/'
이 것은 파일 트리(모든 파일 목록)중에서 최 상위 폴더(디렉토리) ── 루트(root) 디렉토리라고도 부릅니다 ── 를 나타냅니다.
(리눅스의 파일 시스템의 계층구조에 대해서는 이 링크 를 참고해주세요.)
2. '-perm -4000'
펄미션중에, 4000 -> Sticky Bit 가 설정된 파일을 찾습니다.
더 자세히 설명하자면, 다음과 같이 나눌 수 있습니다.
4 0 0 0
s u g o
s = special bit
스페셜 비트는 4가지가 있다.
0 = 아무것도 없음
1 = Sticky Bit - 파일 및 폴더 생성은 누구나 할 수 있으나, 그 파일의 수정 권한은 슈퍼유저와 생성한 유저만 가능
2 = setGid - 이 파일을 실행할 때는 해당 그룹의 권한으로 실행
4 = setUid - 이 파일을 실행할 때는 해당 유저의 권한으로 실행
맨 앞에 4를 붙이면 setUid가 적용됩니다.
u = user
g = group
o = other
이 3가지는 각각 rwx 로 표현할 수 있다.
0 = 어떠한 권한도 없음
1 = r = Read = 해당 파일(폴더)를 읽을 수 있음
2 = w = Write = 해당 파일(폴더)를 쓸 수 있음
4 = x = eXecute = 해당 파일(폴더)를 실행할 수 있음
ugo 순서대로 위의 비트들을 더해서 적용하면 권한을 만들 수 있다.
예를들면,
4755
4 = setUid
7 = 1 + 2 + 4 = 파일을 소유한 유저는 모든 권한을 가지고 있음
5 = 1 + 4 = 파일을 소유한 그룹은 읽기와 실행만 가능
5 = 1 + 4 = 그 외의 유저들은 읽기와 실행만 가능
다음과 같이 표현할 수 있다.
-perm 뒤에
4000을 붙이면, 정확히 4000인 파일만,
-4000은 4000을 최소한 가지고 있는 파일만,
+4000은 4를 포함하거나, 0을 포함하거나, 0을 포함하거나, 0을 포함하는 파일만 검색한다.
즉, -perm -4000은,
level 2의 권한으로 setUid 가 설정되있는 파일을 찾는 것이다.
3. '-user level2'
level2 계정의 권한이 걸려있는 파일을 찾습니다.
4. '2>/dev/null'
── 2번 파일 디스크립터(stderr)를 /dev/null 로 보내서, 쓸데없는 문장들을 필터링해줍니다. ──
그냥 간단하게, 불필요한 문장들을 보여주지 않게 됩니다.
차이를 구분하고 싶으시면, 저 구문을 빼고 실행해보게 되면, 권한이 없는 파일들도
권한이 없다는 문구와 함께 출력이 되게 됩니다. 한번 시도해보세요..!
그리하여, 명령어를 입력하게 되면 결과로 /bin/ExecuteMe 라는 파일의 경로가 나오게 됩니다.
이제 이 파일을 실행시켜보겠습니다.
my-pass 명령을 칠 수 없으니, sh ── /bin/sh 를 축약 ── 명령어를 사용합니다.
여기서 쉘이란,
셸은 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 셸(껍데기의 영어 단어)은 사용자와 운영 체제의 내부(커널) 사이의 인터페이스를 감싸는 층이기 때문에 그러한 이름이 붙었다.
을 뜻합니다. (출처)
즉, 운영체제와 사용자를 연결해주는 연결다리 역할을 해줍니다.
기본적으로 리눅스에 로그인하면 쉘을 띄워주게 됩니다.
쉘에 명령어를 입력하면, 그에 맞는 결과를 내줍니다.
그러므로, 새로 쉘을 띄우게 되면, 명령어를 입력할 수 있게 됩니다.
그리하여, my-pass 명령을 사용하여 level2 의 비밀번호를 알 수 있었습니다.
'Security > HackerSchool FTZ' 카테고리의 다른 글
| FTZ Level 4 (0) | 2017.09.11 |
|---|---|
| FTZ Level 3 (0) | 2017.09.06 |
| FTZ Level 2 (0) | 2017.09.05 |