문제를 보면 어김없이 password를 입력하라고 한다.
가볍게 한번 더 틀려주고 페이지 원본 보기에 들어간다.
코드를 보면 정신이 없다. for문도 있고 변수 선언도 많다.
일단 제일 먼저 보이는 pass에 있는 값들을 변환해보면
FAUX PASSWORD HAHA가 나온다. (아까 틀린 답을 입력하면 보이는 문구)
dechiffre라는 함수를 보면 pass_enc(사용자의 입력값)를 사용한다.
함수 내부에서 사용자의 입력값을 tab에 저장하는 것을 알 수 있다.
(tab2는 pass값이 저장됨)
하지만 함수의 내부를 보면 마지막으로 pass(=p)를 return 하는데 p를 결정하는 것은 tab이 아닌 tab2이라는 것을 알 수 있다.
(tab[i-1] 어쩌구가 있긴 하지만 결국 p = 어쩌구 tab2[i]를 사용하기 때문에 tab이 뭐가 되었건 상관없다)
따라서 이 복잡해 보이는 함수는 pass값(=tab2)만 가지고 열심히 연산을 하고 있다는 것을 알 수 있다.
사용자의 입력에는 애초에 관심이 없다.
따라서 위의 함수에는 신경 끄고 밑에 있는
\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30
라는 값을 이용한다.
unescape를 통해 10진수의 형태로 바꾸고 전에 봤던 String.fromCharCode()를 통해 해당 아스키코드에 해당하는 문자열을 얻는다.
'보안 > Root Me' 카테고리의 다른 글
Root Me: Javascript - Webpack (0) | 2022.03.09 |
---|---|
Root Me: Javascript - Native code (0) | 2022.03.09 |
Root Me: Javascript - Obfuscation 2 (0) | 2022.03.08 |
Root Me: Javascript - Obfuscation 1 (0) | 2022.03.08 |
Root Me: Javascript - Authentication 2 (0) | 2022.03.08 |