on
old-39
old-39
old-39
view-source를 통해 페이지 소스 코드를 살펴보면
Chellenge 39 view-source
$_POST['id'] = str_replace("\\","",$_POST['id']);
POST로 전달받은 id에서 "\\"를 ""로 변환한다.
$_POST['id'] = str_replace("'","''",$_POST['id']);
$_POST['id']에서 "'"를 "''"로 변환한다.
$_POST['id'] = substr($_POST['id'],0,15);
$_POST['id']의 0부터 15개의 문자만 가져온다.
$result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));
$_POST['id']를 이용해 쿼리를 수행한다.
if($result[0] == 1){ solve(39); }
위 쿼리를 수행한 결과가 1이면 문제가 풀린다.
쿼리의 결과가 1이면 되고, 쿼리문을 살펴보면 싱글 쿼터의 짝이 맞지 않는다.
따라서, 1 + 13개의 공백 + 싱글쿼터(')를 입력하면
$_POST['id']가 "1 ''"로 싱글쿼터가 2개가 되지만 substr()이 0번째 부터 15개이므로 자동으로 걸러준다.
즉, "1 '"을 입력하면
"select 1 from member where length(id)<14 and id='{$_POST['id']}"에서
"select 1 from member where length(id)<14 and id='1'"을 입력하면 두 조건 모두 참이 되어 결과값으로 1을 가진다.
from http://woong971.tistory.com/258 by ccl(A) rewrite - 2021-12-27 16:00:40