문제 제목부터가 base64를 이용한 문제임을 암시한다. 자료를 다운로드 받아서 Password를 이용해서 열어보면 다음과 같은 사진을 얻을 수 있다.

사진은 정상적으로 open되지는 않으니 HxD로 검사해보자

문자열이 base64 인코딩된 값으로 보인다. 이를 decoding하면 png파일의 bytes열을 확인할 수 있다. png로 저장해서 확인하자

import base64

if __name__=="__main__" :

    str_val = "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAIAAAAHjs1qAAAABmJLR0QA/wD/AP+gvaeTAAAE5klEQVR4nO3dQa7qOBRAwdDq/W/59QqCZNrGDqdq+hHk8Y88uDHO6+/v74KGf3ZfAHyP3AmROyFyJ0TuhMidELkTIndC/n3zb6/X62vX8X/c3Sm7u/7Vd9Zmfe7q6x99/6f3cFndSZE7IXInRO6EyJ0QuRMid0Lezd3v7PpFyOjcd9ace/T9Z90HeMr8+yk9XFZ3UuROiNwJkTshcidE7oTInZBP5u53Zs2DT9uPPvp3rX7/WXP91fP7A3uwuhMid0LkTojcCZE7IXInRO6EzJy7n2bWvHyWp5978wOs7oTInRC5EyJ3QuROiNwJkTshvzx3P+2cltXnsq/+3B9gdSdE7oTInRC5EyJ3QuROiNwJmTl3f8p8d9a577POdVn9+l373Q/swepOiNwJkTshcidE7oTInRC5E/LJ3P2053re2TXnPs2sv/fOU76Hy+pOitwJkTshcidE7oTInRC5E/I6cFPyaqfNiXfNxYP/9VZ3QuROiNwJkTshcidE7oTInZCZc/dd+8VXz61Hrd5nP8uuc+I33k+wuhMid0LkTojcCZE7IXInRO6EfOO5qqvnyrvmuKedY3PaeTgHnmNjdSdE7oTInRC5EyJ3QuROiNwJebfffdfcdPUcetRp59Lc2fW7glm+cJ1Wd0LkTojcCZE7IXInRO6EyJ2QT86Z2TX/HrX6OlfP4087D+e09/+A1Z0QuRMid0LkTojcCZE7IXIn5N05M7Pmyk85L2XXnP4p5+HcOe2+iv3ucF1yJ0XuhMidELkTIndC5E7Iu7n7aefJnHaOymn3Ae7smouf9hzZy+pOitwJkTshcidE7oTInRC5EzLzuaqr5+JP2Y/+lP3fs17/lP3xl9WdFLkTIndC5E6I3AmROyFyJ+ST891v32vx3HeWXeeyH3je+RQPOife6k6I3AmROyFyJ0TuhMidELkTMvO5qqvPCz9tTn/auTer7foeRjnfHa5L7qTInRC5EyJ3QuROiNwJ+cbcffR97pw23x21677E6PuM2vU7B89VhXfkTojcCZE7IXInRO6EyJ2Qd+e7P32+fto563dWX+dp++ad7w7fIHdC5E6I3AmROyFyJ0TuhJx4zsyd0+b9tb93tS/M463uhMidELkTIndC5E6I3AmROyEz97uvnk8/6PmdQ3bt73/K+Tx3nDMD78idELkTIndC5E6I3AmROyHv5u6jc9zVr1/tKfvLd13nqF33Md6wuhMid0LkTojcCZE7IXInRO6EfLLf/TR3c9zROfeu82FW/x5gll2/N5jI6k6I3AmROyFyJ0TuhMidELkT8m7ufucpzyvdtY9813k7d057Tu3GffBWd0LkTojcCZE7IXInRO6EyJ2QT+bud3btF59l1xx61OrPPe13DhP/X6zuhMidELkTIndC5E6I3AmROyEz5+6nmbV//bTnla6+v7F6v/6oifcZrO6EyJ0QuRMid0LkTojcCZE7Ib88d991zsysefbo5446bV/7qA++T6s7IXInRO6EyJ0QuRMid0LkTsjMufuuc1fu7DqPfOP55UOefp/hg+/T6k6I3AmROyFyJ0TuhMidELkT8snc/Vf3Sd857Xmoo69/yrn7s75P+93huuROitwJkTshcidE7oTInZDXaZuwYR2rOyFyJ0TuhMidELkTIndC5E6I3An5DzfRISTqGHbgAAAAAElFTkSuQmCC"

    with open("result.png","wb") as f:
        f.write(base64.b64decode(str_val))

QR_Code를 얻을 수 있으며, 해당 QR-Code를 해석하면 flag를 얻을 수 있다.

자료로 올라간 Forensic-3.zip을 열어보면 다음과 같은 mp3파일을 얻을 수 있다. 

정상적인 재생을 불가하며, HxD로 열어보면 Hex값을 문자열로 입력한 느낌의 파일인것을 알 수 있다.

Python으로 3A라는 바이트를 지우고 텍스트로 옮겨보니 다음과 같은 base64 인코팅 문자열을 얻을 수 있었다.

디코딩을 2~3번정도 하니 다음과 같은 문자열을 얻을 수 있었다.

#!/hfe/ova/clguba sebz fgevat vzcbeg znxrgenaf xb = "nvbhHa" pbx = "@195hA" 
xbpbxvy = znxrgenaf(xb, pbx) 
fghe ="\0k54\0k68\0k65\0k20\0k46\0k4p\0k41\0k47\0k20\0k2q\0k3r\0k20\0k6o\0k55\0k61\0k35\0k41\0k54\0k75\0k48\0k61\0k6r\0k79\0k41\0k6r\0k39\0k33\0k53\0k61"; 
cevag fghe.genafyngr(xbpbxvy);

시작부분에 #!으로 시작을 하는것을 보니 #!/usr로 시작하는 스크립트, 리눅스나 유닉스에서 작성된거 같다. 특수문자가 그대로 인것을 보아하니 CEASER암호라는 판단이 들었다. 다음과 같은 사이트에서 해석을 수행했다.

 

Caesar cipher: Encode and decode online

Method in which each letter in the plaintext is replaced by a letter some fixed number of positions down the alphabet. The method is named after Julius Caesar, who used it in his private correspondence.

cryptii.com

다행이 잘 해석되었다. 해당코드를 run해주자.

출력된 값을 문자열로 변환시켜주었다.

자료를 다운로드 받고 문제에 있는 Password로 zip파일을 압축해제 하자.

두개의 파일을 다운로드 할 수 있다. wallpaper.jpg의 사진에서 이상한점을 찾아보던 도중 메타데이터에서 base64의 문자열을 얻을 수 있었다. 

  • OWIxYTgxZmUwYzcyMGMwZGUyMWQ4MTVlNDM1ZDI5MWQ=

해당문자열을 디코딩한 결과 '9b1a81fe0c720c0de21d815e435d291d'라는 문자열이 나왔고, 길이를 보아하니 MD5 해시인거 같아서 다음의 홈페이지에서 decoding을 시도했다.

 

MD5 Online | Free MD5 Decryption, MD5 Hash Decoder

 

www.md5online.org

같이 다운로드된 파일 clue.zip또한 암호가 걸려있다. j0k3r를 암호의 키로 압축을 해제하면 다음과 같은 txt파일을 얻을 수 있다.

글자의 중간중간 대문자가 와 숫자가 부자연스럽게 있는걸로 보아서 대문자와 숫자들을 추출하면 유의미한 결과를 얻을 수 있을거 같다. 다음의 python코드로 대문자와 숫자만을 추출해보았다.

import re

with open("history.txt","r") as f:
	data = f.read()
    
c = re.compile("[A-Z0-9]")
output = c.findall(data)
print(''.join(output))

결과로 "TP4J4KAPR113UM3B9I4C" 라는 문자열을 얻을 수 있었다. 해당문자열로 마지막 zip파일인 jokerBrangkas.zip을 열자 PL49!.txt에서 flag를 얻을 수 있었다.

자료를 다운로드 받아보면 Rich Text Format을 구할 수 있다. Rich Text Format은 글자의 속성까지 기억하는 포멧으로 MS에서 만들었다. 자세한 점은 아래의 위키를 참고하고, 우리는 문제를 조금 더 자세하게 보자

 

Rich Text Format - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Document file format developed by Microsoft The Rich Text Format (often abbreviated RTF) is a proprietary[6][7][8] document file format with published specification developed by Micros

en.wikipedia.org

파일을 HXD로 확인해보면 다음과 같은 포멧을 가짐을 알 수 있다.

시작부분이 89 50 4e 47인데, 이게 ASCII코드로 작성되어있다. 그니까 이걸 HEX value로 치환해주는 작업이 필요하다. 약간의 python과 HXD를 활용하여 다음의 사진을 얻을 수 있었다. 

사용한 Python코드는 다음과 같다.

if __name__=="__main__" :

    target = b'\x5c\x27'
  
    with open("test.rtf","rb") as f:
        data =f.read()


    new_data =data.replace(target,b"",data.count(target))

    with open("output.txt","wb") as f:
        f.write(new_data)

output.txt에서 나온것을 그대로 HXD로 옮겨서 png로 변환한 것이다. 조금 자세하게 보면 png의 가장 아래쪽에 50 4b 03 04로 시작하는 .zip의 시그니처를 확인할 수 있다. 추출해주면 다음과 같은 flag.txt를 얻을 수 있다 

 

아주좋다

사진을 다운로드 받아보자

우왕 멍해보이는 아이이다. HxD로 열어보자.

DOS 모드에서는 이것을... 이라는 말을했다. PE파일 exe의 시작부분인 This program cannot be run in DOS mode를 염두한 이야기 같다. DOS를 검색해보자

역시.. MZ로 시작되는 곳 부터 맨 마지막을 잘라서 test.exe로 저장하고 실행시켜보자

찾을 수 있었다.

그림을 보자

아카이브 파일경로를 하나 안내하고 있다. 

6개의 사진과 Thumbs.db가 보인다. 다운로드 받아보면 각각 FLAGIS로 시작하는 사진을 얻을 수 있다.

사진에 무언가가 숨겨져 있기는 한데, 우선 같이 동봉되어서 온 Thumbs.db도 같이 보자

Thumbs viewer로 열어본 결과 위에 6.jpg말고도 여러개의 사진이 썸네일에 저장되어있는것을 확인할 수 있다. 전부 save 해주자

찾았다. Flag는 XP의 취약점을 이야기한다. 윈도우는 자동적으로 사진파일에 대해서 미리보기 이미지를 데이터베이스화 해둔다. 이를 이용한 취약성을 논하는 거 같다. 

+ Recent posts