Post

[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가 첨부되있다고 한다. 사실 문제만 보면 이해가 잘 안갈 수도있으니 한번 접속을 해보겠다.

image

홈 디렉토리를 확인해보니 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를 localhost127.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파일을 이용해 접속을 할 것이니 이렇게 입력을 했다.

image

접속을 한 결과 id_rsa.rcity12에 대한 어떤 문장을 요구하는것을 확인했다. 따라서 접속을 성공하려면 id_rsa.rcity12파일을 복호화를 시켜 나온 어떤 문자열을 입력시키면 성공하는것을 추측할 수있다.

이 문제의 tag를 보면 john이라는 단어가 보인다. john은 john the ripper 라는 해쉬문자열을 크랙하는 도구이다. 따라서 문제는 이 john이라는 도구를 이용해서 ssh key를 복호화시키라는 것임을 알 수 있다. 우선 ssh key를 john으로 크랙을 시키기 위해서는 ssh key를 john도구가 인식을 할 수 있는 형식으로 해쉬화 시켜야한다, 이때 사용하는 도구는 ssh2john이다.

johnssh2john을 설치하기 위해 아래 명령어들을 입력해 설치해야한다. 설치하는 환경은 나의 시스템으로 돌와와서 진행해야한다. 따라서 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일텐데 다시 홈디렉토리로 돌아온다. johnssh2john파일은 ~/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파일에 저장한다는 뜻이다.

image

잘 변환이 됬으면 john을 이용해 해쉬크랙을 해야한다. 여기서 이전에 말했던것과 같이 해쉬화는 단방향 암호화방식으로 한번 해쉬화를 할 경우 다시 복호화를 할 수 없다했는데 해쉬를 크랙한다는 말이 이해가 되지 않을 수도있다. john과 같은 도구들이 해쉬화된 것을 크랙하는 방법은 단순하게 아무런 단어들을 해쉬화를 시키고 그 문자열이 크랙할 문자열과 같은지를 비교하는 무식한? 방법이다. 이렇게 차별없이 아무 단어나 집어넣어 답을 얻어내는 것을 Brutforce라 한다. 여기서 좀 더 업그레이드가 된 방법은 타겟 문자열의 답이라고 예상이되는 문자열들을 미리 사전에 적어놔 하나씩 대입을 시켜보는 방법이 있다. 이것은 한구거로는 사전대입공격 영어로는 Dictionary Attack이라 한다.

다시 돌아와서 현재 wordlist.txt파일은 단어,단어,단어,단어이와 같은 식으로 단어들이 이루어져있을 것이다. 하지만 내가 알기로는 대입으로 사용할 wordlist파일은 단어\n단어\n단어\n단어이런식으로 한줄씩 띄어서 이루어져있어야 하기때문에 wordlist.txt파일을 이에맞게 포맷을 맞춰줄것이다. 맞추기 위해서 이전 문제에서 사용한 tr이라는 명령어를 사용할 것이다. tr ',' '\n' < wordlist.txt > wordlist.txt 여기서 < wordlist.txtwordlist.txt안에 문자열들을 입력값으로 넣겠다는 명령이다. 포맷을 잘 맞춰준 후 .john/run/john --wordlist=wordlist.txt id_rsa.hash를 통해 해쉬크랙을 해준다.

image

결과로 sayang이라는 문자열이 이 파일의 원래 단어라는 것을 알 수 있다. 다시 rcity12에 접속해 이 단어를 입력해주겠다.

image

rcity12로 접속하니 ricyt11에 flag입력을 위한 파일이 존재하는 것을 알 수 있다.

This post is licensed under CC BY 4.0 by the author.