[RCity] RCity11 Write up
개요
Redraccoon에서 운영하는 RCity라는 워게임에 RCity10에 대한 Write up을 작성했습니다.
해당 공격 기법들을 허가되지 않은 실제 운영 서버에서 시도하는 것은 정보통신망법에 어긋나는 행위입니다.
문제분석
1
2
3
4
5
6
7
이번에는 플래그는 없지만 rcity12로 바로 갈 수 있는 파일이 있습니다. 이 파일이 뭔지 알아본 뒤,
rcity12 유저로 로그인하세요.
복호화에 필요한 워드 리스트는 첨부된 wordlist.txt를 사용하세요.
**john 최신 버전으로 업그레이드 하세요. **
1
john, ssh, brutforce, ssh2john
문제 내용을 보면 flag는 없지만 rcity12로 로그인을 할 수 있는 무언가가 주어진다고 한다. 그리고 복호화에 사용되는 wordlist.txt가 첨부되있다고 한다. 사실 문제만 보면 이해가 잘 안갈 수도있으니 한번 접속을 해보겠다.
홈 디렉토리를 확인해보니 id_rsa.rcity12
라는 rsa private key파일과, burtforce할 때 사용할 수 있는 정말 여러 word가 나열된 파일이 있다.
이것을 보면 id_rsa.rcity12
라는 파일은 rcity12유저에 ssh로 접속을 할때 사용할 수 있는 ssh.key라는 것과, wordlist는 id_rsa.rcity12
를 복호화를 했을 경우 나올 수 있는 wordlist인것을 추측할 수 있다.
여기서 rcity12유저에 ssh로 접속할 때 ssh key로 사용할 수 있다는 것은 이 key만 있다면 rcity12의 비밀번호를 모르더라도 접속이 가능한것을 의미한다. 이번에도 한번 접속을 해보겠다. 원래라면 현재 rcity11로 로그인 한 상태에서 host를 localhost
127.0.0.1
이라는 loopback주소를 통해 ssh rcity12@localhost -p 31338
로 바로 접속을 하면되지만 웬지모르게 refuse가 돼 하던대로 접속을 하겠다. ssh rcity12@localhost -p 31338 -i id_rsa.rcity12
. 여기서 -i
옵션은 ssh 접속을할 때 ssh key를 지정해주는 옵션이다. 지금은 id_rsa.rcity12
파일을 이용해 접속을 할 것이니 이렇게 입력을 했다.
접속을 한 결과 id_rsa.rcity12
에 대한 어떤 문장을 요구하는것을 확인했다. 따라서 접속을 성공하려면 id_rsa.rcity12
파일을 복호화를 시켜 나온 어떤 문자열을 입력시키면 성공하는것을 추측할 수있다.
이 문제의 tag를 보면 john이라는 단어가 보인다. john은 john the ripper 라는 해쉬문자열을 크랙하는 도구이다. 따라서 문제는 이 john이라는 도구를 이용해서 ssh key를 복호화시키라는 것임을 알 수 있다. 우선 ssh key를 john으로 크랙을 시키기 위해서는 ssh key를 john도구가 인식을 할 수 있는 형식으로 해쉬화 시켜야한다, 이때 사용하는 도구는 ssh2john
이다.
john
과 ssh2john
을 설치하기 위해 아래 명령어들을 입력해 설치해야한다. 설치하는 환경은 나의 시스템으로 돌와와서 진행해야한다. 따라서 id_rsa.rcity12
파일과 wordlist.txt
파일을 복사해와야한다. 이때 SCP를 사용해서 내 시스템에 복사를 할 수있지만 나만 그런지는 모르겠지만 SCP를 사용하면 3~40분정도 차단을 먹는것같다. 그러니 cat
을 사용해 직접복사해서 내 시스템을 파일을 생성해두자.
1
2
3
4
5
6
7
sudo apt-get -y install git build-essential libssl-dev zlib1g-dev
sudo apt-get -y install yasm pkg-config libgmp-dev libpcap-dev libbz2-dev
git clone https://github.com/openwall/john -b bleeding-jumbo john
cd ~/john/src
./configure
make -s clean
make -sj4
{file=’Install_john’}
설치가 완료되면 현재 디렉토리가 ~/john/src
일텐데 다시 홈디렉토리로 돌아온다. john
과 ssh2john
파일은 ~/john/run/
에 있다. 여기서 john
은 ELF파일이고, ssh2john
은 python파일인것을 명심하자. 우선 ssh key파일을 john
인식할 수 있도록 변환을 시켜줘야한다 python3 john/run/ssh2john.py id_rsa.rcity12 > id_rsa.hash
.여기서 > id_rsa.hash
명령은 python3 john/run/ssh2john.py id_rsa.rcity12
이 앞에 명령어를 사용하고난 출력물을 id_rsa.hash
파일에 저장한다는 뜻이다.
잘 변환이 됬으면 john
을 이용해 해쉬크랙을 해야한다. 여기서 이전에 말했던것과 같이 해쉬화는 단방향 암호화방식으로 한번 해쉬화를 할 경우 다시 복호화를 할 수 없다했는데 해쉬를 크랙한다는 말이 이해가 되지 않을 수도있다. john
과 같은 도구들이 해쉬화된 것을 크랙하는 방법은 단순하게 아무런 단어들을 해쉬화를 시키고 그 문자열이 크랙할 문자열과 같은지를 비교하는 무식한? 방법이다. 이렇게 차별없이 아무 단어나 집어넣어 답을 얻어내는 것을 Brutforce
라 한다. 여기서 좀 더 업그레이드가 된 방법은 타겟 문자열의 답이라고 예상이되는 문자열들을 미리 사전에 적어놔 하나씩 대입을 시켜보는 방법이 있다. 이것은 한구거로는 사전대입공격 영어로는 Dictionary Attack
이라 한다.
다시 돌아와서 현재 wordlist.txt
파일은 단어,단어,단어,단어
이와 같은 식으로 단어들이 이루어져있을 것이다. 하지만 내가 알기로는 대입으로 사용할 wordlist파일은 단어\n단어\n단어\n단어
이런식으로 한줄씩 띄어서 이루어져있어야 하기때문에 wordlist.txt
파일을 이에맞게 포맷을 맞춰줄것이다. 맞추기 위해서 이전 문제에서 사용한 tr
이라는 명령어를 사용할 것이다. tr ',' '\n' < wordlist.txt > wordlist.txt
여기서 < wordlist.txt
는 wordlist.txt
안에 문자열들을 입력값으로 넣겠다는 명령이다. 포맷을 잘 맞춰준 후 .john/run/john --wordlist=wordlist.txt id_rsa.hash
를 통해 해쉬크랙을 해준다.
결과로 sayang
이라는 문자열이 이 파일의 원래 단어라는 것을 알 수 있다. 다시 rcity12
에 접속해 이 단어를 입력해주겠다.
rcity12
로 접속하니 ricyt11
에 flag입력을 위한 파일이 존재하는 것을 알 수 있다.