[root-me.org - Web-Client] Javascript - Obfuscation 1
글 작성자: caputdraconis
반응형
챌린지를 시작하자마자 비밀번호를 입력하라는 칸이 나오고 일정시간 후에 끝나버린다. 그 끝나버린 창에서 소스코드를 봐보았다.
<html>
<head>
<title>Obfuscation JS</title>
<script type="text/javascript">
/* <![CDATA[ */
pass = '%63%70%61%73%62%69%65%6e%64%75%72%70%61%73%73%77%6f%72%64';
h = window.prompt('Entrez le mot de passe / Enter password');
if(h == unescape(pass)) {
alert('Password accepté, vous pouvez valider le challenge avec ce mot de passe.\nYou an validate the challenge using this pass.');
} else {
alert('Mauvais mot de passe / wrong password');
}
/* ]]> */
</script>
</head>
<body><link rel='stylesheet' property='stylesheet' id='s' type='text/css' href='/template/s.css' media='all' /><iframe id='iframe' src='https://www.root-me.org/?page=externe_header'></iframe>
</body>
</html>
pass에 16진수(아스키코드로 추정)가 들어가있다. 그리고 사용자가 입력한 값(h)와 unescape(pass)가 같으면 풀리는 문제다.
그럼 unescape(pass) 값을 알아내보자. unescape 함수를 직접 찾아보고 결과값을 예상해보는 방법도 있겠지만, 개발자 도구의 콘솔창을 사용하면 쉽게 알아낼 수 있다.
unescape() 함수 안에 문자열의 형태로 값을 넣어주면 이를 다른 값으로 디코딩 해준다.
저 값을 다시 그 비밀번호 입력창에 넣어주면...?둨흔?
cpasbiendurpassword
unescape() 함수는 문자열을 디코딩하는 함수였다. 위의 문제에서는 아스키코드로 된 문자열을 문자 형태로 변형시켜주었다.
escape() 함수와 정반대로 생각하면 되는데, escape() 함수는 문자셋을 아스키(ASCII) 값으로 반환해주는 자바스크립트 내장함수다.
이 함수는 쉼표와 세미콜론 같은 문자가 쿠키문자열과의 충돌을 피하기 위해 사용하거나, url을 인코딩 할때도 사용한다.
이렇게 16진수 문자열로 변환된 문자열은 unescape() 함수로 다시 되돌려줄 수 있다.
반응형
댓글
이 글 공유하기
다른 글
-
[root-me.org - Web-Server] HTTP - User-agent
[root-me.org - Web-Server] HTTP - User-agent
2020.09.15 -
[root-me.org - Web-Server] HTTP - Open redirect
[root-me.org - Web-Server] HTTP - Open redirect
2020.09.15 -
[root-me.org - Web-Client] Javascript - Authentication
[root-me.org - Web-Client] Javascript - Authentication
2020.09.14 -
[Webhacking.kr] Challenge old-33
[Webhacking.kr] Challenge old-33
2020.08.16