-
[Webhacking.kr] Challenge 16 풀이Wargame/Webhacking.kr 2019. 3. 30. 21:20
** 이 문제는 크롬보다는 익스플로러 환경에서 풀어야 더 정확히 풀 수 있으므로 익스플로러 사용을 권장한다.
개발자 도구를 실행한다.
먼저 body 부분을 확인해보자.
onkeypress는 키보드 이벤트 속성 중 하나로, 사용자가 키보드의 키를 눌렀을 때 해당 키의 ASCII 코드 값을 반환하는 event.keyCode를 인자로 받는다. 이 소스에서는 사용자의 키보드 입력값이 mv라는 함수의 인자로 들어간다.
또한 onload 이벤트에 의해 페이지가 로드된 후 바로 kk 함수가 호출된다.
이번엔 script 부분을 확인해보자.
맨 첫 부분에 나온
document.body.innerHTML+="<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>";
코드는 aa라는 이름의 *을 (x, y) = (0, 0) 위치에 출력한다는 뜻이다.
그 다음 두 개의 함수(mv, kk)가 정의되어 있는데, 먼저 kk 함수부터 살펴보자.
rndc 변수에는 0 ~ 9000000 사이의 임의의 정수 값이 들어가며, font color를 설정하는데 사용된다.
kk 함수는 x, y를 인자로 받으면 aa라는 이름의 *을 (x, y) 위치에 출력한다. (*의 색상은 랜덤)
mv 함수에서는 먼저 kk 함수를 호출하여 star라는 이름의 *을 (원래 x 좌표 - 50, 원래 y좌표 - 50)의 위치에 출력한다.
그 다음 여러 줄의 if문이 나타나는데, cd의 값에 따라 *의 x, y 좌표가 변경되는 것을 알 수 있다. cd는 사용자가 입력한 키보드 키의 ASCII 코드 값이므로, 변환하면 아래와 같다.
a = 97 d = 100 w = 119 s = 115 | = 124
특히 cd가 124일 때를 주목하자.
location.href 함수는 페이지를 이동시키는 함수이고, String.fromCharCode( )는 ASCII 코드를 문자열로 변환해주는 함수이다. 따라서 cd가 124(|)일 때에는 *의 위치가 바뀌지 않고, 주소가 |인 페이지로 이동된다.
Challenge 16 페이지에서 |을 입력하면 아래와 같은 페이지로 이동하고, 패스워드가 출력된다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge 24 풀이 (0) 2019.05.12 [Webhacking.kr] Challenge 21 풀이 (0) 2019.05.11 [Webhacking.kr] Challenge 18 풀이 (0) 2019.03.30 [Webhacking.kr] Challenge 17 풀이 (0) 2019.03.30 [Webhacking.kr] Challenge 14 풀이 (0) 2019.03.30