webhacking/client

wargame.kr fly_me_to_the_moon

qkqhxla1 2014. 9. 29. 12:49

일단 비행기 게임을 해보고, 제작자가 일부러 햇갈리게 하려고... 인지는 모르겠지만 


항상 해왔던데로 소스를 열어봤는데 eval(function(p,a,c,k,e,d) 로 시작되는 엄청 긴 소스가 있다.


자바스크립트 문제구나. 생각하고 이쁘게 만들어서 소스를 해석해보았는데 별 정보가 없다.


계속 봐도 없다. 나중에 생각하니 p.a.c.k.e.r이게 너무 유명해서 너무 거기에 민감해진 듯 싶다.


그러다가 다시 게임을 해 봤는데 31337점이 필요하다고 한다. 점수는 뭐 내가 죽으면 보내지는거니까


점수 보내질때 변조를 해보자고 생각하고 프록시를 켜니 또 이상한것들이 잡힌다. 그건 무시하고


점수를 31337로 변조해서 보내봤는데 반응이 없다. 뭐지... 계속 하다가 프록시로 잡아서 보낼때만


token error!라는 에러값이 화면이 뜨는걸 알아냈다. ? 이거 프록시인지 뭐 어떻게 알아내는건가?


싶어서 보낼때 패킷에서 프록시 관련된 부분을 다 지워버리고 보냈는데도 같은 에러가 뜬다.


근데 프록시로 계속 하다 보니... 이상한 숫자가 하나씩 잡힌다.




요런거. 그리고 패킷을 보낼 때 이렇게 보낸다.




token이라는 변수와 같이 보내는점, 그리고 1초 간격으로 위의 이상한게 날라온다는점 등을


생각해보았을때 1초?간격으로 토큰이 날라오고, 토큰이 갱신되기 전에 해당 토큰값과 함께 점수를


변조해서 보내야 된다. 그런데 토큰을 어디페이지에서 받아오지? 프록시로 계속 돌려봐도 해당


주소가 없다. 크롬 개발자도구를 열어서 네트워크 란을 보니 토큰 받아오는 페이지가 있다.




token.php를 들어가본결과 1초 정도 간격으로 토큰이 갱신되는걸 알 수 있었다.


이제 프로그래밍을 하면 된다. 토큰을 가져와서 추가한다음 점수를 31337 초과인 31338로 바꿔주고


보내면 된다.


import urllib2

req = urllib2.Request('http://wargame.kr:8080/fly_me_to_the_moon/token.php') #토큰이 있는 페이지에 접속하는데
req.add_header('cookie','PHPSESSID=ssja7uamcabmlq57afmjkuh875; ci_session=세션')
#위에 헤더에 추가하는건 쿠키값을 보면 있는 세션유지용같은 PHPSESSID와 ci_session를 추가.
token = urllib2.urlopen(req).read() #토큰을 가져온다.
print token

req = urllib2.Request('http://wargame.kr:8080/fly_me_to_the_moon/high-scores.php','token='+token+'&score=31338') #이번엔 점수 보낼 페이지에 위에서 얻은 토큰값과 점수를 조합해서
#post방식으로 보낸다.(urllib2.request에서 두번째 인자로 값을 주면 post방식으로 값을 보낸다.)
req.add_header('cookie','PHPSESSID=ssja7uamcabmlq57afmjkuh875; ci_session=세션') #세션 유지용
print urllib2.urlopen(req).read() 



출력해보면 제대로 flag가 출력된다.

'webhacking > client' 카테고리의 다른 글

suninatas level 5  (0) 2014.10.30
webhacking.kr 19.  (0) 2014.10.23
wargame.kr QR CODE PUZZLE  (1) 2014.09.28
codeshell.kr readonly  (0) 2014.09.24
webhacking.kr 12번  (0) 2014.08.31