[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로 암호화가 된 파일이 존재하고 그 파일에 일부분은 키값이 들어있으니 그 키를 찾아내 복호화를 시키는것이 목표라는 것을 알 수 있다.
홈디렉토리를 보니 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
라는 문자열이 출력되었다.