Webhacking.kr Challenge 39 풀이.
오른쪽 마우스를 누른 후 페이지 소스를 누른다.
일단 특별한 것은 없고 body 부분에 index.php가 존재한다.
index.php로 들어간다.
index.phps 페이지를 보면 입력 값에 대해 replace와 substr이 있다.
쿼리문을 보면 '$_POST[id]와 같이 값이 전달되고 있다.
싱글 쿼터가 $_POST[id] 앞에는 있는데 뒤에는 존재하지 않는다.
즉 id 값과 싱글 쿼터 = (')을 넣으면 문제를 풀 수 있다는 말이다.
근데 replace에서 싱글 쿼터는 필터링 된다는 걸 알 수 있다.
자. 다시 쉽게 설명해보겠다.
첫 번째 str_replace 부분을 보면 [\] 문자를 지운다.
두 번째 str_replace 부분을 보면 ['] -> ["]으로 치환한다.
substr을 보면 15번째 글자까지 자른다.
핵심은 쿼리 부문이다. ("select ~~~~id = '$_POST[id]")라고 적혀있는데, 마지막에 ' 가 빠져 있어서
오류가 발생한다.
문제는 그냥 '를 입력하면 replace 함수로 인해 필터링 되어서 "로 변경되서 역시 오류가 발생한다.
그래서 substr 함수를 통해 15번째 글자까지 잘라야 한다.
간단히 표를 통해 말해보겠다.
치환된 길이가 15글자이면 ' 2개가 그대로 입력된다.
==> "SELECT 'good' FROM zmail_member where id='$_POST[id]";
==> fault 발생.
치환된 길이가 16글자면 substr 함수에서 15글자까지만 입력을 받기 때문에 끝 부분에 ' 1개가 잘린다.
==> "SELECT 'good' FROM zmail_member where id='$_POST[id]'";
==> fault 발생 X.
즉 admin을 입력 후 빈칸(=space bar)를 계속 누르다가 15번째 '를 누른다.
Cf) 100점 문제 치고는 어려웠던 거 같다. 싱글 쿼터, 더블 쿼터로 인해 좀 애를 먹었다.
'# Related site issues > WEBHACKING.KR' 카테고리의 다른 글
Webhacking.kr Challenge 4. (0) | 2018.05.01 |
---|---|
Webhacking.kr Challenge 54. (0) | 2018.05.01 |
Webhacking.kr Challenge 38. (0) | 2018.05.01 |
Webhacking.kr Challenge 26. (0) | 2018.05.01 |
Webhacking.kr Challenge 24. (0) | 2018.04.30 |