[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 orange
로 apple
이 orange
로 대체가 된다. 이 명령어에서 앞에 s는 substitute로 대체하다라는 의미고 뒤에 g는 global로 모든 apple
을 orange
로 바꾸라라는 의미이다.
tr
은 translate의 약자로 입력 스트립에서 문자를 변환하는데 사용된다. 이 명령어도 또한 문자열을 바꾸거나, 삭제하거나, 반복된 문자를 제거하는 등의 기능이 있다. 예를들어 echo "Hello World" | tr 'a-z' 'A-Z
를 수행할 경우 HELLO WORLD
로 변환이 된다. 이명령은 a-z
즉 모든 소문자를 A-Z
즉 대문자로 변환시킨다는 명령이다.
홈디렉토리에서 nmap파일을 보니 정말 많은 포트들이 열려있는것을 볼 수있다. 그리고 출력된 형식은 다음과같았다. [port번호/tcp] open [해당 포트에 대한 설명]
따라서 /tcp
를 제거하고 한줄이 띄어져있는 \n
이것을 ,
로 대체하면 될것이다.
awk '{print $1}' nmap-result.txt | sed 's/\/tcp//' | tr '\n' ',' | sed 's/,$/\n/'
이것을 또 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/')
이 명령어에서 $()
안에 명령어를 사용하면 해당 명령어가 실행이된 후 출력값이 원래 명령의 입력값이 된다.