보안

    Root Me: Javascript - Obfuscation 3

    문제를 보면 어김없이 password를 입력하라고 한다. 가볍게 한번 더 틀려주고 페이지 원본 보기에 들어간다. 코드를 보면 정신이 없다. for문도 있고 변수 선언도 많다. 일단 제일 먼저 보이는 pass에 있는 값들을 변환해보면 FAUX PASSWORD HAHA가 나온다. (아까 틀린 답을 입력하면 보이는 문구) dechiffre라는 함수를 보면 pass_enc(사용자의 입력값)를 사용한다. 함수 내부에서 사용자의 입력값을 tab에 저장하는 것을 알 수 있다. (tab2는 pass값이 저장됨) 하지만 함수의 내부를 보면 마지막으로 pass(=p)를 return 하는데 p를 결정하는 것은 tab이 아닌 tab2이라는 것을 알 수 있다. (tab[i-1] 어쩌구가 있긴 하지만 결국 p = 어쩌구 tab2..

    Root Me: Javascript - Obfuscation 2

    Going down 3 floors..... (이번 문제의 힌트다. 3계단을 내려가라고 한다) 문제를 보면 아무것도 나오지 않는다. 당연히 페이지 원본 보기를 할 것이다. pass값이 있다. pass=unescape("unescape%28%22String.fromCharCode%2528104%252C68%252C117%252C102%252C106%252C100%252C107%252C105%252C49%252C53%252C54%2529%22%29") pass = unescape("어쩌구")이기 때문에 우리도 "어쩌구"를 unescape해본다. "어쩌구"를 unescape해보면 또 unescape("어쩌구2")의 형식이다. >>> 어쩌구 = unescape("어쩌구2") 마찬가지로 "어쩌구2"도 unesca..

    Root Me: Javascript - Obfuscation 1

    (Obfuscation : 난독화) 문제를 들어가자마자 password를 입력하라고 한다. 역시나 아무값을 입력해보고 잘못됐다는 알림을 받는다. 페이지 원본보기를 통해 JS코드를 보면 pass값이 있다. 그리고 사용자의 입력값(h)가 pass를 unescape한 값과 같을 때 password가 맞다는 알림을 받게 되어있다. escape함수는 영어 대소문자, 특수기호(*@-_+./), 숫자를 제외한 문자를 16진수의 형태로 바꿔준다. 1바이트 문자는 %XX의 형식, 2바이트 문자는 %uXXXX의 형식을 갖는다. unescape함수는 escape된 문자열을 원래대로 돌려준다. pass = %63%70%61%73%62%69%65%6e%64%75%72%70%61%73%73%77%6f%72%64이므로 %XX의 형..

    Root Me: Javascript - Authentication 2

    문제를 보면 login버튼 하나만 보인다. 눌러보면 username과 password를 입력하라고 나온다. 아무거나 입력하고 확인을 누르면 당연히 틀렸다고 나온다. 마찬가지로 페이지 원본보기를 통해 login.js에 들어가보면 username == TheUsername && password == ThePassword 이 조건이 만족될 때 로그인이 된다. (이 password로 챌린지를 validate할 수 있다) TheUserName이라는 변수는 TheSplit리스트의 첫번째 요소이고, ThePassword이라는 변수는 TheSplit리스트의 두번째 요소이다. TheSplit이라는 리스트는 TheLists의 요소들을 :를 통해 나눈것들을 요소로 갖는다 TheLists의 요소는 GOD:HIDDEN이고 이것..