wargame/los.rubiya.kr10 10번 skeleton $query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; 뒤의 and 1=0 때문에 무조건 거짓이 되기 때문에 주석으로 날려줘야한다. if($result['id'] == 'admin') solve("skeleton"); 쿼리는 guest로 날리지만 admin으로 로그인이 되어야 문제가 해결된다. %27 : ' %23 : # pw=' or id='admin' # 2020. 12. 8. 9번 vampire $_GET[id] = strtolower($_GET[id]); strtolower함수는 대문자를 소문자로 변환하는 함수이다. $_GET[id] = str_replace("admin","",$_GET[id]); str_replace는 str_replace('바껴서 없어질 문자' , '변경 완료 될 문자', '대상 문자열'); 의 구조로 문자열을 치환해주는 함수이다. 이전문제와 마찬가지로 대문자로 쉽게 풀릴 것 같지만 replace함수로 admin을 공백으로 치환하기 때문에 문제가 풀리지 않는다. 하지만 replace 함수는 한번만 수행되는 함수이기 때문에, aadmindmin 을 입력하면 가운데의 admin만 치환하고 나머지 문자열을 반환한다. 2020. 12. 7. 8번 troll preg_match함수로 특수문자와 문자열 admin을 필터링 하였다. if($result['id'] == 'admin') solve("troll"); 하지만 쿼리 결과값(result)이 admin이어야 문제가 해결된다. PHP는 대소문자 값을 다른 문자열로 인식하는데, 데이터베이스는 같은 문자열로 인식한다. 따라서 대문자로 쿼리를 날리면 preg_match함수를 우회하면서 원하는 값을 DB로부터 조회할 수 있다. ?id=ADMIN을 날리면 문제가 해결된다. 2020. 12. 5. 7번 orge 보호되어 있는 글 입니다. 2020. 8. 31. 6번 darkelf query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("darkelf"); highlight_file(__FILE__); ?>5번 문제와 코드가 거의 유사하다. if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이 부분만 보면 될 것 같다.이번에는 preg_match를 통해 or와 and를 필터링 하였다. or와 and없이 sql injection을 하려니 막막하지만이 역시 || 와 &&로 우회가 가능하다. 이것만 알면 바.. 2019. 11. 16. 5번 wolfman query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("wolfman"); highlight_file(__FILE__); ?>5번의 wolfman 코드이다.쿼리는 guest로 날리지만, 문제를 해결하려면 admin으로 로그인하여야 한다.그리고 preg_match 정규식함수에 띄어쓰기를 못하도록 필터링 하였다. white space filtering으로 구글링하면,%20을 %0a %0b %0c %0d %09 등으로 우회하여 sql injection을 하는 것을 알 수 .. 2019. 11. 16. 이전 1 2 다음