보안을 그리다, 훈이

[제3회 2021 전국 고등학생 사이버 보안 경진대회] Network - Binary Letters Write Up 본문

Capture The Flag/CTF 출제

[제3회 2021 전국 고등학생 사이버 보안 경진대회] Network - Binary Letters Write Up

HooNeee 2021. 9. 14. 17:10

본 게시글은 필자가 운영 및 출제위원으로 활동한 [제3회 2021 전국 고등학생 사이버 보안 경진대회]에 출제한 문제의 풀이 방법을 기술한 문서입니다.

 

[Network] - Binary Letters
This is what Alex wrote. Please solve the problem.

Hello, I'm Alex. I have a business meeting with corporate AD in a few weeks. I received a file with important letters related to the meeting from an AD company manager last time, but I can't find it no matter how much I look for it now. I think I saved it somewhere, but I don't remember exactly. I looked it up on Google Drive and NAS, but it's not there. I'm holding a related packet file, but I can't find it because I don't have enough technology. I just posted a question on the bulletin board, but there's no reply maybe because of the small number of members. Oh, I just copied and saved the source code of the main page of the bulletin board just in case. You might need it. Anyway, please help me! 

Flag Format : ADCTF{lowercase(md5("KEY"))}

 

(티스토리 정책상, 20MB가 초과하는 첨부파일은 업로드가 불가합니다.)

 


 

문제 이름
Binary Letters


문제 기술
This is what Alex wrote. Please solve the problem.

Hello, I'm Alex. I have a business meeting with corporate AD in a few weeks. I received a file with important letters related to the meeting from an AD company manager last time, but I can't find it no matter how much I look for it now. I think I saved it somewhere, but I don't remember exactly. I looked it up on Google Drive and NAS, but it's not there. I'm holding a related packet file, but I can't find it because I don't have enough technology. I just posted a question on the bulletin board, but there's no reply maybe because of the small number of members. Oh, I just copied and saved the source code of the main page of the bulletin board just in case. You might need it. Anyway, please help me!

Flag Format : ADCTF{lowercase(md5("KEY"))}

 

문제 분야
Network

 

필요 기술

패킷 분석 도구를 활용한 패킷 필터링 및 추출, 프로토콜 파악, 암호화 기법 파악, 파일 구조 파악 및 복구 등 기타 포렌식 기술

 

상세 풀이

먼저, 첨부파일로 제공된 ‘Binary Letters.php’와 ‘index.php.html’ 파일을 다운로드 한다.

 

문제에 기술된 ‘Oh, I just copied and saved the source code of the main page of the bulletin board just in case.’ 문장으로 보아 방금 Alex가 글을 작성한 게시판의 메인 페이지가 ‘index.php.html’인 것이라 짐작할 수 있다. 본 파일을 html 확장자 파일로 열어본다.

 

[그림 1. index.php.html]

 

[그림 1]과 같이 새로운 글이 게시되었다는 alert와 함께 게시판의 글 목록을 확인할 수 있으며, 작성자가 Alex인 글의 제목이 ‘Isn’t it port 21?’이다.

 

일반적으로 21번 포트는 파일 전송 프로토콜인 FTP의 제어 포트로 사용되며, 문제에 기술된 ‘NAS’ 또한 보통 FTP를 사용한다.

 

 

따라서 Alex는 FTP를 이용해 중요한 파일을 저장한 사실을 확인할 수 있다.

 

[그림 2. Binary Letters.php]

 

다음으로, [그림 2] ‘Binary Letters.php’ 파일을 살펴보니 정상적으로 열리지 않는 것을 알 수 있다.

 

따라서 Hex Editor 툴을 사용하여 본 파일의 헤더 시그니처를 살펴보니 [그림 3]과 같이 Hex 값이 ‘0A 0D 0D 0A’로 시작되는 것을 확인할 수 있다.

 

[그림 3. Binary Letters.php – Hex]

 

'0A 0D 0D 0A’를 헤더 시그니처로 가지는 파일은 기존의 pcap을 발전시킨 파일 형식인 pcapng이므로, ‘Binary Letters.pcapng’로 확장자를 변경하면 Wireshark와 같은 패킷 분석 도구를 활용하여 패킷 파일을 정상적으로 열 수 있다.

 

[그림 4. 상단 - 전체 패킷 / 하단 - FTP 패킷 필터링]

 

[그림 4]와 같이 전체 패킷을 확인하고, FTP로 패킷 필터링을 시도해 보았으나 해당 패킷이 존재하지 않아 아무런 패킷도 뜨지 않는다.

 

앞서 문제에 제시된 ‘‘Isn’t it port 21?’ 문구를 다른 관점에서 해석해보면, Alex가 FTP를 사용하였으나 21번 포트가 아닌 다른 포트를 사용하였음을 유추해볼 수 있다.

 

또한 FTP는 TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜이므로 방대한 패킷 중 관련 패킷을 찾기 위해 TCP를 이용하여 패킷 필터링을 시도해볼 수 있으며, 보다 효율적인 패킷 필터링을 위해 443 포트와 80번 포트로 송수신된 패킷을 제거한다.

 

[그림 5. 패킷 필터링]

 

443번 포트는 SSL 위의 HTTP인 HTTPS가 사용하는 포트이며, 80번 포트는 웹 페이지를 전송하는 HTTP가 사용하는 포트이다.

 

[그림 5]로 패킷을 필터링하면 비교적 소량의 패킷만 출력되며 7667번 포트와 송수신한 패킷들을 다수 확인할 수 있다.

 

21번 포트로 설정되어 있는 FTP TCP 포트를 변경하기 위해 [그림 6]과 같이 [Wireshark] - [Preferences] - [Protocols] - [FTP]에 접근하여 포트 번호를 7667번으로 변경한다.

 

[그림 6. FTP TCP 포트 변경]

 

이후, FTP를 활용한 파일 전송 패킷을 확인하기 위해 ftp-data로 패킷을 필터링한다.

 

ftp-data로 패킷 필터링하면 FTP의 데이터 포트로 송수신된 패킷을 볼 수 있다.

 

※ 위 방법을 거치지 않더라도 50000번대 포트와 관련된 패킷을 잡고 [Follow TCP Stream] 기능을 사용하면 png 확장자를 가진 LETTERS 파일의 hex 값을 추출할 수 있다.

 

[그림 7. FTP-Data 패킷 필터링]

 

[그림 7]과 같이 Alex가 FTP를 사용하여 ‘LETTERS.pdf’와 ‘Meeting.zip’을 전송한 것을 확인할 수 있다.

 

각각의 파일을 복구하기 위해 [Follow] - [TCP Stream]으로 출력되는 Hex 값을 통해 알맞은 확장자를 찾아 저장하면 된다.

 

‘LETTERS.pdf’ 파일의 헤더 시그니처가 ‘89 50 4E 47 0D 0A 1A 0A’이므로 png 확장자를 가진 이미지 파일인 것을 알 수 있으며 확장자 변경 시 편지를 접은 사진이 출력된다.

 

또한 png의 푸터 시그니처인 ‘49 45 4E 44 AE 42 60 82’를 본 파일의 Hex 값에서 찾아보면, 푸터 시그니처가 선언된 이후 헤더 시그니처가 ‘50 4B 03 04’인 zip파일이 숨겨져 있는 것을 알 수 있다.

 

zip 파일을 복구하기 위해 푸터 시그니처인 ‘50 4B 05 06’ 즉 ‘PK’를 찾아야 되지만 누군가에 의해 ‘pK(70 4B 05 06)’으로 수정된 것을 확인하고 ‘PK(50 4B 05 06)’로 수정하여 따로 저장한다.

 

[그림 8. Congratulations.rtf]

 

복구된 zip파일의 압축을 해제하면 ‘Congratulations.rtf’와 ‘Letters.png’ 파일이 나타나며, [그림 8]에서 보이듯 ‘Letters.png’ 이미지 파일이 “KEY”의 정보를 가지고 있으며 “KEY”를 찾아야 된다는 것을 알 수 있다.

 

[그림 9. Letters.png]

 

Letters.png를 살펴보면 여러 가지의 색을 가진 점들로 편지를 접은 형태를 구성하고 있다.

 

이는 RGB 채널의 세 가지 이미지를 합쳐 놓은 이미지이며, 상단 좌측, 상단 우측, 하단 좌측의 빈 부분은 QR 코드의 필수 구조인 위치 검출 패턴이 지워진 것이다.

 

[그림 10. StegSolve]

 

RGB 채널의 이미지들을 각각 복원하기 위해 [그림 10]과 같이 StegSolve 등의 툴을 사용하여 Red plane, Green plane, Blue plane으로 출력되는 이미지들을 저장하였다.

 

[그림 10]은 좌측부터 Red plane, Green plane, Blue plane에서 출력된 화면을 캡처한 것이다.

 

각각의 이미지에 있는 공백 부분에 위치 검출 패턴을 넣어주면,

 

[그림 11. QR Code - Red plane]

 

[그림 11]과 같이 정상적인 QR 코드의 형태를 띄는 것을 확인할 수 있으며, 세 개의 QR 코드들을 통해 “KEY”에 대한 정보를 알 수 있다.

 

스마트폰 카메라 앱 등을 이용해 각각의 QR 코드를 인식하면, ’48.860818’, ‘2.337773’, ‘THIS KEY IS THREE WORDS’가 출력된다.

 

48.860818 2.337773를 검색하면 두 개의 수가 각각 위도와 경도를 나타내며, 이는 프랑스에 위치한 루브르 박물관인 것을 알 수 있다.

이는 현지 언어에 따라 세 단어로 구성되어 있으며 ‘Musée du Louvre’가 즉 “KEY”인 것을 파악할 수 있다.

 

문제에 기술된 Flag Format이 ADCTF{lowercase(md5("KEY"))}이므로 ‘Musée du Louvre’를 md5로 암호화한 후 소문자로 입력하면 된다.

 

flag : ADCTF{9fd9a88cb0c4e1dc65a3334b245b777b}

 

 

[연관 게시글] 전국 고등학생 사이버 보안 경진대회 | 운영 및 출제위원 수행 후기
 

전국 고등학생 사이버 보안 경진대회 | 운영 및 출제위원 수행 후기

안녕하세요, HooNeee입니다! '제3회 2021 전국 고등학생 사이버 보안 경진대회'가 지난 8월 21일에 개최되었습니다. 저는 본 대회 1회차와 3회차에서 출제위원 및 운영위원 직을 수행하였고, 간략한

hooneee.tistory.com

 

Comments