hint로 주어진 것들을 살펴보면 c29_tb 테이블에 password 컬럼이 존재하고, 파일 업로드 시 파일명에 .(dot)이 있을 경우 공백으로 치환된다. 처음에 먼저 do9dark.jpg 파일을 만들어서 업로드 해보면 위와 같이 Done, time, ip, file 문자가 표시가 된다. 다시 한번 같은 파일로 업로드 해보면 "파일이 존재합니다." 문자가 표시되어 이름을 do9.jpg로 변경해서 올려보면 위와 같이 이번에는 time, ip, file 에 대한 값들이 출력되는 것을 볼 수 있다. 그리고 파일명은 앞에서 말한 것과 같이 .(dot)이 공백으로 치환되어 표시가 된다. 그리고 파일명을 변경해서 올려보면 time, ip, file에 대한 값이 순서대로 추가로 표시가 되는 것을 알 수 있다. 그..
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 이 되고 필터링 부분에..
문제 페이지를 보면 파일 목록이 출력되어 있고 하단에는 hello world 라는 문자열이 출력되어 있다. 그리고 url에 보면 ?file=hello 라고 되어 있는데 아마도 파일 목록 중에서 hello.txt 파일의 내용을 출력해주고 있는 것 같다. (확장자 .txt는 서버에서 붙여서 파일 내용을 불러오는 구조) 이를 이용하여 password.php를 보기 위해서는 ?file=password.php를 한 다음에 .txt를 제거하기 위해서 %00(null) 문자를 붙여서 입력하면 password.php 파일의 내용을 볼 수 있다.