처음화면이다. 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방식)으로 전달하면 풀리는 문제이다. 정규식은 /으로 감싸주므로 슬래쉬는 입력하지 않아도된다.이 정규식을..
웹쉘 파일을 업로드하는 문제이다. 파일의 타입이 힌트라고 한다. 코드에는 특별한 힌트가 없다. 메모장으로 hello.php라는 파일을 만든 후 첨부하여 제출하였더니 access denied라고 뜬다. 이미지 파일을 업로드 시켰더니 업로드가 정상적으로 된다. php파일에 대해서 필터링이 걸려있는 것 같다.문제에 주어진 힌트는 파일 타입이었다. 파일 타입을 변조한다면 php파일의 업로드가 가능해질 것이다. 일단 hello.php파일의 Content-Type은 application/octet-stream이다.이 Type의 파일은 업로드할 수 없다. 1.png파일의 Content-Type은 image/png이다.이 Type의 파일은 업로드 가능하다. 이를 통해 서버에서 파일의 유효성을 검사할때 Content-T..
36번 문제 초기화면 코드는 별다른게 없다. viblackout이 힌트이다. blackout은 정전이라는 뜻이다. 즉, vi에디터로 코드를 작성하는 도중에 비정상적으로 종료된 상황을 의미하고 있다. vi는 작성중에 비정상적으로 종료될 경우 확장자가 swp인 파일이 추가 생성된다.예) car.php 라는 파일을 vi에디터로 작성 하던 중 비정상적으로 종료될 경우 -> .car.php.swp 파일이 생성됨 문제의 파일명은 index.php이다. 따라서 .index.php.swp를 입력했는데 파일이 없다고 나온다. 구글이나 네이버에서 다른사람들의 풀이를 찾아본 결과, 최근들어 이 문제가 막힌 것 같다.
31번 문제에 접속하면 간단한 코드와 함께 에러 메시지 Connection timed out이 출력된다.fsockopen("연결할 도메인이나 ip", "포트번호", "에러", "에러 메시지", "연결 시도시간") 함수를 이용해서ip : 내 pc의 외부 ip포트번호 : 10000~10100으로 접속을 시도하는데, 접속이 실패하였기 때문에 die() : 메시지를 출력한 후 종료하는 함수가 호출되었다.평소에 만번대의 포트를 사용하지 않기때문에 접속에 성공하기위해 만번대의 포트를 직접 열어주어야 한다. 내 pc의 내부 ip를 ipconfig를 이용하여 확인하였다.내부 ip : 192.168.0.2 일단 공유기의 포트포워딩기능을 이용해서내 pc의 외부 ip : 10000~10100 으로 접속을 시도하면내 pc의 ..
52단계의 초기 페이지이다. 소스코드는 특별한게 없다. 헤더생성을 클릭하면 "khe0616"이라는 값을 가진 변수"id"가 서버에 GET방식으로 전송된다. Burp Suite를 이용하여 헤더생성을 클릭하기 전, 후의 헤더를 비교하였다. 헤더생성 클릭전 헤더생성 클릭후id: khe0616 이라는 헤더가 추가되었다.즉, $_GET[id]로 헤더 인젝션이 이루어졌음을 알 수 있다. 주의할점은, 모든 페이지에서 (초기url)/?id=khe0616 을 입력했다고 헤더부분에id: khe0616이 추가되는 것은 아니다.52단계 페이지를 코딩할때 (초기url)/?id=khe0616입력시 헤더에 id: khe0616 이 추가되도록 구현 해놓은 것일 뿐이다. 따라서,(초기페이지 url)/?id=khe0616%0D%0ASe..