hint로 upload/index.php 파일이 있고 해당 파일 내용에 $pw 에 대한 값과 readme라는 글자가 있다는 것이 주어져 있다.(hint에서는 readme로 되어 있고 실제 파일 내용에는 read me라고 되어있다.)그리고 하단에는 파일을 업로드할 수 있는 기능이 있다. 먼저 upload/index.php 내용을 보면 read me라는 글자만 보인다.주어진 힌트를 토대로 생각을 해보면 파일 업로드 기능을 이용하여 .htaccess 파일(php_flag engine off)을 업로드해서 php 실행을 제거해서 $pw에 대한 값을 보면 되는 문제처럼 보였다. 실제로 임의의 파일을 업로드 하면 위와 같이 다른 힌트가 주어지고 앞에서 말한 대로 하면 문제를 풀 수 있다.
SQL INJECTION 문자열을 통해 SQL Injection 문제임을 알 수 있고 입력할 수 있는 공간이 있다. 다른 정보를 얻기 위해서 소스 파일을 보면 index.phps 소스 파일도 제공하고 있다. 소스 파일을 보면 $q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])")) or die("query error");$GET_[no] 을 통해서 받은 값을 Query에 입력하고 나온 결과값을 비교하였을 때 admin이 출력이 되면 문제를 풀 수 있다.그리고 소스 파일 중간에 보면 SQL Injection에 사용되는 다양한 문자들을 필터링한 것을 볼 수 있다. 이 문제는 ..
문제 페이지를 보면 소스 파일 index.phps가 표시되어 있다. 소스를 보면 $_GET[id] 값이 admin이 되면 문제를 풀 수 있으나 앞에서 admin이 될 경우 no!를 출력하고 종료가 된다.그리고 소스 중간에 $_GET[id]=urldecode($_GET[id]); URL Decode 해주는 부분이 있는데 다시 이야기를 하자면 입력값을 브라우저에서 1번, 소스에서 1번, 총 2번을 URL Decode 해준다.이를 이용하여 admin 중 a를 %61로 URL Encode 해주고 필터링 부분을 우회하기 위해서 1번 더 %61 을 URL Encode 해주면 %2561 이 된다.즉, ?id=%2561dmin을 입력하면 브라우저에서 URL Decode 해주면 id=%61dmin 이 되고 필터링 부분에..