파일을 업로드하는 기능이 있다. 다른 정보를 더 찾아보기 위해서 소스를 보면 소스 파일이 주어져 있다. 소스 파일을 보면 업로드하는 파일명에 많은 제한을 두었고 해당 문제는 hidden_dir를 알아내서 내가 업로드한 파일명에 기록된 패스워드를 보면 된다..htaccess 파일에 대해 까다롭게 제한을 두고 있기 때문에 다른 우회 방법을 생각해보면 에러를 발생시켜서 업로드 되는 위치 값을 볼 수가 있다. 먼저, 정상적인 파일(파일명: do)을 업로드해서 패스워드가 기록되도록 한다. 그리고, 파일명 조건 중에서 보면 eregi()를 통해 exit()가 아니라 공백으로 치환되는 조건들이 있다. 이를 이용해서 공백으로 치환이 되는 값들로 파일명을 해서 업로드를 하게 되면 서버 쪽에서는 copy() 함수를 실행하..
no, id, pw 를 입력을 해서 로그인할 수 있는 페이지를 볼 수 있다. 로그인을 해보면 아래와 같이 Success - guest 를 볼 수 있다. no 부분에 ||를 이용해서 SQL Injection이 되는 지 확인해보면 로그인이 되는 것을 볼 수 있다. 이를 이용해서 id 값의 첫 글자를 비교해보면 3가지 결과를 얻을 수 있다.0x66(f) 와 비교하였을 경우 해당하는 값은 참이 될 수 없기 때문에 Failure이 발생한다. 0x67(g) 와 비교하였을 경우 guest가 있기 때문에 참이 된다. 0x61(a) 와 비교하였을 경우 admin이 있기 때문에 참이 되고 guset와 달리 admin password를 입력하는 부분을 볼 수 있다. 값을 입력해보면 Wrong 이 발생한다. pw의 길이가 1..
문제 페이지를 보면 값을 입력하여 전송할 수 있는 부분을 볼 수 있다. 다른 정보를 더 얻기 위해서 소스를 보면 아래와 같이 소스 파일을 제공하는 것을 볼 수 있다. 소스 파일을 보면 값을 입력하여 전송을 하면 POST 방식으로 값을 전달을 하고 값 중에서 \(backslash)가 있을 경우 제거를 하고 '(single-quote)가 있을 경우에 '(single-quote)를 하나 더 생성하고 길이가 15자 이하만 Query에 전달을 하여 good을 출력하게 된다. 즉, 입력하는 값을 이용하여 항상 참이 되도록 만들어 주면 문제를 풀 수가 있다. 그리고 소스상에 Query를 보면 id='$_POST[id] 로 되어 있다. 즉, '(single-quote)를 입력해서 해당 Query가 에러가 발생하지 않도..