Try to be the expert.

Ainsetin's Hacking & PS & Math

Hacking/CTF 후기

2021 Layer7 CTF 우승 썰 + 후기

Ainsetin 2021. 11. 23. 10:21

Summary

작년 11월에 2020 Layer7 CTF 후기를 적었었는데, 올해 후기도 써달라는 댓글이 있어서 한번 써보려고 한다.

정말 놀랍게도 작년 9월에 PS에서 해킹으로 전향하고 나서 완성이 되지 않았던 내 실력으로 참가했던 대회에서 올해 우승을 해서 너무 기쁘다. "CTF는 할만하다" 라는 문구로 시작했던 이 대회에서 작년 YISF 우승 이후 다시는 못할 것 같았던 CTF 우승, 그것도 일반부까지 포함된 대회에서 종합우승을 이뤄냈다는 것이 너무나도 뿌듯하기도 했다. 이제는 CTF 뿐만 아니라 좋은 대학의 좋은 동아리, 해킹 팀에 이바지하고 싶고, 좋은 선배들, 지인들도 만나 내 역량을 공유하고, 보탬이 되고자 한다.

Layer7 CTF 우승까지의 험난한 여정

잘 볼거라는 확신이 없었던 수능을 마무리하고 한창 목표도 없고 허전함만 남은 나에게 2021 Layer7 CTF는 참 단비같았다. 작년에 참여했을 때 아쉬웠던 그 마음을 담아 올해 꼭 수상을 하고 싶다는 생각이 있었고, wireless 마우스나 가져가자는 생각으로 이 대회에 참여하였다.

처음에 Mic Check를 풀고 나서 다음 문제를 푸는 데까지 걸린 시간은 거의 2시간 반정도였었다. 내가 주 분야가 Pwnable 이다보니 문제를 모두 훑는데 많은 시간이 걸렸었고, 특히 너무나 많은 메뉴들에 쫄려서 Pwnable은 일단 접기로 하고 Misc부터 풀었다.

논리회로의 맨 마지막이 1이 되게 하는 답을 찾아 2진수 -> 10진수로 만들어 문제를 해결하였는데, 너무나도 많은 답이 있어 좀 당황했지만, 이제 첫 출발을 할 수 있게 되었다.

2번째 문제부터는 web이 너무 어려워서 계속 기다리다가 handmade 문제가 나왔다고 해서 바로 풀어봤는데, custom request parser가 있는 것을 보고 이건 path traversal 관련 문제겠구나 싶었다.

아니나 다를까, burp suite로 request packet을 잘 조작하니까 쉽게 flag를 딸 수 있었다.

이때부터 좀 속도가 붙는다 싶더니, markdown parser 문제를 풀기 위해 내가 아는 모든 마크다운 문법을 총동원하기 시작하였다. (이때는 코드 leak이 안되는 줄 알았다 ㅋㅋㅋㅋ) 아무리 해봐도 잘 안되서 뭐지 싶었는데, view.php에서 파일을 다 긁을 수 있는 취약점이 있어서 너무 놀랐었다 ㅋㅋㅋ..

easy_calc 문제는 정말 오류가 많아서 2번이나 문제가 내려갔었다. 후위표기법을 인터넷에서 긁어서 문제를 풀었는데, 내가 풀 때도 문제 자체가 이상해서 퍼블 먹으려고 계속 기다렸다가 float로 답을 전달하면 안되는 것을 깨달았다 ㅋㅋ.. 쨋든 퍼블은 아쉽게도 못먹었지만 쉽게 풀 수 있었다.

easy web 같은 경우 webshell 관련 문제였는데, 출제자의 실수로 strpos에서 0을 반환하는 상황을 필터링하지 못하여 그대로 php webshell이 들어갔었다. 또한 uploads/xxx에 직접 접근할 수 있는 또 하나의 실수가 터져 결국 너무나도 쉬운 문제가 되어버렸다는 썰이 있더라 ㅋㅋ..

easy_rev 같은 경우 처음에 코드를 작성할 때 z3로 푸려고 했는데, 왜인진 모르겠지만 비트 손실이 없어도 너무나도 복잡한 방식을 채택해서 그런지 z3가 제대로 solve를 해주지 못했다. 포기하려던 순간, 비트가 1234567이 모두 보존된다는 사실을 깨닫고 그냥 맞는 x번째 flag 글자의 y번째 비트로 복구해주니까 flag가 나왔다. (처음에 복사를 잘못해서 그런지 답이 이상하게 나왔다 ㅋㅋ)

 

ㅋㅋ

마지막에 아무리 생각해도 selfmade 문제의 솔버가 생각보다 많다는 느낌이 들어서 다시 한번 잡았었고, urllib.parse.parse_qs 함수에 뭔가 문제가 있을 것이라고 생각하였다. 아니나 다를까, urldecode가 되지 않은 상태로 넣어주면 배열에 그대로 박히는 것을 눈으로 확인할 수 있었고 제대로 게싱을 잘 해서 플래그를 획득할 수 있었다.

한 문제만 더 맞추면 1등이 눈앞에 보여 마지막으로 pwnable에서 취약점만 찾고 귀찮아서 익스를 적지 않았던 문제를 다시 빡세게 잡아 결국 최종 5216pts로 1등을 거머쥘 수 있었다.

2등에게 제발 따라오지 말라고 했던 상황, 이 친구 설득하는데 고생했다.
결국 더이상 못풀겠다 선언하고 안따라온 유규민씨. 감사합니다.
마지막 포켓몬 pwnable 문제 libc leak 따고 친한 운영진한테 1등 선언한 장면.
좀 너무 감격스럽다..

후기, 앞으로의 여정과 계획

솔직히 이렇게 1등할 수 있었던 것은 친구 as3617이나 mhibio, 개고수 n1net4il이 빡세게 참여하지 않았던 것도 있다 ㅋㅋ 그렇지만 나도 경쟁력이 있다는 것을 확실히 보여준 대회가 아닌가 싶다.

그리고 주변 친구들이 고수들이 모여 있는 팀으로 가는 것을 보니, 나도 이제 큰물에서 놀아야 하지 않을까라는 생각을 점점 하게 된다. 지금 소속되어 있는 팀에서는 CTF도 잘 안뛰게 되고, 팀장님이나 대학생 분들에게 개인적으로 도움을 받는 것 뿐 정작 팀에서 내가 하는 것이 없다는 생각이 든다. 곧 대학을 가서 해킹동아리에 입부하여 나의 꿈을 펼칠 것이기 때문에 점점 정리를 하고 싶은 마음이 없지 않아 들기 시작하였다.

공부하고 싶고 따로 실습하고 싶은 건 많지만, 지금은 제약된게 너무 많기도 하고, 노트북도 빨리 좋은걸로 바꾸고 싶고, 연말까지 해야될 연구활동도 있고.. 참 해야될게 많다. 한편으로는 놀지도 않고 이렇게 바쁘게 사는 것이 너무 한심하다는 생각이 드는데, 대회 끝나고 한 이틀동안 아파서 몸을 잠시 쉬어주는게 중요하다는 것도 알게 되었다.

이렇게 지금까지 학창시절에 노력한 여정이 나에게는 큰 자산이 될 것이고, 앞으로의 나를 만들어 줄 것도 알기에 포기하지 않고 열심히 나아갈 것이다. 나를 도와주시는 지인 분들도 많아진 것도 사실이고, 거기에 맞춰 나도 더욱 열심히 하기 위해 꾸준함, 성실성을 잃지 않을 것이다.

마지막으로, 이 대회를 통해 1년 동안 어떤 사건이 지나갔는지 모를 정도로 매우 시간은 빠르고, 정말 아무것도 아닌 내가 사람이 발전하는 데 걸리는 시간은 그리 많지 않았다는 것을 느낄 정도로 신기하다는 생각이 든다..

"더욱 발전하는, 발전할 예정인 나를 위해 현재에 최선을 다하자."

'Hacking > CTF 후기' 카테고리의 다른 글

2020 Layer7 CTF 후기  (2) 2020.11.15
2020 TRUST & STEALTH CTF 출제 및 운영 후기  (4) 2020.03.27