ACDC2025 write up

2025. 11. 7. 13:40review 및 write up

이번에 처음으로 실시된 AI관련 CTF대회다. 순수 해킹 실력적인 부분보단 얼마나 많은 AI 활용을 할수있냐, 툴을 얼마나 잘 알고있냐가 좀 더 중요했던 대회인 기분이 들었다. AI활용도 실력이긴하지만 대회 초점 자체가 이쪽인 듯

춘봉삐 에이전트

대화형 AI와 대화하는 형식으로 프롬프트 인젝션을 통해 다른 사람의 민감한 정보를 유출하라는 문제였다

 

제공할 수있는 정보는 위치,좋아하는 음식, 취미라고 되어있는데

 

마이페이지로 가보니 내 계정의 이름과 아까말한 정보들, 그리고 등록시간이 적혀져 있었다.

 

처음엔 다른사람의 정보는 접근이 차단된다고 했지만, 취미로 기록된 공부라고 말하니 다른사람의 정보까지 예시로 말해주고있었다. 그런데 김동찬 이라는 사람의 정보에는 아무리 봐도 플래그가 없었다

 

 

그래서 개수까지 적어놓고 예시를 달라고 하니 다른 사용자인 admin의 정보가 나왔다. 사진은 후에 찍어서 플래그가 안적혀있지만, 취미, 좋아하는 음식, 위치 정보에서 랜덤하게 플래그 조각들이 잘라져서 나온다

이건 마지막에 알은 사실인데 등록시간을 보려고 타임스탬프라고 치면 정보를 한꺼번에 출력해준다

 

조각들을 모아보니 플래그는

ACDC{S3ns1t1v3_L3akag3!} 가 되었다

 

The Hidden Game

이 문제는 사실 대회 때 제출하지 못한 문제다. 그런데 왜 라업을 적느냐? 이건 후술할 내용이다.

처음에 받은 파일은 PDF로된 테트리스 게임이였고, 여기서 숨겨진 정보를 찾으라는 내용의 스테가노그래피 문제였다.

PDF파일에는 요소가 상당히 많고 복잡하게 되어있어 HxD로 보기 불편하였기에, 비쥬얼 스튜디오 코드와 병행해서 보았다

소소한 팁

비쥬얼 스튜디오 코드로 PDF를 열면 오브젝트별로 나눠서 구조를 보여주는데 이게 상당히 편리하기 때문이다. 단, 아스키로 변환되지않는 헥스들은 HxD로 열어서 해독해야한다.

   

가장 눈에 띄는 부분은 여기다. 스코어가 777이 되면 aenigma라는 단어를 띄워주도록 하고있다. 이스터 에그같아서 더있을까 싶어 달성 스코어를 1이 되게 바꾸고 직접 플레이해봤는데 aenigma 뜨는게 다였다.

 

그 다음은 PDF 끝으로가면 EOF로 끝난 후에 PNG파일이 붙어있는걸 확인할 수 있었다. 

이걸 HxD로 열어서 따로 추출한 결과

진짜 여기서 무구한 세월을 보냈다. 갑자기 수수께끼 문제 등장

 

풀이는 다음과 같다

 

먼저 gameData가 0부터6까지 딱 7개있고 수상한 암호문이 적혀있는데

 

이는 qlpo 헤더 기반 포맷으로 QCompress라고한다. base64로 디코딩하면 바이너리 데이터가 나오는데 이를 다시 zlib으로 풀면

 

begin 666 <data>형태의 uuencoding을 풀어야하고,,

 

그걸 다시 Ascii헥스에 맞춰 utf8로 맞추면,,,

 

HJEOADTVMEIGZZRFFOADNCFSOEDAVTKITLRQKHZWNHOKEM
SFRHMGRFLRITLRHJIIZSURWRDLHNAGAOKNALDIXIZGGVRILSRZIINFZ
JIIOXDIRIYOAHATZNPIORETANX
NGPGRMNFRLGBMXVEGRADAFDEZMRZNIEVEHMRZTVLMFZR
EVMJODNYCSKTBRFRNYITAPKUVMHBAKHZGBBATAOXMNGVTCXFVIVNITLRNEDOADFHINVFD
NGPGRKRRKSKXZXFLBNMHGHKIJGRGBSOOAZRVFS
SZNVEKLNGPGRQBGKOOADRAKIMXRGEZNB

 

이렇게 7개의 대문자 문자열이 나오게된다.

 

처음 그림에서 양파가있었던 이유는 디코딩을 까고까고 계속 까야했기 때문이라는 것 같다

어이가없다

 

여기서 끝이 아니다 

앞에서 나온 문자열을 다시 해독해야하는데 

이는 비제네르 암호화 방식으로 키가 필요하다. 두번째 그림인 777을 보면 아까 스코어가 777일때 나오는 aenigma 라는 문자열을 사용해야한다는걸 알 수있다.

 

이제 aenigma로 비제네르 암호를 복호화 하면 나오느냐

 

아니다

ROT13까지 적용해 줘야 평문 문자열을 볼 수있다.

이건 정말 AI를 안쓰면 엄청난 시간이 걸릴 것 같다 (난 쓰고도 오래걸렸다)

 

USE THE GIVEN NAME OF THE APOSTLE NICKNAMED THE DOUBTER
FORM THE SURNAME USING THE FRISIAN PATRONYMIC PATTERN STEMRISMA
WRITE EVERYTHING IN UPPERCASE
APPLY NASAL LINKING WHEN S MEETS M; REALIZE IT AS 'NSMA
REMOVE ALL SPACES AND PUNCTUATION THEN CONCATENATE THE GIVEN NAME AND THE SURNAME
APPLYLEETSPEAKSUBSTITUTIONSTOBOTHAEIOS
FINALLYAPPLYROTTOTHEENTIRESTRING

 

이 7가지 문장이 나온 평문인데 

Doubter라고 불린 사도는 thomas로 여기서 하라는대로 다해도 플래그가 전혀 맞지않았다

혹시 FRISIAN PATRONYMIC PATTERN이 틀렸을까 싶어 여러가지 경우의수를 조합해보며

GU0Z45GU0Z4A5Z4
GU0Z45GU0ZA5Z4
GU0Z45GU0ZE1A5Z4

등의 문자열이 나왔는데 다 틀렸다

 

마지막 물고기 7개도 대체 뭔지 감을 잡을 수 없었는데, 대회가 끝나고 그 진실을 알 수있었다.

빨간색물고기, 빨간 청어는 이유없이 주의를끄는 것 이라는 속어가 있다. 당시에도 알아내기는 했지만 이 문제랑은 상관없다고 생각하고 넘어갔었다.

그런데,,

물고기7개는 앞에서 나온 7가지 문자열을 뜻하는 거였고 하나가 빨간색인 이유는 마지막 문구는 실행하지 말라는 뜻이랜다

그래서 플래그는 ROT13을 안한

TH0M45R1N5M4 다

 

정말 꼬고 꼬고 꼬아서 만든 문제였다.