Wargame/Webhacking.kr

[Webhacking.kr] old-14

핏디 2021. 7. 22. 00:19
SMALL

[문제]

 


[풀이]

구글 개발자 환경에서 소스코드를 확인할 수 있었다.

그 중 script 태그 사이의 ck 함수에서 문제 해결을 위한 힌트를 얻을 수 있다.

 

function ck(){
  var ul=document.URL;
  ul=ul.indexOf(".kr");
  ul=ul*30;
  if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; }
  else { alert("Wrong"); }
}

document.URL은 문서의 URL을 반환해주는 역할(window.location.href으로도 사용할 수 있음)을 하고, indexOf( ) 함수는 자바스크립트에서 특정 문자의 위치를 검색해주는 역할을 한다.

 

ul 변수를 정리해보면, 현재 페이지의 url을 가져와서 .kr이 위치한 곳의 index를 구한 후, 그 값에 30만큼 곱한 값을 저장하게 된다.

 

이 값을 비교해 문제 풀이 성공 여부를 결정하게 되므로 .kr의 index 값만 찾으면 쉽게 구할 수 있다.

현재 페이지 url은 https://webhacking.kr/challenge/js-1/ 이므로 .kr이 있는 곳을 살펴보면 18번째부터 시작되는 것을 알 수 있다.(index는 0부터 계산)

 

따라서 18 *30 = 540 임을 알 수 있고, ul 의 값이 540이 되어야 하는 것을 알 수 있다.

 

 

문제 풀이 후 url을 확인해보면 끝자리가 291600으로 변경된 것을 볼 수 있고, 이는 540*540을 계산한 결과이다.

https://webhacking.kr/challenge/js-1/?291600

 


[핵심]

 indexOf() 함수 

string.indexOf(searchvalue, position)
  • indexOf 함수: 문자열(string)에서 특정 문자열(searchvalue)을 찾고, 검색된 문자열이 '첫번째'로 나타나는 위치 index 리턴.
  • 파라미터
    • searchvalue : 필수 입력값, 찾을 문자열
    • position : optional, 기본값은 0, string에서 searchvalue를 찾기 시작할 위치
  • 찾는 문자열이 없으면 -1 리턴.
  • 문자열을 찾을 때 대소문자 구분.

[출처]

https://hianna.tistory.com/379 [어제 오늘 내일]

 


 

LIST