DongDD's IT

[webhacking.kr] Level 12 본문

Wargame/webhacking.kr

[webhacking.kr] Level 12

DongDD 2017. 9. 27. 15:52

[webhacking.kr] Level 12




문제에 들어가니 "javascript challenge"라는 문자만 써있었다.

일단 코드를 보기로 했다.



script를 제외한 다른 코드에서는 별로 중요해보이는 것이 없었다.  스크립트에 대해 잘 몰라서 함수에 대해서 찾아보았다.


ref) String.fromCharCode() 

- 유니코드 코드로 이루어진 인자를 문자로 바꿔서 string으로 만들어주는 함수


ref) eval()

- 문자로 표현되어있는 것을 javascript로 실행해주는 함수


이 두 함수에 대해 알아보고 나서 왠지 fromCharCode함수를 이용해 저장한 WorkTimeFun이라는 문자열이 javascript이지 않을까 생각이 들었다.

브라우저에 있는 console창을 이용해 저 값에 대해 알아보았다.




eval을 제외한 나머지 script부분을 console창에 넣었더니 다음과 같은 문자열, script가 출력되었다.

아마 이 문자열로 이루어진 script를 eval함수를 통해 실행하는 구조인 것 같다.


코드를 분석하기 위해 여러 함수를 찾아보았다.


먼저 document.URL.indexOf() 함수는 webhacking.kr의 다른 문제에서 본 적이 있기 때문에 알 수 있었다.

이 함수는 URL에서 인자에 있는 char형 문자가 처음으로 나타나는 index를 나타낸다.


URL.substr은 검색을 해보았지만 잘 나오지 않아 console창을 실험하며 대략 무슨 의미로 쓰이는 지 알 수 있었다.



위와 같은 결과론 별과 이 함수는 인자에 있는 문자가 처음나오는 부분부터 끝까지 잘라 string으로 만들어주는 함수 같았다. '='는 없기 때문에 1이라고 출력되는 것 같다.



enco 변수에는 위와 같이 유니코드 1~121까지 들어가게 된다.



그 후에 enco_x라는 함수가 있고 위에서 만든 ck와 뒤의 내용을 비교하는 if문이 존재하고 이 if문을 통과하면 flag가 나오는 형태로 되어있다.


enco_x함수로 들어가는 경우가 많아 enco_x함수에 대해 분석해 보았다.


유니코드 1~121까지 만들어 놓은 enco에서 함수 인자로 넘어간 index의 값을 int형으로 리턴해준다.



ref) str.charCodeAt(x)

- str에서 index x에 해당하는 값을 유니코드 값으로 반환해준다.

ex) str = "ABCD" -> str.charCodeAt(0) : 65(A) 반환


즉 enco_(240)은 121을 반환하여 y를 의미하게 된다.


그리고 enco2(126)과 enco3(33)을 char로 바꾸어 문자열에 붙여넣어준다.

이렇게 생성된 문자열이 ck와 같은 경우 flag가 나오게 되는데 생각해보면 flag를 구하는데 위의 내용은 필요없는 것 같다.

flag를 출력하는 형식이 이렇게 해서 만들어진 문자열에서 '='만 제거하면 되는 형태이기 때문에 ck옆 내용을 console을 이용해 문자열로 만들어주면 바로 password를 알 수 있다.


이렇게 해서 출력된 password에서 '='를 제거하니 통과할 수 있었다.


아마 WorkTimeFun에 들어가있는 int를 수정해서 script를 변환시켜 통과할 수 있을 것 같기도 하다.











**************     Answer & Flag     **************




의외로 간단하게 해결할 수 있었다. 

자바스크립트의 함수에 대해 모르는 것이 많았는데 좋은 공부가 된 것 같다.


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

[webhacking.kr] Level 3  (0) 2017.11.11
[webhacking.kr] Level 11  (0) 2017.09.30
[webhacking.kr] Level 41  (0) 2017.09.24
[webhacking.kr] Level 42  (0) 2017.09.12
[webhacking.kr] Level 32  (0) 2017.09.11
Comments