본문으로 바로가기

[본 게시글은 완전 개인적인 후기이며 필자는 FTZ, LOB를 풀고 이제 Pwnable.kr을 풀기 시작한 지식에서 대회에 나갔습니다.]

 

이대회는 나의 공식적인 첫번쨰 대회였던것 같다.. 10월 8일에 오전 10시부터 오후 10시까지 12시간동안 진행했다. 팀원과함께 카페에 만나서 하기로했는데 대회는 시작하자마자 3문제가 공개되었다. 장소까지가는데 살짝 시간이걸려서 첫번째문제를 대회시작후 7~8분정도만에 푼것같다. 단순한 검색문제였다.


1. Mic Check문제



화이트햇 명예의전당에 가면 풀수있는문제로 먼저푼사람이 순위권에 올라갔다. 그리고 나머지 두문제는 포너블로보이는 CEMU라는 문제와 웹문제로보이는 GoSandBox라는 문제였다. 그떄는 GoSandBox문제는 완전 웹문제라고생각하고 건들지도않았는데 차라리 그문제에 시간을 투자하는게 좀더 좋았을뻔했다. 전부다 포너블이다라고 확실히 할만한 문제는 안나왔던것같다. 물론 내가아직 포너블을 시작하는 단계라서 그런것일수도있다. 그떄는 아침이니까 확실히 기운이넘쳐서 Cemu문제에 무한대로 값을 계속 대입해봤다.


2. CEMU 문제



정말 계속 대입을해보니까 원래는 Input Opcode다음에 아무거나치면 [-] Input Error 가 나오는데 저런식으로 Complete라는게 나와서 기쁜(?!) 나머지 계속해서 대입을 해보았다. 그래서 별에별 오류코드를 가지고 뭔가 있나하면서 검색을해보았는데 전혀 저것에대한 정보가 없었다. 저떄는 왜 영어를 해석하려고 생각하지않았는지 모르겠지만 시간이 지난후에 영어를 해석해야겟다는 생각이들었다.. 그래서 다시 생각을해보니까 저기 입력란에는 쉘코드를 넣어야된다는 생각이들었다. 그래서 알고있는 여러가지 쉘코드를 막넣어봤는데 그러면서 Null Byte detected 같은것도 발견해서 확신을 얻었다. 그런데 결국엔 저위에 레지스터가 무슨뜻인줄 몰랐다.

저레지스터는 계속 서버에 접속할떄마다 값이 바뀌었으며 감이안왔다. 그리고 다른문제를 풀었는데 대회 몇시간을 남기고 거의 모든문제를 포기하고 다른 대회에 라이트업을 보았는데 2016코드게이트 라이트업에 Cemu문제가 있었다..

이때 Cemu의 의도를 파악하고 파이썬으로 저 레지스터를 파싱해서 쉘코드로 레지스터를 저값으로 맞춰야된다는 생각이들었다.

그렇지만 결국에 pwn모듈이라던가 모르는게 너무많아서 제시간에 해결할 수 없었다. 하지만 다음에 저런유형의 문제가 나온다면 풀 수 있을거라는 생각이 든다.


3. GoSandbox 문제



이문제는 정말 그냥 웹문제라고생각하고 안풀었지만 나중에 라이트업을 확인해보니 그런게 아니였다. 소스부분에 C를 쓸수있는 모듈을 임포트해서 플레그를 읽으면 되는문제라고한다.. 2번에 무한 대입을 할시간에 이문제에 대해 검색해보면 풀수있었을것 같다는 생각이 든다..


4. Login 문제



이문제는 정말 웹이라서 건들지 못했던 문제였다. 팀에 내친구가 풀었는데 정말 11시쯤부터 시작해서 5~6시까지 이문제만 붙잡고있더니 결국풀었다. 이런 문제를 보니 시험이 끝나면 웹공부도 포너블공부와 같이 해야겠다는 생각이 들었다..


5. API문제


솔찍히 이문제는 400점인거보고 포기했다.. 물론 다운은받아서 이것저것 해보았지만 정말 뭔지 하나도모르겠어서 넋놓고있었다..


6. easy 문제



easy문제에 nc로되있는거보고 문제가 나왔을떄 드디어 풀 수 있는 문제가 나왔구나 했는데 들어가보고 easy가 easy가 아니구나.. 라는 생각이 들었다.. 정말 당황스러웠던게 들어가자마자 나온것이 아래사진이다.



js > 이것외에 어떤 단서도 없었다. 이때 cemu에 무작위대입을 해보면서 멘탈에 금이조금씩 가던때였지만 기운을차려서 또 무작위로 대입을 해보았다. (물론 완전한 무작위대입이아닌 검색을해봐서 명령어에 가까운걸 대입해보았다.)

그러다가 이문제도 잠깐 제쳐두고 저위에서 cemu에대한 코드게이트라이트업을 보고있을떄 그 라이트업에 아래쪽에 이문제와 거의비슷한 문제가 있었다. 거기에대한 답은 os.system()함수로 쉘을 실행시키는것이였는데 그걸보고 바로쳐보니까 아래사진이 되었다.



그리고 여러번 쳐보다가 os가 필터링되는게아닌 system이 필터링되는것이라는걸 알아냈다. 이떄 정말 아쉬운건 포너블.kr에 문제를 몇개만더 풀어봤어도 이문제를 풀었을것 같다.. 끝나고나서 이문제를 푼애한테 물어봤을떄는 저 system을 문자열로 처리해서 문제를 풀면 된다고했다.. 좀만더 포기하지않고 검색을 해보았어도 풀었을법한 문제인데 아쉬움이많이 남는다.. 쉽게 포기한게 정말 큰것같다.



7. secret message 문제



마찬가지로 웹문제라서 구경만했는데 나중에 라업을보니까 엄청 재밌어보였다.. (웹공부를 꼭해야겟다.)


8. hard 문제



이문제는 아까 easy문제에 업그레이드된 형태인것 같다. 이 문제에는 들어가만 보았는데 이걸 풀시간에 easy에 시간을 쓰는게 더좋을것같아서 미뤄두다가 결국 건들지도 못하고 끝난문제이다..


9. REVS문제



이문제는 200점문제인데 모든팀이 못풀었다고한다. 내가 이문제를 풀떄는 ida사용법이나 익혀보자는 마음으로 삽질을 해봤는데 나중에 라업을보니까 정말 1%도 답근처에 못갔다.. 암호에대해서 알아야하는 정말 어려운 문제였던것 같다.


10. short path 문제



이문제 보고 그냥 웹문제인줄알고 하던거 하고있었는데 다른친구가 그냥 노가다로 풀었다고해서 좀놀랐던 문제이다. 그런데 진짜 그냥 단순노가다 문제였다.

이런식으로 나오는데 시작을누르면 지도상에 랜덤으로 경로가 뜬다. 그럼 그경로위에 올려보면 숫자가나오는데 그숫자를 세종시에서 가까운순서대로 입력해주면 다음으로 넘어가는데 나오는 갯수가 많아지고 조금씩 어려워진다. 그렇게 세번만 하면 플레그가 나온다.

이문제는 조금 늦게나온문제인데 보통 그시간까지 있던사람들은 거의다 푼것같다.


11. malloc 문제



이문제가 마지막으로 더이상 안나왔는데 가장 포너블에 유사한 문제였다고 생각한다.. (물론 bof에대한 지식밖에없어서 못풀었지만) 


1. malloc 2. free 3. motify 4. list 5. exit


이런식으로 메뉴가있고 malloc을 하게되면 크기와 데이터를 지정해서 malloc해준다. 주워들은 지식으로 이문제는 UAF(Use-After-Free)문제라고 생각했다. 그래서 시도를 해봤는데 malloc을할떄 무조건 크기와 데이터를 넣어주기떄문에 데이터를 안넣는다면 malloc이 불가능했다. 그래서 그후로 UAF가 아니라고 생각하게됬고 검색을하다가 시간이 끝났다..



(저위에 0p라고 나오는건 오류)


이렇게 보니까 내가 제대로 푼문제는 하나도 없었다.. 제대로 푼문제는 웹을 담당했던 친구가 4번을 푼게 다였다. 솔찍히 이번에 대회 출전 마인드가 문제를 보고 경험해보자라는 의미여서 진짜 끈기있게 문제를 붙잡고 풀지 못했던것같다. (한 6시간정도 해보고 그뒤로 지쳐서 새로운문제가 나오기만을 기다렸던것같다..) 진짜로 12시간 풀로 끈기있게했다면 한문제는 풀었을것같은데 아쉽다..



그런데 15등..? 이여서 놀랐지만 그래서 더아쉽다.. 다음에 대회에나가면 꼭 한문제는 풀어서 라이트업을 쓰겠다고 다짐했다. (그문제가 포너블문제이길 빌며..) 그래도 나름 열심히 풀어봤는데 나중에 다른사람의 라이트업을보니 어떤식으로 풀었는지 확인해보는 재미가 있는것같다. 이러면서 실력이 늘꺼라 믿고.. 시험이 끝나면 포너블과 웹공부를 CTF위주로 공부를해서 다음에 화이트햇콘테스트에서는 본선진출, 입상까지 노려보는 실력이 되있었으면 좋겠다. 이렇게 큰대회는 처음인데 정말 재미있었고 뜻깊었다.


-- 일반부 1~3등 라이트업은 화이트햇 페이스북에 가시면 보실 수 있습니다. (REVS문제 라이트업도 따로 있음) --