450점에 해당하는 Web 문제이다.
난이도의 경우에도 이전의 두 문제와 거의 비슷한 난이도이다. 여기서는 Javascript와 HTML에 대한 기초적인 지식만 있으면 풀 수 있는 문제이다.
문제 사이트에 접속하면 아래와 같이 메시지 박스와 버튼이 뜨는 것을 볼 수 있다. 메시지 박스의 내용을 대충 해석하면, 버튼을 누르면 인증키를 얻을 수 있다는 의미이다.
그래서 버튼을 클릭하기 위해서 마우스를 버튼쪽으로 가져가니 버튼이 마우스로부터 계속 멀어지는 것을 확인할 수 있었다. 즉 이것을 통해 Javascript를 이용해서 버튼과 마우스 사이의 거리를 측정한 다음 어느 거리 이하가 되었을 때 마우스로부터 멀어지도록 하는 함수가 구현되어 있다고 추측이 가능하다.
문제에서 버튼을 누리기만 하면 된다고 했으므로 버튼을 눌렀을 때 어떤 이벤트가 발생한다는 것을 알 수 있었다. 그래서 버튼을 눌렀을 때 어떤 동작이 일어나는지 확인하기 위해 크롬 개발자 도구를 이용해서 소스코드를 확인하였다.
여기서 input type="button"
부분을 보면 속성중에 onclick
속성이 있다. 이것은 버튼을 클릭했을 때 실행되는 자바스크립트의 함수를 호출하는 기능으로 값이 window.location='?key=37bd'
라는 것을 확인할 수 있다. 그리고 이 내용은 url을 http://wargame.kr:8080/flee_button/?key=37bd
로 이동한다는 것을 의미한다. 그래서 이 링크로 직접 접속하면 다음과 같은 화면을 볼 수가 있다.
즉, 이렇게 Flag를 얻을 수 있고 위의 Flag값을 복사한 다음에 인증을 하면 된다.
그래서 이것을 토대로 Python을 이용해 한 번에 Flag 값을 얻는 방법을 작성해보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # -*- coding: utf-8 -*- # flee button from urllib import request import re def unescape_blue14(data): result = "" for i in range ( int ( len (data) / 3 )): result + = chr ( int (data[ 3 * i + 1 : 3 * i + 3 ], 14 )) return result def get_03_flag(): regex = re. compile ( 'unescape_blue14\("([^\)]*)"\)' ) regex2 = re. compile ( 'window\.location=[\'\"]([^\'\"]*)[\'\"]' ) flag_regex = re. compile ( 'Flag is : ([a-f0-9]*)' ) url = 'http://wargame.kr:8080/flee_button/' res = request.urlopen(url).read().decode() t1 = regex.findall(res)[ 0 ] t2 = regex.findall(unescape_blue14(t1))[ 0 ] t3 = unescape_blue14(t2) flag_url = url + regex2.findall(t3)[ 0 ] res = request.urlopen(flag_url).read().decode() flag = flag_regex.findall(res)[ 0 ] print (flag) return flag |
위의 소스코드에서 구현한 함수를 실행하면 인증키를 출력하고 그 값을 반환한다.
이 문제 페이지가 다른 문제와는 다르게, Javascript의 eval
과 document.write
를 이용해서 페이지를 구성했기 때문에 이것을 디코딩을 하는 방식을 이용해서 링크를 가지고 왔다.
'Hacking > - Wargame.kr' 카테고리의 다른 글
[Wargame.kr] 5. WTF_CODE (0) | 2016.02.08 |
---|---|
[Wargame.kr] 4. login filtering (0) | 2016.02.07 |
[Wargame.kr] 2. QR CODE PUZZLE (0) | 2016.01.11 |
[Wargame.kr] 1. already got (0) | 2016.01.07 |
[Wargame.kr] 0. 로그인 스크립트 (0) | 2016.01.05 |