처음 화면이다. 이름을 입력한 후 make 버튼을 클릭할 수 있게 되어 있다. 특별한 건 없는데 이름의 최대길이가 5자로 제한되어 있다. admin을 입력해서 Make버튼을 클릭해봤다. post방식으로 html = admin이 전달되어 진다. 전달하자마자 index/go.html이라는 페이지로 이동하게 된다. hello admin이라고 나와있다. admin은 정답과 거리가 멀어 보인다. injection 문제인 것 같아서 ;ls 를 입력하였더니 index/go.html가 아닌 index.php로 이동하고 아무것도 출력되지 않는다.;와 ls에 필터링이 걸려있는 것 같다. &는 필터링 되어 있지 않기때문에 이를 이용하면 된다. & : 백그라운드로 명령어를 실행시키는 chaining operators 그리고 ..
초기 페이지이다. upload error라는 메시지가 출력되어 있고 hint로 어떤 링크가 주어져 있다. 코드에서 얻을 수 있는 힌트는 없는 것 같다. 일단 저 링크로 이동해본다. mysql_connect() : MYSQL 서버에 접속하는 함수 mysql_select_db() : MYSQL 데이터 베이스를 선택하는 함수mysql_query() : MYSQL 질의문(query)를 전달하는 함수mysql_fetch_array() : 한 행에서 데이터를 읽는 함수 $data변수의 값이 존재하는 경우(어떤 값이든 상관없음) 패스워드가 담긴 메시지가 출력된다. 일단 위와 같은 파일을 업로드 해보았다. Done이라고 뜨면서 잘 업로드 된다. 업로드한 후 upload/업로드한 파일명 으로 이동하면 위와 같이 그 내용..
초기 화면이다. 파일과 메모를 업로드할 수 있다. 코드에서는 얻을 수 있는 힌트가 없어 보인다. 3.jpg라는 파일을 업로드 하려했더니 파일명의 길이에 제한이 걸려있다.보안상의 이유로 파일명 길이를 제한해 놓은 거 아닐까 Burp Suite를 이용하여 업로드할 파일명을 "3"으로 바꾸어 보았다. 필터에 걸리지 않고 오른쪽에 upload file, Delete 버튼이 생겼다. upload file버튼을 눌렀더니 페이지로 이동한다.null이라는 문장이 나와있다. delete 버튼을 클릭하면 ?mode=del&time=올린 시각페이지로 이동하면서(GET 전달방식) 올린 메모가 삭제된다. 즉, delete버튼 클릭시rm upload/올린 파일명 명령이 호출 되는 것 같다. 그렇다면 ";ls"이라는 이름을 가진 ..
37번문제의 초기화면이다. 파일 업로드 관련 문제인 듯 하다. 코드를 보면 주석으로 index.phps라는 힌트를 제공하고 있다. index.phps를 확인하기 전에 1.PNG 2.PNG 3.PNG를 업로드 해보았다. 페이지가 새로고침 될 때마다 가 추가 되어진다. 이제 index.phps를 확인해보겠다. 변수 $time에 현재 시간을 저장한 후디렉토리 "tmp"의 "tmp-$time"라는 파일을 쓰기모드로 열어서 "127.0.0.1"을 작성한다. 새로고침할때마다 파일이 생성되는 이유가 이것이다. "tmp/.number"파일은 파일의 개수를 측정하는 파일이라고 하는데, 이 문제에서는 별로 중요하지 않다. file()함수는 파일을 읽어서 배열로 반환하는 함수이다.$변수명[0] : 첫째줄의 내용$변수명[1]..
34번 문제를 클릭하면 위와 같은 알림이 뜬다. 확인을 누르면 아무것도 없는 검은 화면으로 이동한다. 코드를 확인했는데 자바 스크립트 코드가 매우 복잡하게 난독화 되어있다. 크롬의 개발자 모드로 들어가보니 3개의 스크립트로 구성되어 있다. 1번, 2번 스크립트는 코드 보기를 눌렀을때 처럼 매우 복잡하게 난독화 되어있지만 3번 스크립트는 위 사진과 같이 매우 간단한 코드로 되어있다. 이 페이지의 URL에는 "0lDz0mBi2"라는 문자열이 포함되어 있지 않기때문에 34번 문제를 클릭 했을때 항상 else안에 있는 alert('Wrong')이 실행되는 것이다. 조건을 만족했을때 실행되는 코드를 보니 패스워드가 있는 페이지로 이동하는 것 같다. http://webhacking.kr/challenge/javas..
처음화면이다. upload/index.php가 힌트라고 한다. upload/index.php 링크를 클릭하면 read me라고 뜬다. 일단 index.php를 업로드 해보았다. 업로드에 실패한다. 1.PNG를 업로드해보았다 업로드에 성공하였고 .htaccess가 힌트라고 한다. .htaccess는 하이퍼텍스트 엑세스의 줄임말로, 디렉터리 단위로 웹을 설정할 수 있는 파일이라고 한다. 처음에 보였던 upload디렉토리의 index.php파일을 생각해보자 첫 화면의 힌트를 통해 알 수 있듯이 index.php에는 read me만 있는게 아니라 pw에 대한 정보가 담겨있다.하지만 php코드이기 때문에 read me만 나오고있다. 힌트에서 주어진 .htaccess를 이용하면 php코드 파싱 기능을 꺼서 코드를 ..
초기화면이다. index.phps에 php소스 코드가 있는 것 같다. index.phps로 들어가면 위와 같은 php코드가 나온다. 파일선택 후 upload버튼을 클릭하면 위의 코드가 실행된다. 1. 변수 fn에 업로드한 파일의 이름을 저장2. 변수 fn의 "."를 ""로 바꿈3. fn에 "/"이 포함된 경우 no를 출력하며 종료4. fn에 "\."이 포함된 경우 no를 출력하며 종료5. fn에 "htaccess"이 포함된 경우 no를 출력하며 종료6. fn에 ."htaccess"이 포함된 경우 no를 출력하며 종료7. fn의 길이가 10을 초과할 경우 no를 출력하며 종료8. 변수 fn의 ""를 ""로 바꿈10. 변수 cp에 "웹서버에 저장된 임시 파일의 이름"을 저장9. cp라는 파일을 hidden_..
첫 화면이다. kk.js로 들어가보자 URL -> http://webhacking.kr/challenge/web/web-35/ 이므로kk에는 "hack"이라는 문자열이 저장되는 코드이다. 더이상 힌트가 없어 개발자도구로 들어가봤더니 kk2.js랑 hackme.swf가 더있다. kk가 "hackme.swf"라는 문자열을 저장하게 한 뒤, 이 파일이 페이지에 포함되도록(포함되어 실행되도록) 하는 코드이다. 주소창에 http://webhacking.kr/challenge/web/web-35/hackme.swf라고 입력하면 "hackme.swf" 파일이 다운로드 된다. "hackme.swf"를 디컴파일 하기위해 Sothink SWF Decompiler라는 프로그램을 이용하였다.Action - button 7 로..
32번의 초기화면이다. 1등인 lib123을 클릭하니 hit가 하나 올라갔다. 다시한번 누르니까 no!라고 뜨며 hit가 올라가지 않는다. 맨 밑에 있는 Join버튼을 클릭하니 Done이라는 메시지가 출력되며 내 아이디인 khe0616이 순위표에 추가되었다. 내 아이디를 클릭하니 no라고 뜬다. vote_check라는 쿠키가 있는데, 이름을 보면 사용자가 투표를 했는지 안했는지 확인하는 쿠키인듯 하다. 쿠키의 내용을 공백으로 만들고 내 아이디를 클릭하니 hit가 1상승하였다. 그리고 나서 vote_check쿠키의 내용을 확인하면 다시 ok로 되어있다. 참고로 내 아이디를 클릭하는 것은 위와 같은 주소로 접속하는 것과 같다.(32단계 초기 페이지의 추소 + ?hit=khe0616) hit표시 형식이 현재 ..
11번 문제의 초기화면 코드는 별거 없고 초기화면에 써있는 php코드가 힌트이다. preg_match("정규식","검사할 문자")는 "검사할 문자"에 대한 "정규식"패턴의 존재여부를 검사하는 함수로 존재하면 true(1), 존재하지 않으면 false(0)을 리턴한다.이 함수는 이메일, 전화번호 등을 올바른 형태로 입력받기위해 많이 사용된다. $pat="/[1-3][a-f]{5}_.*내IP.*\tp\ta\ts\ts/";if(preg_match($pat,$_GET[val])) { echo("Password is ????"); }즉, 이 문제는 정규식 $pat의 패턴을 갖는 문자열을 val이라는 변수(GET방식)으로 전달하면 풀리는 문제이다. 정규식은 /으로 감싸주므로 슬래쉬는 입력하지 않아도된다.이 정규식을..