CTF-7주차

챠챠비둘기·2023년 5월 24일
0

전체세션

목록 보기
6/6

첫번째 문제


파일을 다운받아 보자.

압축파일에 비밀번호가 걸려있다.

파일 옆에 * 표시가 붙으면 암호가 걸려 있다는 의미이다. 즉, 압축 파일에 들어있는 3개의 파일 모두 암호화가 되어 있다는 의미이다. 일단 hxd를 켜서 파일을 분석해보자.

헤더 50 4b 01 02를 찾아보자. 50 4b 01 02는 압축파일의 로컬 파일의 헤더 시그니처이다.



압축 파일에 들어있는 총 3개의 파일의 로컬 헤더를 찾을 수 있다.
여기서, 암호화된 파일을 일반 파일로 바꿀려면, flag bit를 다르게 설정해 주면 된다.



09 08로 설정되어 있었던 flag bit를, 08 08로 바꿔준다. 그러면,

이렇게 암호화가 해제된 것을 확인할 수 있다.
참고로, Am I key 이 2개의 텍스트 파일은 dummy이고, 진짜 키에 대한 힌트는 압축파일에 들어있는 텍스트 파일에서 얻을 수 있다.


처음에는 키 값인줄 알고 그대로 auth에 입력했다가 아니라고 빠꾸먹었다. 아무래도 암호화가 되어있는 듯하여, base64 사이트를 이용해 복호화를 해 보았다.

key 값 발견

2번째 문제


문제 파일을 다운받은 후, 압축을 풀어보자.
그 후, x64 dbg에서 파일을 열어서 분석해 보자.

모든 모듈 -> 문자열 참조로 들어가서, 어떠한 문자열들이 들어있는지 살펴보자.

수상한 문자열이 보인다. "Correct" 문자열이다.
아무래도 올바른 값을 입력받으면 위의 "correct" 문자열을 출력하는 구조인 것 같은데, 여기서 올바른 값이란 바로 flag 값일 것이라고 추측해 볼 수 있다.

문자열이 들어 있는 주소로 들어가, 여러 개의 call 함수를 타서 cmp 명령어에 도달했다. 아무래도 cmp 명령어에서 값을 비교한 뒤 그 결과값에 따라 jump 명령어를 실행하는 문제인 듯 싶다.

명령어를 분석해 보자면, ecx 값에 flag 값이 저장되어 있을 것이라고 추측해볼 수 있는데, 덤프에서 따라가기를 통해 주소 [rdx + rcx] 에 들어있는 값을 확인해 볼 수 있다.

234개의 헥사값으로 이루어진 문자열인 것을 보아, flag 값은 24개의 문자열로 이루어져 있을 것이라고 추측해 볼 수 있다.
여기서 주의해야 할 것은, 이 주소에 저장된 값이 온전한 flag 값이 아니라는 것인데, 어느 정도의 연산을 거쳐야 플래그 값을 알 수 있다.
어셈블리 명령어를 다시 분석해 보자.
풀어 말하면 길기에 결론만 알려드리자면, 아래 명령어

add eax, ecx 명령어로 인해, eax = eax + ecx이고, 이는 헥사값을 아스키 코드로 변환할 때, 만약 진짜 첫번째 값을 구할 때 진짜 첫번째 값과 진짜 두번째 값을 더한 값이 바로 위의 헥사값이라는 것을 알 수 있다. 진짜 첫번째 값의 경우, 어떠한 힌트도 없기에 가장 마지막 값인 0x00 부터 시작해서 계산해 보도록 하겠다.

플래그 값 찾긴 했는데......
좀 더 연구가 필요할 듯 하다. 사실 명령어 분석은 그다지 어렵지 않았는데 코드를 짜는 과정에 있어서 결국 깃헙의 도움을 받았기 때문에....😥
알고리즘 공부가 더 필요한듯 하다.

휴....비슷한 문제 하나 더 풀어봐야 될 듯 하다.

3번째 문제


악성코드가 첨부된 pdf 파일을 분석해서 flag를 찾는 문제이다.
일단 파일을 다운받아보자.

흠.....
일단 pdf 파일의 구조에 대해 간단히 정리하고 들어가도록 하겠다.

pdf 파일은 크게 4가지 영역으로 구분할 수 있다.
Header, Body, Cross-reference table, Trailer

Header: 총 8바이트로 PDF의 시그니처와 PDF 문서의 버전 정보를 포함함
Body: 실제 문서의 정보들을 포함하는 오브젝트들로 구성되어 있음
Cross-referene table: 오브젝트들을 참조할 때 사용되는 테이블로, 오브젝트의 사용 여부와 번호 등이 저장됨
Trailer: Body에 존재하는 오브젝트 중, 루트 오브젝트가 무엇인지, Cross-reference Table의 위치가 어디인지 저장됨

pdf 파일을 분석하기 위한 유용한 툴이 있다. 풀어보면 알겠지만 이것도 툴을 잘 다루면 해결되는 문제..ㅋㅋㅋ
pdf stream dumper를 다운받아보자.
링크텍스트

다운로드가 끝난 후, 툴을 실행시켜서 파일을 열어보자.

pdf를 오브젝트에 따라 구분해 놓은 걸 볼 수 있다.
처음 써보는 툴이라 어느정도 인터넷을 참고하였다.


오브젝트들을 열어보면 알겠지만 자바스크립트로 구성된 부분이 있다는 걸 발견할 수 있다(그나마 내가 아는 언어라 먼저 눈에 띄었음...ㅎ)
위의 37번 오브젝트를 추출해서 보도록 하자.

자바 스크립트 코드가 작성되어있다. vscode를 이용해서 실행시켜보자.

우ㅜㅜㅜㅜㅜㅜㅜ....
다시 pdf stream dumper 툴로 돌아가서, 오브젝트 39번 파일을 열어보니

pdf 파일의 헤더를 발견할 수 있다.

참고로 hxd로 분석한 pdf 파일의 구조는 위와 같다.
아무튼, 39번 오브젝트를 따로 추출해서 보도록 하자.

추출한 pdf 파일을 다시 pdf stream dumper로 열어보면, 해당 pdf파일이 암호화되어있다고 뜬다. 복호화를 시도해보자.

?
제대로 복호화가 안된듯 하다.
다른 사이트에서 잠금을 풀어보자. pdf 파일은 사이트에서 왠만하면 잠금 해제가 가능하다.

잠금 해제후 다시 pdf stream dumper로 열어본다.

4번 오브젝트에서 플래그를 발견할 수 있다.
계속 auth에 입력해 봐도 자꾸 틀렸다고 나오길래 문제를 다시보니

힘드네요...☠️

또 틀렸다고 뜬다. 알고 보니 md5로 변환해서 key 값을 적어야 했다.
온라인 md5 해쉬 생성기 사이트를 통해 key 값을 알아내도록 하자.
링크텍스트

참고로, 여기서 생성된 hash값을 모두 소문자로 바꿔야 한다. 이렇게 문제 제대로 안보고 풀면 시간만 날리고 개고생하게 된다.


여러모로 끝내주게 재밌다. (반어법임)

profile
개발 + 보안

0개의 댓글