-
SQL injection 바로 잡기 #5 Where 동작의 이해Wargame Site/SQL injection 2020. 3. 12. 23:09
이번에 배울 개념은 정말 중요한 개념이다.
직접 테이블을 구성해보고 실험을 해보는 것을 추천한다.
우선 하나의 질문이 있다. 이 질문에 대답을 할 수 있다면 해당 포스트를 보지 않아도 된다.
Q. 위와 같은 Table 이 있을 때 다음과 같은 Query 의 동작의 결과를 설명할 수 있는가?
보통 사람들이 생각하기에
name 의 length 가 3 일 경우 4 가 들어가서 ( 4 , 'park' ) 이 출력되고,
legnth 가 3 인게 아닐 경우 1 이 들어가서 ( 1 , 'kim' ) 이 출력될 것이다
라고 개념을 잘못 잡을 수 있다.
하지만, Empty set 가 출력되었다.
이 질문에 답을 하기 위해서는 우선 Where 의 동작을 잘 이해해야한다.
필자가 직접 집필한 저서에도 기록을 해놓았다.
where 절을 동작할 때 테이블에서 한 레코드씩을 가져온 뒤,
where 이하 절이 True 경우 해당 절을 반환한다.
자, 그럼 위의 테이블에서 첫 번째 줄을 가져와보자.
위의 1, 'kim' 이 들어가게 되고 해당 조건이 참이 되면서 where no=4 가 된다.
하지만, 가져온 줄을 기준으로 생각했을 때 'kim' 의 no 컬럼은 1 이기 때문에 버려진다.
이번엔 두 번째 줄을 가져와보자.
위의 2, 'kang' 이 들어가게 되고 해당 조건이 거짓이 되면서 where no=1 이 된다.
하지만, 위와 마찬가지 이유로 해당 레코드 또한 출력되지 않는다.
이와 마찬가지로 아무 레코드도 출력되지 않는 것이다.
이제 위의 Query 를 해석하는 눈이 생겼을 것이라고 생각한다.
위 개념을 Test 해볼 수 있는 예제는 Webhacking 9 번 문제 와 Crackus 20 번 문제가 있다.
'Wargame Site > SQL injection' 카테고리의 다른 글
Procedure Analysis 분석 - CTF 문제 출제 (0) 2021.02.13 if 의 동작방식을 이해해야만 풀리는 SQL inejction (0) 2021.02.13 SQL injection 바로 잡기 #4 문자열 (0) 2020.03.12 여러분~~!! (0) 2019.05.31 저는 여전히 꾸준한 한걸음 중입니다 ~ (0) 2019.05.29 댓글