Post

[RCity] RCity5 Write up

개요

Redraccoon에서 운영하는 RCity라는 워게임에 RCity5에 대한 Write up을 작성했습니다.

해당 공격 기법들을 허가되지 않은 실제 운영 서버에서 시도하는 것은 정보통신망법에 어긋나는 행위입니다.

개념정리

어떤 문자열을 다른 형태로 변환을 시킬 때 사용하는 방식이 있다. 첫번째는 인코딩인데, 인코딩은 문자열이 변환되는 규칙을 알고있는 사람이라면 누구나 원래의 형태로 복원할 수 있는 것을 말한다. 인코딩된 특정문자열을 복원하는것을 디코딩이라 한다(Base64, UTF-8, 유니코드, ASCII 등). 두번째는 암호화다. 암호화는 암호화를 하는 규칙을 알고있다 하더라도 쉽게 복원을 할 수 없는 것을 말한다. 암호화를 원래의 문자열로 복원을 하려면 KEY가 필요하다. 여기서 KEY를 통해 원래의 문자열로 복원하는것을 복호화라고 한다. 특히 암호화는 대칭키암호화 방식, 비대칭키 암호화 바시기 있다. 이것들은 간단히 말해 대칭키는 암호화와 복호화를 하는데 키가 동일하고, 비대칭키 암호화방식은 암호화를 시키는 key와 복호화를 시키는 key가 각각 다르다는 것이다(AES, RSA, ROT 등). 더 자세한 내용은https://www.youtube.com/@ArtOfTheProblem/videos 이 채널 영상에서 찾으면 매우 이해하는데 도움이 될것이다.

추가로 여기서 규칙을 알고있다 해도 아예복원을 할 수 없는 것이 아니라 쉽게 복원을 할 수 없다라고 말한 이유는 암호화된 문자열 또한 KEY가 없더라도 풀 수 는 있기 때문이다. 예를들어 시저암호라고 불리는 카이사르 암호화방식이 있다. 이 암호화방식은 대칭키 암호화방식으로 알파벳이 ABCDE… 이렇게 있을 때 알파벳을 이동시켜서 다른 알파벳과 매칭시키는 것이다. 예를들어 알파벳을 3번 이동시킨다고하면 A=D, B=E, C=F… 이런식으로 이루어진다. 하지만 이러한 방식의 암호화는 key가 없더라도 단순하게 원래의 문자열로 복호화를 할 수 있다. 그렇다면 이것도 인코딩이라고 봐야하는 것이 아닐까라는 생각이 들 수도있다. 하지만 여기서부터는 주관적인 생각이지만. 암호화 방식이 자주 사용된 시대(시간)라는 정보또한 함께 봐야한다고 생각했다.

지금 현대에서는 단순히 카이사르 암호화가 된 문자열을 DreamHack tools에 입력하는것만드로도 바로 암호화가 풀리지만, 카이사르 암호화가 사용되던 로마시대에서는 애초에 알파벳을 읽고 쓸 줄아는 사람이 별로 없을 뿐더러 이것을 옆으로 이동시키기까지 할 줄 아는사람은 극히 제한적이였기 때문에 그 시대에서는 쉽게 복호화를 할 수 없기때문에 현대에서 key가 없어도 쉽게 복호화 할 수 있더라고 암호화 방식이라고 생각한다. 지금 우리가 확실하게 암호화방식이라고 생각하는 소수의 소인수분해의 어려움을 이용한 RSA암호화방식또한 미래 양자컴퓨터가 더 발전한다면 양자컴퓨터의 기하급수적인 계산에 능한 성능으로 KEY가 없어도 금방 풀릴것이다.

세번째로는 해쉬화가 있다. 해쉬화는 단방향암호화 방식이라고 부른다. 왜냐하면 이전까지는 어떤 문자열을 인코딩을 하거나, 암호화를 해도 원래 문자열에 대한 정보는 손실이 되지 않았따 하지만 해쉬화를 하면 정보가 손실이 된다. 왜냐하면 어떤 길이의 문자열을 해쉬화를 하던지 모두 같은 길이의 문자열로 변환이 되기때문이다. 이게 왜 손실이 됬다라고 하는지는 해쉬화함수에 대해 좀더 알아보거나 비둘기집 원리와, 생일문제에 대해 생각해보면 알 수 있을것이다.

문제분석

1
2
3
4
rcity5의 플래그 파일을 찾은 뒤 읽어보세요.
이번 플래그 파일 안에는 알수 없는 문자열들이 있습니다.

이 문자열들이 뭔지 알아본 뒤, 이것을 "디코딩" 해 플래그를 알아내세요!

문제의 내용을 보면 flag파일안에 이상한 문자열이 있는데 이것을 디코딩하라는 것으로 봐서 어떠한 방식으로 인코딩이 됬다는것을 알 수 있다. 위에서 말했듯이 인코딩은 KEY가 없더라도 쉽게 디코딩을 할 수 있다.

image

현재 홈디렉토리를 보니 flag.txt파일이 있었고, cat으로 확인해보니 이상한 문자열이 있는 것을 확인했다.

ZmxhZzogTTJwTjl6UTFzVzN5SDhnUjZkMAo=

여기서 팁을 주자면 인코딩된 문자열뒤에 =이 1~2개가 있다면 base64인코딩방식이라고 추측하면 된다. 뒤에 붙는 =은 base64인코딩 과정에서 발생하는 패딩을 채워주는 역할을 한다.

일단 저 문자열을 base64로 디코딩해보겠다. https://www.base64decode.org/

image

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