처음 문제를 딱 마주치게 되면 nc(NetCat)를 통해서 접속을 해야합니다.



저는 윈도우에서 nc 접속을 하기 위해 putty 라는 프로그램을 사용하였습니다.

(putty download)




(윈도우 기준으로) 각 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 는 FTZ 상에서 현재 계정의 비밀번호를 알려줍니다. ── FTZ 상에서만요. 리눅스 명령어 아닙니다. ──)



my-pass 명령을 칠 수 없으니, sh ── /bin/sh 를 축약 ── 명령어를 사용합니다.



sh-2.05b$ 라는 문구가 떴네요.

여기서 sh는 Shell ── 쉘 ── 을 뜻합니다.


여기서 쉘이란,



은 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 셸(껍데기의 영어 단어)은 사용자와 운영 체제의 내부(커널) 사이의 인터페이스를 감싸는 층이기 때문에 그러한 이름이 붙었다.



을 뜻합니다. (출처)


즉, 운영체제와 사용자를 연결해주는 연결다리 역할을 해줍니다.


기본적으로 리눅스에 로그인하면 쉘을 띄워주게 됩니다.



쉘에 명령어를 입력하면, 그에 맞는 결과를 내줍니다.


그러므로, 새로 쉘을 띄우게 되면, 명령어를 입력할 수 있게 됩니다.



그리하여, 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

+ Recent posts