Post

[RCity] RCity8 Write up

개요

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

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

문제분석

1
2
3
4
5
6
rcity8 유저 시스템에는 base64로 인코딩된 플래그 파일이 있습니다.

단순히 디코딩만 하면 될 것 같은데, 수동으로 하기엔 시간이 오래걸릴 것 같습니다.
뭔가 컴퓨터가 "반복"적으로 일을 해줄 수 있는 자동 스크립트가 있으면 좋을 것 같네요.

매번 디코딩을 반복하는 동안 "flag: <플래그>" 문자열을 찾아내면 될 것 같습니다.
1
scripting, for loop

문제를 보면 홈 디렉토리에 base64로 인코딩된 플래그파일이 존재하는데 그것을 단순히 디코딩만하면 flag를 획득할 수 있다는 것이다. 따라서 flag파일을 디코딩을 하는 것이 목표이다.

image

flag파일의 사이즈를 보니 크기가 않아보이는데 정말 긴 문자열을 인코딩해서 이렇게 된거거나, 여러번 반복해서 인코딩을 하므로써 사이즈가 늘어난것이라고 추측할 수 있다. 여기서 base64인코딩을 했을 때 사이즈가 늘어나는 이유는 base64인코딩방식은 기본적으로 7~8bit 정도가 문자 1개 였다면 base64는 6bit이 한문자이고 뒤에 패딩도한 붙기때문에 문자열의 길이는 계속 늘어날수밖에없다. 일단 전자를 예상하고 파일을 통채로 디코딩을 진행한 결과 flag라는 문자열을 발견하지 못했다. 따라서 후자의 상황인것이 유력해졌다. 이것을 해결하기 위한 코드를 간단하게 파이썬으로 짜봤다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import base64


with open('/home/rcity8/flag.txt', 'r') as f:
    code = f.read()     # 파일 불러오기


while(True):
    code_bytes = code.encode('ascii')       # byte화
    code = base64.b64decode(sub_string).decode()    # base64 디코딩
    if "flag" in code:      # 디코딩한 문자열안에 flag라는 문자가 있을 경우 중지하고 출력
        print(code)
        exit(1)

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