Post

[RCity] RCity9 Write up

개요

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

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

문제분석

1
2
3
4
5
6
7
8
9
10
11
암호화된 플래그 파일과 nmap 결과 파일이 있습니다.
플래그 파일은 nmap 파일의 열려져 있는 포트 + 쉼표 문자열로 암호화가 되어 있습니다.
예) 암호화키 == 21,22,23,25,53,...,27019

먼저 nmap 파일을 파싱해 열려 있는 포트들만 나오도록 문자열을 만드세요.

예) 21,22,23,25,53,....,27019

이제 위에서 나온 문자열을 암호화키로 이용해 암호화된 플래그를 복호화하세요.

cat flag.txt | openssl enc -d -aes-256-cbc -base64 -k <22,23,25,...포트번호들>
1
awk, sed, tr, openssl, aes

문제를 보면 홈디렉토리에 flag파일과 nmap파일이 있는데, nmap파일에 저장된 열린포트의 숫자들의 나열이 flag파일의 복호화키라는것을 알 수 있다. 따라서 nmap파일에서 숫자,숫자,숫자 이런식으로 문자열을 만들어 cat flag.txt | openssl enc -d -aes-256-cbc -base64 -k <22,23,25,...포트번호들> 이것을 실행하는 것이 목표이다.

해당 문제의 태그들을 보면 문제를 푸는데 필요한 명령어 들이 존재하는 것을 확인할 수 있다. 여기서 awk, sed, tr를 사용할 것이다.

awk는 텍스트파일에서 특정패턴을 검색하고, 해당 패턴과 일치하는 줄에 대해 작업을 수행하는 명령어다. echo awk '{print $1}' flag 이렇게 할 경우 flag파일의 각 줄의 첫번째 필드를 출력한다.

sed는 “stream editor”의 약자로 입력 스트림에서 텍스트를 변환하는데 사용된다. 이 명령어는 파일에서 문자열을 찾고, 바꾸고, 삭제하는 등의 기능이 있다. 예시로 echo "I like apple | sed 's/apple/orange/g'를 입력할 경우 I like orangeappleorange로 대체가 된다. 이 명령어에서 앞에 s는 substitute로 대체하다라는 의미고 뒤에 g는 global로 모든 appleorange로 바꾸라라는 의미이다.

tr은 translate의 약자로 입력 스트립에서 문자를 변환하는데 사용된다. 이 명령어도 또한 문자열을 바꾸거나, 삭제하거나, 반복된 문자를 제거하는 등의 기능이 있다. 예를들어 echo "Hello World" | tr 'a-z' 'A-Z를 수행할 경우 HELLO WORLD로 변환이 된다. 이명령은 a-z즉 모든 소문자를 A-Z즉 대문자로 변환시킨다는 명령이다.

image

홈디렉토리에서 nmap파일을 보니 정말 많은 포트들이 열려있는것을 볼 수있다. 그리고 출력된 형식은 다음과같았다. [port번호/tcp] open [해당 포트에 대한 설명] 따라서 /tcp를 제거하고 한줄이 띄어져있는 \n이것을 ,로 대체하면 될것이다.

awk '{print $1}' nmap-result.txt | sed 's/\/tcp//' | tr '\n' ',' | sed 's/,$/\n/'

image

이것을 또 cat flag.txt | openssl enc -d -aes-256-cbc -base64 -k <22,23,25,...포트번호들> 여기로 전달하면 된다.

cat flag.txt | openssl enc -d -aes-256-cbc -base64 -k $(awk '{print $1}' nmap-result.txt | sed 's/\/tcp//' | tr '\n' ',' | sed 's/,$/\n/')

이 명령어에서 $()안에 명령어를 사용하면 해당 명령어가 실행이된 후 출력값이 원래 명령의 입력값이 된다.

image

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