Post

[RCity] RCity15 Write up

개요

Redraccoon에서 운영하는 RCity라는 워게임에 RCity15에 대한 Write up을 작성했습니다. 이번 RCity13~RCity15까지는 redraccoon에서 풀이영상을 게시해줬으니 참고하시는것을 추천드립니다.

풀이영상(Redraccooon)

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

문제분석

1
2
3
4
5
6
홈 디렉토리 안에 XOR 로 암호화된 파일이 있습니다.
파일의 일부분은 암호화가 된 것 같고, 일부분은 키를 알려주고 있습니다. 
암호화된 파일의 영역만 가져와 복호화한 뒤 플래그를 찾아내세요.

힌트: 키는 hex 형태입니다 힌트: 모든 rcity 유저의 비밀번호가 19자리 문자열인 것을 눈치채셨나요?

1
python, xor, xxd

문제를 보면 홈 디렉토리에 XOR로 암호화가 된 파일이 존재하고 그 파일에 일부분은 키값이 들어있으니 그 키를 찾아내 복호화를 시키는것이 목표라는 것을 알 수 있다.

image

홈디렉토리를 보니 rcity15-data.bin이라는 파일이 있는 것을 확인했다. 바이너리파일이므로 xxd명령어를 통해 파일을 헥스값으로 봤다. 여기서 xxd명령어는 파일을 헥스값으로 볼 수 있는 명령어이다. 반대로 만약 이런식으로 헥스덤프로 이루어진파일이 있다면 -r옵션을 사용해 다시 바이너리파일로 변환할 수 있다.

xxd의 결과를보면 왼쪽 가운데 오른쪽 3영역으로 나누어져있는 것을 볼 수 있는데, 왼쪽은 오프셋으로 위치를 나타내고 가운데는 hex값으로 표시된 데이터이고 오른쪽은 이 hex값을 ascii로 변환시킨것이다. 오른쪽 문자열들을 보면 이상한 문자열들이 있는와중에 key is 53.이라는 문자열이 보이는것을 알 수 있다. 이 말은 즉 이 암호화된 파일의 key값은 53이라는 것을 알려주고있다. 다음으로 그럼 이 53키값을 이용해서 xor연산으로 복호화를 시켜보겠다. 코딩을 하기 전 xor에 특징에 대해 말하자면 A를 B와 xor을 시키고 A xor B = C 다시 C를 B와 xor시키면 C xor B = A 원상태로 복구가 된다. 이러한 특징을 이용해서 A를 암호화 시킬 데이터 B를 key값으로 해 A를 C로 암호화를 시킬수가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
with open("data.bin", "rb") as f:
    data = f.read()

print(data[:-10])
print(data[-10:])
print()


result = ""
for i in data[:-12]:
    result += chr(i ^ 0x53)

print(result)
1
2
3
4
b"';6s5?24s: s)e\x02`>k\x0bg b\x14f;j\x01d7c\x1f\n\n"
b'key is 53\n'

the flag is z6Q3m8X4s1G5h9R7d0L

위 코드를 실행한 결과를 보면 일단 data파일안에는 key is 53.이라는 문자열이 있고 이것은 flag가 아니기때문에 10글자를 제외를해줬다. 그리고 처음 출력 뒤를보면 \n\n이 보이는데 \n은 한줄을 띄는 기호로 복호화를 시키기전인데 이런 기호가 있다는것은 정황상 flag가 아닐 가능성이 있기에 data[:-12]까지 복호화를 시켜줬다.

결과로 the flag is z6Q3m8X4s1G5h9R7d0L 라는 문자열이 출력되었다.

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