24번 문제를 클릭하면 내 컴퓨터의 ip, 사용환경과 함께 Wrong IP!라는 문장이 출력된다. Ctrl+u를 누르면 아래 주석부분에 source : index.phps라는 힌트가 쓰여있다. 저 주소로 이동하면된다. index.phps로 이동하면 이와 같이 php코드가 나온다. extract()는 배열속의 키 값을 변수화 시켜주는 함수이다. ex) $server["server1"] = "sv1"; $server["server2"] = "sv2"; $server["server3"] = "sv3"; extract($server); ----------------------결과--------------------- $server1 라는 변수 생성 -> 값 : "sv1" $server2 라는 변수 생성 -> 값..
4번 문제의 화면이다. base64 방식으로 인코딩한 문자가 나와있다. 디코딩을 수행했을때 나오는 문자열이다. 복붙해서 제출했는데 아무일도 일어나지 않는다. 그래서 이문자열을 base64로 디코딩 했는데 글자가 깨져서 나온다. 소스코드를 봐도 특별한게 없다. 그렇다면 다른 암호라는 뜻일텐데, 도저히 알수가 없어서 검색을 해봤다. c4033bff94b567a190e33faa551f411caef444f2는 16진수로 구성되었고, 총 40자 이므로 40*4=160비트 이다.160비트의 대표적인 암호문으로 SHA1이라는 암호화 해시 함수(알고리즘)이 있다고 한다. http://hashtoolkit.com/?utm_source=md5&utm_medium=r&utm_campaign=md5에서 SHA1알고리즘으로 암..
6단계 클릭시 나타나는 화면이다. id, 패스워드가 적혀있고, base64가 힌트라고 쓰여있다. 일단 index.phps를 클릭한다. (phps는 PHP source cord의 약자라고 한다.) index.phps를 클릭할때 출력되는 페이지 소스코드의 첫 부분이다.처음 이 페이지에 접속한 사용자일 경우, "user"와 "password" 쿠키를 만들어주는 부분이다. user쿠키 값 -> "guest"를 base64인코딩 방식으로 20번 인코딩한 후 replace()한 값password쿠키 값 -> "123qwe"를 base64인코딩 방식으로 20번 인코딩한 후 replace()한 값 실제로 user와 password 쿠키가 생성되어 있다. 계속해서 페이지 소스코드의 두번째 (마지막) 부분을 확인해보자현재..
12단계를 클릭하였다. 자바스크립트 문제라고 써있다. 12단계의 소스코드이다. 숫자가 엄청나게 많은데 String.fromCharCode()는 괄호안의 아스키 코드를 그에 대응되는 문자로 변환시켜주는 함수이다. eval()은 괄호안의 문자열(텍스트)를 자바스크립트 코드로 변환하여 실행시키는 함수이다. 개발자 모드의 콘솔탭에 WorkTimeFun을 입력하면 eval()함수의 인자(실행되는 코드)가 출력된다. 위의 자바스크립트 코드를 실행시키기 위해 burp suite를 이용하였다. 코드를 복붙한 후 forward를 눌렀는데 아무일도 일어나지 않는다. 코드를 다시 한번 확인하였다. ck가 비교하는 값과 같은 경우에 패스워드가 출력된다. ck를 확인해보니 l이다. ck와 비교하는 값이 l이 아니므로 코드를 복..
10번 문제를 클릭하면 나타나는 화면이다. buy lotto가 무슨 말인지 모르겟다. 소스코드를 확인하여 해결해야 할듯 하다. 일단 O라고 써져 있는 부분의 id가 hackme이다. 왠지 힌트가 포함되어 있을 것 같다. O를 클릭하면 this.style.posLeft가 1씩 증가하는데, 이 값이 800이 되었을때 href라는 명령어가 포함된 코드를 호출하고 있다.href는 페이지 이동과 관련된 명령어 이므로 this.style.posLeft를 800으로 만들어준다면 정답을 얻을 수 있을 것이다.O를 800번 클릭하는 일은 너무 번거로우므로 코드변경이 필요해보인다.따라서, 이부분을 해결하기 위해 burp suite를 이용하였다. 아래와 같이 서버가 클라이언트에게 보내는 코드의 일부를 변경하였다.this.s..
1단계의 초기화면이다. 코드를 확인해보겠다. 어딘가를 클릭하면 'index.phps'로 페이지 이동을 한다. 개발자 도구를 이용하여 클릭해야 하는 부분이 어디인지 확인해보았다. 파란 블럭이 씌워진 --- index.phps --- 부분을 클릭하여야 한다. 클릭해보니 이러한 페이지로 이동한다. 이 코드로 부터 정답을 얻을 수 있을것이다. "user_lv"라는 이름의 쿠키가 없는 경우 인 쿠키를 만드는 부분이다. eregi()는 문자를 찾는 함수이다. eregi("찾을 문자", "문자열")에서 "찾을 문자"가 "문자열"에 포함되어 있는 경우 1을, 포함되어 있지 않는 경우 0을 리턴한다. if문이 총 3개가 있는데 1. "user_lv이라는 이름을 가진 쿠키 값에 0부터 9까지의 숫자 또는 마침표(.) 이외..
20번 문제에 들어가면 정보를 입력해서 제출하는 화면이 나타난다. 소스코드는 다음과 같다. 로 둘러쌓인 부분을 확인해보자 위의 소스코드를 보면 "Submit"버튼을 클릭했을때 ck()함수가 호출된다. ck()함수는 다음과 같은 작업을 한다. 1. 작성되지 않은 항목의 텍스트상자로 커서를 이동시키고 함수를 종료시킨다. 2. 모든 항목이 작성되었지만 code가 오른쪽 회색상자에 적혀있는 것과 다른경우 code의 텍스트 상자로 커서를 이동시키고 함수를 종료시킨다. 3. 1,2에 해당되지 않는 경우 입력한 내용들을 서버에 전송(제출)한다. nickname, comment항목을 모두 입력하고 code도 오른쪽 회색상자에 적혀있는 문장과 같게 입력해서 submit버튼을 클릭하였다. 하지만 Wrong이라는 텍스트가 ..
54번을 클릭하였을때의 화면이다. 시간이 좀 지나면 is뒤에 문자가 한글자씩 나오다가 ?가 나오고 더이상 변하지 않는다. 코드를 확인해 보겠다. XMLHttpRequest는 Ajax요청을 생성하고 전송할 수 있는 객체이다.Ajax(Asynchronous JavaScript and XML)란 자바스크립트를 이용해서 비동기적으로 서버와 브라우저가 통신하는 방식이다. run()함수에서 if(window.ActiveXObject)는 구버전의 IE일 경우 수행되고 else if(window.XMLHttpRequest)는 신버전의 IE(7이상) 또는 다른 웹브라우저(크롬 등) 일 경우 수행된다. 나는 크롬을 이용하였으므로 run()함수에서 XMLHttpRequest객체가 생성되고, 이 객체를 변수 x가 참조하게 되..
16번 문제를 클릭하면 큰별 하나와 작은별 하나가 보인다. 일단 소스코드를 확인하자 4번째 줄에 onkeypress=my(event.keyCode)라는 코드가 있다. onkeypress는 키보드에서 키를 눌렀을때 이벤트를 발생시키는 속성이다. 단, Shift나 Enter, 한/영 등은 인식하지 못한다. event.keyCode는 사용자의 입력키 값을 반환하는 코드이다. 함수 mv()에서는 event.keyCode값이 124일때 location.href=String.fromCharCode(cd)라는 분기문에 의하여어떤 새로운 페이지로 이동하는데, 이 코드를 자세히 살펴보자. location.href location.replace 기능 새로운 페이지로 이동된다. 기존 페이지를 새로운 페이지로 변경시킨다. 형..
14번 문제를 클릭했을떄 화면이다. 입력한 값을 체크하는 것 같은데, 정확히 모르겠으니까 소스코드를 확인한다. function ck()의 내부에서 정답을 확인할 수 있다.변수 ul에 저장되는 값인 document.URL은 현재 페이지의 URL을 의미한다.현재 페이지의 URL은 http://webhacking.kr/challenge/javascript/js1.html 이다. 그 후 ul=ul.indexOf(".kr")에서 ul의 값이 업데이트 되는데,indexOf(".kr")는 부분스트링 ".kr"이 처음 나타나는 위치를 반환하는 함수이다. 그 위치 값은 17이므로ul=ul*30에서 최종적인 ul의 값은 510이 된다. 따라서 510을 입력하면 Password is 510*17 이라는 메시지가 출력될 것이..