티스토리 뷰

Write Up

TRUST_CTF) IDENTITY_5

PORORIRI 2019. 2. 18. 17:02

2월 14일 12:00 ~ 24:00 까지 진행되었던 제 1회 TRUST CTF 에 참가했다. 

출제 되었던 문제 중 모바일 문제였던 IDENTITY_5를 풀이 해 보겠다. 



제공되는 파일은 apk 파일이고 실행하여 "trust", "TRUST", "flag" 라는 값을 입력 하라고 나온다. 지시 대로 해보자.



프로그램을 실행하면 TRUST CTF 라는 글자와 함께 QR 코드가 뜨고 남한어 번역기라는 어플이 나오게 된다. 

여기서 앞에서 주어진대로 "trust", "TRUST", "flag"를 넣어보면



둘다 base 64로 인코딩 되어있다. 디코딩 해보면 "where is the flag"와 "I_want_to_see_code"라는 단어가 나오게 된다. 

결국 소스코드를 보란 이야기.



flag를 넣으면 다음과 같은 화면이 뜨는데 해당 URL 을 입력하면 flag2라는 QR 코드 이미지가 나오게 된다.

QR 코드를 스캔 하면 "Th1s_1s_" 가 나온다. 

해당 이미지에는 번호가 있고 이 이미지를 통해 QR 코드들을 모아서 플래그를 찾는 문제라는 것을 알 수 있다. 

따라서 제일 처음에 나왔던 QR 코드 또한 스캔 해보면 해당 CTF 의 답안 제출 형식인 "TRUST{" 가 나오게 된다. 


문제 이름이 IDENTITY 5 니까 총 5개의 QR 코드를 찾아서 조합해야 한다는 것을 추측 할 수 있다. 

이제 나머지 3개의 플래그를 소스코드 상에서 찾으면 된다. 



jadx 로 앱을 디컴파일 하고 소스코드를 살펴 보면 secondhacking.class 에서 네번째 flag 의 URL 을 찾을 수 있다. 




해당 URL 의 QR코드를 스캔해보면 "R0id_@dd_Qr" 가 나오고 총 5개의 가젯이다 라고 나와있는 걸로 보아 앞의 추측이 맞다는 것을 확인 할 수 있다. 




second.class 에서 세번째 플래그로 추측되는 URL을 찾을 수 있다.  총 4개의 FLAG 를 찾았는데 마지막 5번째 플래그는 소스 코드 상에 URL 형태로 존재 하지 않아서 안드로이드 앱에 사용된 이미지 파일들이 담겨 있는 res 폴더를 살펴 보았다. 

앱 상에서 사용 되는 이미지 파일은 res>drawable 폴더에 존재하기 때문에 해당 폴더를 확인 해보면 




위의 사진과 같이 flag 5 의 QR 코드를 찾을 수 있다. 


Flag1 :TRUST{

Flag2 : Th1s_1s_

Flag 3 : google.com 

Flag 4: R0id_@dd_Qr

Flag 5 : c0d3}


다음과 같이 찾은 플래그 들을 정리 할 수 있고 flag 3 을 제외 하고 주어진 문자들을 조합해보면 


TRUST{Th1s_1s_R0id_@dd_QRc0d3}


와 같이 나타난다. 3번 플래그가 google.com 이고 4번이 Roid_add_ QR 이라는 걸 볼때 3번 플래그는 안드로이드 할때 and 이라는 것을 추측할 수 있다.


flag 작성 규칙에 맞게 a를 @로 변경하여 작성하면


TRUST{Th1s_1s_@ndR0id_@dd_QRc0d3}


와 같이 나타낼수 있다. 그런데 flag 를 인증 하니 인증이 안되서 출제자 분께 문의 하였더니 출제 오류로 인하여 URL 이 잘 못 들어갔던 것.

이후 주어진 flag 3 의 QR 코드를 조합 하면


TRUST{Th1s_1s_fl@g_@ndR0id_@dd_QRc0d3} 이 플래그가 된다. 





-후기 

CTF 에서 잘 찾을 수 없는 모바일 문제라 반가웠는데 조금 아쉬운 부분도 있었다.

주어진 flag 가 TRUST{Th1s_1s_fl@g_@ndR0id_@dd_QRc0d3} 임에도 불구하고 플래그 인증이 초반에 안되었어서 이상하게 생각했었다. 그래서 나중에 출제자 라이트업을 찾아보니  TRUST{Th1s_1s_fl@g@ndR0id_@dd_QRc0d3} 라고 되어있었다. CTF 에서 제일 중요한건 답을 인증하는 플래그가 제대로 되었는지 유무인데 그 부분이 조금 아쉬웠다.


청소년 대상 문제라 난이도를 쉽게 하기 위해서 문제에서 "trust", "TRUST", "flag" 라는 값을 넣어라, 실행하라. 라는 안내 문을 제시 해 주었다. 난이도를 조금 올리려면 어플리케이션만 주고 해당 앱의 소스코드를 분석하면서 직접 3개의 값을 넣어야 한다는 사실을 알게 하고 flag 3 의 URL 이 잘못되었으니까 아예 flag 를 google.com 에서 푸는 사람이 추측 할 수 있는 플래그 값인 "@nd" 로 변경했어도 좋았을 거 같다는 생각이 든다.


어쨌든 오랜만의 모바일 CTF 문제라 굉장히 재미있게 풀었다! 다른 CTF 에서도 모바일 문제가 자주 출제되었으면 하는 바람이 있다.

'Write Up' 카테고리의 다른 글

TRUST_CTF) IDENTITY_5  (2) 2019.02.18
Comments
댓글쓰기 폼