-
[Webhacking.kr - 문제풀이 18번]Webhacking.kr 문제 풀이 2021. 4. 12. 20:14728x90
이번 문제는 SQL injection 문제이며, view-source가 나와있으니 확인해보자.
form 태그로부터 넘어오는 no 값을 get 방식으로 받았을 때, db가 연결되고 preg_match() 함수를 통해
필터링하여 위와 같은 문자열과 일치하면 코드가 종료된다.
그게 아니라면 result 변수에는 chall18로 부터 id가 guest이고, no가 입력값인 id로 배열을 추출하여 초기화된다.
이후 위에서 얻은 id가 guest 라면 "hi guest" 가 출력될 것이고, admin이라면 문제가 해결될 것이다.
문제에서는 admin의 no값이 2라고 알려줬지만, 앞에 id가 "guest"라는 조건과 함께 and라고 나와있기에 2를 입력하여도 소용없다는 것을 알 수 있다.
따라서, 논리합을 이용했을 때 앞의 진리값이 어떻게 나오든 뒤에서 2는 참(=True)값을 가지기에
where id='guest' and no=3 or no=2와 같이 바꾼다면...
"no hack"이라는 문자열을 볼 수 있는데, 이는 위의 소스코드에서 보았듯이 필터링이 되었던 것이다.
그렇기에 공백문자에 대한 URL-encode 값을 대신 입력한다면 문제를 해결할 수 있다. (URL-encode 공백문자 : %09)
728x90'Webhacking.kr 문제 풀이' 카테고리의 다른 글
[Webhacking.kr - 문제풀이 38번] (0) 2021.04.13 [Webhacking.kr - 문제풀이 26번] (0) 2021.04.12 [Webhacking.kr - 문제풀이 14번] (0) 2021.04.12 [Webhacking.kr - 문제풀이 6번] (0) 2021.04.12 [Webhacking.kr - 문제풀이 17번] (0) 2021.04.12