초기 화면이다. test.txt와 test.zip를 다운로드할 수 있도록 되어있다. 코드를 확인하였다. test.txt의 download 클릭시 -> GET방식으로 "down"에 "dGVzdc50eHQ="라는 값을 넣어 서버에 전송한다. test.zip의 download 클릭시 ->"Access Denied"라는 알림 메시지가 뜬다. 실제로 test.txt의 download클릭하면 나타나는 화면이다. 정답과는 거리가 멀어보인다. 실제로 test.zip의 download클릭하면 나타나는 화면이다. 초기 페이지의 표에서 test.zip파일의 subject가 read me인 것이 힌트이다. download를 클릭하면 다운로드 되지 않지만 다른 방법이 있다. 위에서 test.txt의 download를 클릭하면 ..
25번 문제의 초기화면 리눅스 방식으로 파일의 이름과 권한이 나타나있다. 읽기는 누구나 가능하다고 나와있다. hello.txt로 들어가니 초기화면의 회색 텍스트 상자에 출력되었던 hello world가 보인다. 초기화면에서는 hello.txt가 실행되서 회색 텍스트 상자에 출력되는 것 같다. 코드를 확인해 봤으니 별 내용이 없다. 초기화면의 URL인데, ?file=hello 부분이 힌트인 것 같다. GET방식으로 "file"이라는 변수에 "hello"라는 값을 넣어 전송하고 있다. hello라는 값을 전달했기때문에 hello.txt가 실행된 것으로 보인다. 위와 같은 원리로 password.php를 실행시켜 그 내용이 회색 텍스트 상자에 출력된다면 답을 알아낼 수 있을 것이다. 따라서 "file"이라는 ..
47단계의 초기화면 주석처리되어 잇는 index.phps가 힌트인 것 같다. index.phps로 들어가면 소스코드가 나온다. POST방식으로 전달받은 "email"이 존재하는 경우 if안의 내용이 실행되도록 구성되어 있다. mail()함수는 이메일을 보내는 함수이다. mail(받는 사람 주소, 제목, 내용, 이메일 헤더(참조)) 위 코드는 email의 값을 POST방식으로 전달하면 받는이 : admin@webhacking.kr 제목 : readme 내용 : password is $pass 헤더(참조) : From : [폼에 입력한 문자열] 와 같은 이메일을 보내게 된다. 이 이메일에는 password정보가 담겨있다. 그러나 이 메일을 받는사람은 admin@webhacking.kr 뿐이므로 나는 내용을 ..
38번 문제는 log injection 문제이다. 코드를 보면 admin.php라는 문장이 주석처리되있다. 이게 힌트같다. admin.php로 들어가니 ip:문자열이 출력되어 있다. 코드를 보니까 admin이 힌트라고 써져있다. 첫 페이지로 돌아와 admin을 입력하였다. you are not admin이라는 메시지가 출력된다. admin이라는 단어가 필터링처리 되어있다. admin이 아닌 단어를 입력했을때는 로그에 자신의 Ip:입력한단어 와 같이 쓰여진다. 이곳에 자신의IP:admin이 기록되도록 해야 문제가 풀리는 것같다. 개행문자 \n을 이용하면된다. [임의의 단어]\n[자신의 IP주소]:admin 를 입력하고 login버튼을 클릭하면 [내 IP]:[임의의 단어] [내 IP]:admin 와 같이 기..
26번 문제를 클릭하면 다음과 같은 화면이 나타난다. index.phps를 클릭하면 코드를 볼 수 있다. GET방식으로 id라는 변수를 받는다 . 1. 변수 id의 값이 "admin"이 포함된 문자열일 경우 "no!"가 출력되고 종료됨 2. 변수 id의 값이 "admin"을 포함하지 않으면서, id를 URL디코딩 한 값이 "admin"일 경우 문제가 풀린다. GET방식이므로 변수를 전달할때, (현재 URL)?id=(전달할 값)을 주소창에 입력하면 되고 역시나 id=admin을 전달하면 no!라고 뜬다. 문제를 해결하려면 id=("admin"을 URL인코딩한 결과)를 전달해주어야 한다. URL인/디코딩을 지원해주는 사이트는 굉장히 많다. "admin"이라는 영어는 인코딩해도 같은 결과가 나오기 때문에 AS..
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..