문제를 보자.
javascript로 구성된 게임이 있는데, 부정행위 방지 시스템을 우회하여 클리어해보라고 한다.
문제 진입 시 재미있는 게임이 진행된다.
해보자~!
죽었다..!
스코어가 36점인데, 31337점을 정확히 찍으라 하신다.
해당 메시지가 뜰 때, 전달되는 패킷이 있나 프록시를 잡아보자.
죽을때 날라가는 패킷이다.
token, score 파라미터로 구성되어 데이터가 전달되게 된다.
score 파라미터는 딱봐도 점수 파라미터 같다. 이 값을 문제에서 원하는 대로 31337 값으로 변조 후 전송해보자.
FLAG 값 획득이 가능했다. 허나, javascript 문제니 정석대로 풀어보자.
문제 진입 시 응답 값의 javascript 코드를 확인해보자.
정렬 없는 javascript 코드를 확인할 수 있다.
online Beautify를 이용해 javascript 코드를 정렬해보자.
깔끔하게 정렬되었다.
난독화를 위해 배열이 사용되었다. 이 또한 정리해도 되지만, 시간이 없다(총총)
코드를 살펴보자.
...
ajax 형태로 다른 URL에 값을 날리는 코드를 확인할 수 있다.
이를 디코딩 시 아래와 같은 코드를 확인할 수 있다.
응답 값의 BTunnelGame[getScre] () 함수 부분을 게임에서 요구하는 31337로 변경해보자.
크롬의 개발자도구 console 기능을 이용해 해당 코드를 실행한 후 게임을 진행해보자.
게임 진행 후 죽을 경우, FLAG 값 획득이 가능하다.
**POINT : javascript 코드에 대한 이해가 필요한 문제이다.