HackTM CTF 2020 Quals 후기

Posted on Aug 14, 2020

지난 주말에 HackTM과 WreckTheLine 팀이 공동으로 HackTM CTF 2020를 개최했다.

현수형, 주창이형, 진헌이와 함께 ROK YoungBloods 팀으로 참가했는데, 나는 개인적으로 Timisoara CTF 본선이 터지는 바람에 못 간 루마니아를 꼭 가겠다는 다짐을 했다 ㅠㅠ

본선 티켓을 꼭 따내고자 서울에 호텔을 2박3일로 잡아놓고 대회 내내 팀원 들끼리 모여서 문제를 풀었는데, 멘탈을 부수는 문제들이 많아서 오프라인으로 진행한게 다행이라 생각한다.

대회가 시작하고 처음 열린 두 개의 포너블 중에 Belluminar 2019에 출제된 동명의 문제에서 언인텐을 패치한 Trip to Trick이란 문제를 잡았는데, mprotect로 _IO_file_jumps에서 쓰기 권한을 없애놔서 벨루미나 때처럼 _IO_file_jumps->_IO_file_close를 gets로 덮을 수가 없었다.

이것저것 시도하다가 결국 우분투 19 도커 환경에서 로컬 익스에 성공하고 리모트에서 플래그를 빼오려는데, 0x1000 바이트를 넘어가는 페이로드가 너무 큰지 대회 서버에는 제대로 작동하지 않았다.

다행히 진헌이가 서버 연결 문제임을 알아채고 미국 AWS에서 똑같은 익스플로잇 코드를 돌렸더니 바로 플래그를 뱉더라.. ~_~

플래그를 대회 플랫폼에 인증했을 때는 우리 팀이 퍼스트 블러드였고 기분좋은 출발을 할 수 있었다.

나머지 남은 괴상한 포너블은 웬 DigiSpark ROM dump 하나가 전부이길래 얼마정도 구글링을 해보다가 새로운 문제들이 공개된 후 OSINT로 도망갔다. 아직도 뭔지 모르겠음ㅋㅋ

아무튼 OSINT에서 이것저것 삽질을 하다가 WebArchive에서 찾은 단서를 토대로 쭉쭉 진행해 플래그를 딸 수 있었고 그때가 대회 시작 10시간 후 였다.

사실 전날부터 쭉 밤샘을 해서 굉장히 피곤했는데, 새벽 6시 30분쯤에 단체로 3시간 쯤 잔 다음 아침 식사를 하고 왔더니 컨디션이 상당히 좋아졌다.

그렇게 오후 5시까지 이 문제 저 문제 손을 대보며 여러 시도를 하다가 마지막으로 문제들이 추가가 되었고, 나는 포너블 중에 twisty 문제를 잡았다.

Misc 분야에 Shifty라는 알고리즘 문제가 있었는데, 그 문제의 퍼즐을 C로 구현해놓은 바이너리 였다.

취약점을 찾고 main의 리턴 어드레스를 덮는데 까지 2시간 정도가 걸렸고 남은 것은 메인에서 return 하는 것이기에 당연히 퍼스트 블러드일거라 생각했는데, 거기서 몇 시간을 막혀버렸다.

퍼즐을 풀어야 return 하는 바이너리 특성상 퍼즐 해결이 마지막 남은 조건이었고, Pwnable 문제였기에 설마 저걸 풀어야하겠어, 하는 생각으로 퍼즐 블럭의 값을 덮을 방법을 찾기 시작했다.

그런데 그것이 비트 연산 구조상 불가능 했고, 방법을 찾느라 삽질을 바보같이 8시간 가까이 하다가 웹 상의 해당 알고리즘 코드를 힘들게 찾아 겨우 퍼즐을 풀고 쉘을 딸 수 있었다.

진작에 찾아볼걸..

이후 Crypto 문제에 매달리다가 대회가 종료되었고, 최종 등수 7위로 본선 진출에 성공했다 zzzlol

48시간 대회라 굉장히 피곤했지만 나름대로 재밌게 즐긴 CTF였고 여러가지 좋은 것들 배워간 것 같다.

열심히 해준 팀원들 수고하셨습니다 ^_^

https://github.com/st4nw/CTF/tree/master/HackTM