CTF/N0named CTF

[N0Named CTF - Write Up[A]] 회사 찾기!

Ron Weasley 2021. 8. 22. 15:24

  안녕하세요!!! 저번 시간에는 hxd에디터로 PNG파일의 고유 헤더 시그니처인 89 50 4E 47 0D 0A 1A 0A로만 바꿔주면 바로 flag값이 나왔습니다. 이번에는 50점을 주는 문제인 회사 찾기를 풀어 보겠습니다.

 

  (오늘도 설명충이니 지루해도 읽어주세용...다 도움이 되는 말만 골라서 하겠습니다 ㅋㅋㅋㅋ)

 

  문제를 한번 보겠습니다.

Question

돈이 필요하고...포렌식을 잘하니까 포렌식 회사에 취직해야지 ㅎㅎㅎ 그런데 어디로 가야할까?? 라는 문제네용!? 그럼 문제를 보면 느낄 수 있는게 회사를 찾는거니까 회사는 COMPANY입니다. 플래그 값에 COMPANY라는 단어가 들어간다는 추측은 할 수 있습니다. 이제 주어진 파일인 FINDAJOB.zip을 다운 받아보겠습니다.

 

zip파일이네요?? 그럼 압축을 풀어보겠습니다.

error

엥..? 압축 형식을 알 수 없다구요?? 근데 왜 압축파일 형태를 하고있는건지 모르겠네요 그죠?? ㅋㅋㅋ일단 이 문제는 zip파일 구조에 대해서 잘 알아야 하는데...제 블로그에 zip파일 구조를 잘 설명한 포스팅이 있으니까 보고와주세요 !! 링크 걸어드릴게용 https://lemonpoo22.tistory.com/13

 

압축(Zip)-파일 구조

ZIP FILE FORMAT(ZIP 파일 형식) ZIP 파일 형식은 여러 데이터들을 압축, 보관하기 위한 파일형식이다. ZIP 파일은 하나 혹은 여러개의 파일들의 크기를 줄여 압축하고 하나의 파일로 묶어서 저장한다. Z

lemonpoo22.tistory.com

이제 다 읽으셨다고 생각하고 hxd에디터를 통해서 저 문제파일을 열어보겠습니다.

Local file header
Central Directory file header
End of Central Directory

  zip파일은 파일 구조가 3개로 나뉩니다. 대표적으로 local file header, Central Directory file header, End of Central Directory가 있습니다. 위 그림은 앞서 말했던 파일 구조를 짤라온겁니다. 포스팅한 자료를 읽어보았다면 제 말이 쉽게 이해가 될 것이고, 안 읽어 보셨으면 설명하는걸 조금 이해하는게 어려울 수 있지만 그래도 쉽게 설명 하겠습니다. 일단 각 파일 구조마다 고유 시그니처가 다 다릅니다. 시그니처는 다음과 같습니다.

 

ZIP파일 고유 시그니처

Local file header : 50 4B 03 04

Central Directory file header : 50 4B 01 02

End of Central Directory : 50 4B 05 06

 

  이제 그림을 보면 제가 빨간 박스를 해놨습니다. 이 부분이 해당 파일 구조가 시작되는 시작점이면서 고유 시그니처 입니다. 그럼 하나가 다른게 보이시죠?? 바로 Local file header 부분입니다. 50 4B 03 04여야 하는데 50 50 03 04입니다. 그럼 hxd에디터를 통해서 50 4B 03 04로 바꾼 다음에 압축을 풀어봅시다.

압축이 잘 풀리고 이러한 텍스트 파일을 하나 주네요?? 실행을 시켜봅시다.

엥?? 이게 무슨 상형문자입니까??? ㅋㅋㅋㅋㅋㅋ황당하네요 ㅠㅠ...근데 잘 보면 중간 중간에 대문자 알파벳이랑 중괄호 이런것이 있는게 보입니다. 그럼 다 지워봐도 되지만 우리는 보안을 공부하는 학생이니까 코드로 해당 \ : / 이런 문자들을 다 제거해봅시다. 예시 코드는 다음과 같습니다.

<해설>

① f변수에 위에 주어진 txt파일을 'r' 모드로 불러옵니다. (단, 파일 경로를 잘 지정 해줘야합니다.)

② flag 변수에 읽어온 txt파일을 읽습니다.

③ txt파일을 들여다보면 가장 많이 나오는 문자들을 character변수에 넣어줍니다.

④ replace함수를 가지고 모든 character에 있는 문자들을 공백으로 만들어 줍니다.

⑤ join함수로 공백을 다 지우고 split함수로 줄바꿈 탭 키 다 지웁니다.

⑥ 파일을 받아줍니다.

 

이러한 코드를 작성하게 되면 이런식으로 나옵니다.

여기가 좋겠군! 뒤에 있는 영문자로 되어있는게 flag값입니다.

 

  지금 제가 올린 코드가 마음에 안드실 수 있는데 오히려 조건문을 가지고 아스키코드 값으로 대문자와 중괄호만 출력하는 코드로 작성해보세요 여러분들은 저보다 코딩 실력이 뛰어나실거기 때문에 가능하실거라 믿습니다.

(Keyword = ord(), A는 아스키코드 65)

다음에는 입사테스트[1]에 대해서 작성하겠습니다~