[RCity] RCity0 Write up
개요
Redraccoon에서 운영하는 RCity라는 워게임에 RCity0에 대한 Write up을 작성했습니다.
해당 공격 기법들을 허가되지 않은 실제 운영 서버에서 시도하는 것은 정보통신망법에 어긋나는 행위입니다.
문제분석
1
2
3
4
주소: ctf.redraccoon.kr
포트: 31338
유저 이름: rcity0
비밀번호: rcity0
1
2
SSH를 이용하여 서버에 접속한 후, 유저 디렉토리에 있는 "readme" 파일을 찾아 읽어보세요.
이 파일에는 라쿤시티를 구하기 위한 첫번째 플래그가 기록되어 있을 것입니다.
문제내용을 보면 SSH로 접속을 한 뒤 유저의 home디렉토리에 readme파일을 찾아 읽는 것이 목표라는 것을 알 수 있다.
문제서버에 접속을 한 뒤 ls -alh
로 현재 디렉토리에 파일들을 확인한 결과 flag
라는 이름의 파일이 존재하는 것을 확인했다. flag
라는 파일이 어떤 파일인지 확인하기 위해서 file flag
명령어를 통해 확인해본 결과 그냥 ASCII로 이루어진 텍스트파일인 것을 확인했다. 파일 안에는 패스워드로 예측이 되는 문자열이 존재했다. 원래 문제에서는 readme
파일을 찾아 읽으라는 것으로 봐서 readme
라는 파일을 찾아 읽어야하지만 CTF(Capture the flags)형식의 문제들은 암묵적으로 flag
라는 파일을 찾아서 그 파일안에 있는 문자열을 입력해 점수를 획득하는 방식으로 진행이된다. 따라서 우선 저 flag
파일을 그냥 보고 지나칠 수 없으니 정답에 입력해봤다.
결과는 정답이였고, 단순한 오타였던것을 알 수 있었다.
개념정리
이 문제를 푸는데 ls
라는 명령어를 사용했다. ls
라는 명령어는 디렉토리에 어떤 파일들이 있는지 확인하는 명령어이다. 위에서 사용했떤 -alh
는 ls
명령어에서 사용할 수 있는 옵션인데 -a
옵션은 숨겨진 파일들까지 볼 수 있는 옵션이다. 숨겨진 파일이란, 이름앞에 .이 붙어 있는 파일로 일반적으로 ls
만 사용했을 때는 확인할 수 없다. -l
옵션은 디렉토리안 파일들을 볼때 파일의 허가권, 파일의 유형, 링크 수, 소유자, 소유 그룹, 파일크기, 수정시간, 파일이름 등 더 자세한 정보들을 볼 수 있게 해준다. -h
옵션은 “human-readable”의약자로 파일의 정보들이 출력될 때 사람이 읽는데 쉬운 형식으로 표시한다. 예를들어 그냥 ls -l
을 했을 때 출력되는 파일의 크기는 4096숫자로만 표시된다. 이 숫자의 단위는 바이트인데 -h
옵션을 사용한다면 KB, MB, GB 등 으로 표시돼 “4.0k”라 표시된다.
다음으로 ls -alh
을 했을 때 나왔던 내용들에 대해 설명하겠다.
ls -alh
명령어를 사용하면 위와같은 정보들이 나오는데 flag파일에 해당하는 정보들을 보겠다.
1
-r--r----- 1 root rcity0 20 Feb 2 08:01 flag
우선 첫번째 영역을 제외하고 2번째 영역부터 살펴보자면 2번째 영역은 이 파일이 링크된 수를 나타낸다 링크파일은 나중에 설명할 기회가 있을 것이다. 3번째 영역은 소유자를 나타낸다, 현재 root로 되어있으므로 flag
파일의 소유자는 root가된다. 4번재 영역은 소유그룹을 나타낸다, 현재 rcity0으로 되어있으므로 소유그룹은 rcity0이 된다. 5번째 영역은 파일의 크기로 20으로 되어있다. 아무런 표시가 없을때 byte라고 생각하면 된다. 6번째 영역(Feb 2 08:01)은 파일의 마지막 수정시간을 나타내는데 이 파일은 2월 2일 오전 8시 1분에 수정된것을 알 수 있다. 마지막 영역은 파일의 이름을 나타낸다.
첫번째 영역 -r--r-----
은 각 사용자의 이파일에 대한 권한을 나타낸다. 이것은 처음 1개를 제외하고 3개씩 끊어서 봐야한다r--
. r--
, ---
여기서 ---
각 3개의 영역은 순서대로 r:읽기권한, W:쓰기권한, x:실행권한을 나타낸다. 그리고 처음 나눴던 3개의 큰 영역은 순서대로 파일 소유자의 권한, 파일 소유그룹의 권한, 이외 다른 사람들의 권한으로 flag
파일을 예시로 들면 이 파일의 소유자인 root는 읽기 권한만 존재하고, 소유그룹인 rcity0 또한 읽기만 가능하고, 나머지 다른 유저들은 이 파일에 대한 모든권한이 존재하지 않는다.
현재 내가 접속한 계정의 정보를 보고싶으면 id
명령어를 사용하면 된다.
rcity0계정으로 id
를 입력한 결과 다음과같은 결과가 나왔다.
1
uid=1000(rcity0) gid=1000(rcity0) groups=1000(rcity0)
여기서 uid는 userid로 현재 사용자를 나타내고, gid는 groupid로 현재 사용자의 그룹을 나타낸다. 마지막 groups는 사용자가 속한 그룹들을 나타내는데 그룹은 사용자 한명이 여러그룹에 속할 수 있는 one to many관계로 현재는 하나지만 여러그룹에 속할 경우 속한 모든 그룹이 출력된다.
마지막으로 처음 빼놨던 하나의 문자는 파일의 속성을 나타낸다. 만약 d
라고 되어있으면 해당 파일은 디렉토리라는 것이고, -
로 되어있으면 일반적인 파일이라는 뜻이다. 다른 기호도 있지만 특수한 경우이므로 생략하겠다.