Tamu CTF 2023 review

이번 주말에 오랜만에 전력(?)으로 posix와 함께 CTF에 참여했다. 원래 각자 포너블만 풀어서 그냥 따로 참여했었는데 이번에는 처음으로 같은 팀으로 참여했다. 나는 평소에 포너블만 건드려서 풀이 속도가 느리더라도 포너블 위주로 풀고 싶었었는데 posix가 나에게 포너블을 양보해줘서 그렇게 할 수 있었다. 팀 명은 아무거나 하라고 해서 내 닉넴으로 하였다. (시작하기 전에 물어봤는데 해도 된다고 했다.ㅎ)


결과적으로 우리는 10등을 할 수 있었다! 원래는 14등쯤이었는데 막판에 크립토 문제를 해결해서 10등에 안착할 수 있었다.


posix가 사실 거의 다 풀었다. 웹이랑 리버싱을 캐리해줬다. 내가 인증한 문제는 목록은 아래와 같다.



빨간색 네모는 내가 풀고 인증했고, 파란색 네모는 열심히 분석했지만 풀지 못한 경우, 혹은 같이 분석하다가 posix가 먼저 풀어서 인증한 경우, 혹은 posix가 거의 다 분석했지만 내가 flag를 찾아서 인증한 경우이다.
(포너블 첫번째 문제 거의 10분컷해서 내가 퍼블먹었다. ㅎ 포너블 첫번째 문제 풀고 딴거하러 갔다.)

이번 기회로 크립토에 대한 흥미가 아주 살짝 생겼다. 이 씨텝을 통해 md5 collision과 prng, lcg 알고리즘에 대해 새롭게 알게되었다. 덕분에 블로그 최초 크립토 롸업을 작성해보려고 한다. 크립토 문제 풀면서 대회 끝나기 1시간 전에 ChatGPT한테 이것저것 물어보고 힌트 얻어서 prng 문제를 바로 풀 수 있었다. ㅋㅋ 첫번째 rsa 문제는 끝나고 롸업봤는데도 아직도 모르겠다. 풀고 싶어서 열심히 노력했는데 결국에 풀지 못해서 아쉽다.

포너블은 역시 분석보다 익스가 훨씬 어렵다. 코드 읽고 추측 못해도 디버깅하면서 취약점은 생각보다 금방 찾을 수 있는데 익스가 너무 어려웠다. 특히 Pwnme… 되게 간단한데 어떻게 풀지 몰라서 posix한테 도움 요청해서 같이 보다가 posix가 천재같은 발상(나는 못했던 발상)으로 풀어버렸다 ㄷㄷ. Shellcode 문제는 whitelist가 너무 빡세서 and와 or 연산정도밖에 사용못한다. 아직 내 역량으로는 풀 수 없을 것 같아서 posix한테 풀어달라고 했다. ㅎ Macchiato 문제는 자바로 작성되어 있다. 자바로 작성된 프로그램은 메모리 관리를 가비지 컬렉터가 잘 해주기 때문에 일반적으로 메모리 커럽션 취약점이 발생할 수 없다. 그래서 일부러 취약한 키워드를 작성해줘야 한다. 새벽에 분석 조금 하다가 잠와서 그만뒀다.

포렌식 첫번째 문제는 메모리 포렌식 문제이다. 디스크 이미지를 제공해주는데 mount까지 하고 posix와 같이 분석했다. 문제에서 제공해준 pcap 파일에서 4444 포트에 접속해서 데이터를 주고 받은 것을 바탕으로 4444 포트를 여는 바이너리를 찾으려고 했다. vi history인가 그거 보고 수상한 파이썬 코드를 찾았는데 AES encode를 이용하여 통신을 할 수 있는 코드였다. 여기서부터 뚝딱뚝딱 posix가 pcap 파일에서 데이터 전송한거랑 전송받은 것을 해석해서 flag를 구할 수 있었다. 두번째 Discordance 문제는 열심히 노력했는데 결국 풀지 못하였다. 롸업봤는데 내 기준으로 게싱 요소가 있어서 하루종일 봤어도 못 풀었을 것 같다.

미스크는 나름 재밌었다. 마지막 문제는 마인크래프트에서 명령어를 실행시키는 문제인데 너무 신박했다. 내가 관여한 것은 하나도 없지만 그냥 재밌었다.

대회 시작하기 전에 씨텝 운영진의 실수로 대회 시간이 조금 이상했지만, (세계 시간을 제대로 숙지하지 못한 것으로 보인다.) 문제는 전부 다 생각보다 재밌었다. 대회 기간도 48시간이라 아무것도 모르는 크립토를 공부하면서 풀 수 있어서 매우 의미있던 시간이었다.

롸업은 크립토 두 문제와 포너블 8 문제를 적으려고 한다. 다 적으면 여기 아래 링크를 추가할 예정이다.