Challenge 12
자바스크립트 문제입니다.
페이지 소스를 볼 가요?
자바스크립트 부분에 아스키코드가 엄청 많네요
아래 보면 eval(WorkTimeFun)가 있는데 eval("")은 안의 문자열을 코드로 실행시키는 함수입니다.
즉 WorkTimeFun에 해당되는 문자열을 코드로 실행시키는 역할을 하죠
하지만 WorkTimeFun은 보기에 문자열로 보이지 않지만 String.from.CharCode()라는 함수가 있습니다.
이 문제에서는 String.from.CharCode()가 중요한데 아스키코드값을 문자열로 리턴해주는 역할을 합니다.
예를 들어 var test = String.from.CharCode(65,65,65,65); 라는 스크립트를 실행 시키면
test라는 변수를 "AAAA"라는 문자열로 초기화 시킵니다.
저 많은 아스키코드를 직접 변환하는건 무리가 있죠. 이때 개발자도구에서 Console에서 실행시키면 바로 문자열들이 리턴됩니다.
이런식으로 바로 해당 문자열을 확인할 수 있습니다. 즉 변환한 문자열이 스크립트로 실행된다는 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | var enco=''; var enco2=126; var enco3=33; var ck=document.URL.substr(document.URL.indexOf('=')); for(i=1;i<122;i++) { enco=enco+String.fromCharCode(i,0); } function enco_(x) { return enco.charCodeAt(x); } if(ck=="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+ String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+ String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+ String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3)) { alert("Password is "+ck.replace("=","")); } | cs |
정리 하면 이러한 자바스크립트가 현재 문제페에지에서 실행되고 있습니다.
Password를 출력하는 if()문에도 비슷하게 난독화되어 있는 문자열이 있습니다.
물론 위의 소스들을 이해하고 직접 변환해도 되겠지만, 귀찮은 관계로 위의 String.from.CharCode()처럼 콘솔로 실행시켜봅니다.
if(ck=="=youaregod~~~~~~~!")이라는 것을 쉽게 알 수 있습니다.
GET방식을 이용하여 위 문자열을 전송해 봅시다.
위와 같이 패스워드를 알려줍니다. 전송한 값과 비슷하네요.
Auth 메뉴에서 이 Flag를 입력해봅시다.
문제가 해결되었습니다 :)
'Wargame | CTF > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge 14 (0) | 2016.11.14 |
---|---|
[Webhacking.kr] Challenge 13 (0) | 2016.11.13 |
[Webhacking.kr] Challenge 10 (0) | 2016.11.13 |
[Webhacking.kr] Challenge 9 (0) | 2016.11.13 |
[Webhacking.kr] Challenge 8 (0) | 2016.11.13 |