본문 바로가기

Hacking/- Wargame.kr

[Wargame.kr] 3. flee button

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 값을 얻는 방법을 작성해보았다.

# -*- 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의 evaldocument.write를 이용해서 페이지를 구성했기 때문에 이것을 디코딩을 하는 방식을 이용해서 링크를 가지고 왔다.



'Hacking > - Wargame.kr' 카테고리의 다른 글

[Wargame.kr] 5. WTF_CODE  (0) 2016.02.08
[Wargame.kr] 4. login filtering  (0) 2016.02.07
[Wargame.kr] 3. flee button  (0) 2016.01.13
[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