보안/Root Me

    Root Me: XSS - Stored 1

    문제를 보면 form이 있는 평범한 웹페이지가 나온다. XSS와 관련이 있을거라는 생각에 스크립트를 넣어본다. 이 코드가 작동이 된다면 이 웹페이지는 사용자가 script를 삽입할 수 있다. 잘 된다. 따라서 이 웹 페이지에 적절한 코드를 삽입하면 Admin의 정보를 얻을 수 있다. 또한, 시간이 좀 지나면 내가 올린 글을 읽었다는 알림이 나온다. 즉, Admin이 이 웹페이지에 들어와 내가 쓴 메시지를 봤다. 이 Admin의 세션 쿠키를 탈취해야 하므로 Admin이 접속을 했을 때 다른 사이트에 접속하게 만들어 해당 세션 쿠키를 얻어야 한다. 따라서 img를 이용한다. img를 이용하는 이유는 img태그에 있는 src때문이다. 누군가 웹 페이지에 접속하여 img를 로딩해야 한다면 src에 있는 링크에 ..

    Root Me: Javascript - Webpack

    힌트가 Webpack에 대해 아냐고 물어본다. 문제에 들어가보면 오리와 만다린 오리의 차이점을 모른다면 부끄러워 하라고 한다. 사이트는 정상적으로 작동하고 있다. 페이지 원본을 통해 JS파일들에 접근해보면 난독화가 된 것 같은 코드들만 빽빽하게 작성되어있다. 코드를 이쁘게 정리해서 봐도 별 내용은 없어보인다. 페이지의 소스를 보기 위해 검사 -> 소스로 이동하여 이 사이트를 이루고 있는 코드를 봐도 아까와 같은 내용밖에 없다. 하지만 소스 탭의 밑부분에 있는 webpack:// 를 보면 페이지의 원본 코드를 볼 수 있다. src/component의 YouWillNotFindThisRouteBecauseItIsHidden.vue를 열어보면 flag를 찾을 수 있다. 추가적으로 여기 적혀있는 내용을 살펴보면..

    Root Me: Javascript - Native code

    문제에 들어가자마자 입력 창이 나온다. 습관적으로 페이지 원본 보기에 들어가서 코드를 본다. 난리가 났다. 이상한 코드가 script태그에 들어가있다. 이 코드를 원래대로 돌려야 할 것 같다. toString()을 통해 문자열로 바꿔준다. (처음에 그냥 하면 안되고 마지막의 ()를 지워야 제대로 작동하는데 이유는 잘 모르겠다... ()를 포함한 상태로 toString()을 하게 되면 코드가 실행되어 입력하라는 알림이 다시 나오게 된다) toString()을 사용하고 난 후 if문의 조건을 보면 key값이 있다.

    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..