-
SQL injection 바로 잡기 #3 Bool ValueWargame Site/SQL injection 2019. 5. 20. 14:29
MySQL 에서 Bool 값은 그 값이 정해져 있다.
True 는 1 이고, False 는 0 이다.
그러면 다음 세 개의 Query 에서 혼동이 올 수 있다.
1. where 123
2. where 123 = True
3. where 123 = False
1 번 Query 는 Where True 의 의미를 가집니다. (의미만!)
하지만, 2 번 Query 는 Where False 과 같습니다.
3 번 Query 또한 Where False 와 같습니다.
왜.... 이런 현상이 발생할까요?
바로 0이 아닌 모든 상수는 True 로 취급하지만, True 는 모든 상수가 아니기 때문입니다.
이 점을 미루어 봤을 때, where 1 = True 는 where True 로 동작합니다.
만약 -1<0<1 이라는 조건이 있을 때 처리되는 과정은
-1 < 0 은 True 이기 때문에 1 로 대응이 됩니다.
그 뒤, < 1 의 연산을 하게 되기 때문에 결과적을 False 가 되는 것입니다.
이와 비슷한 예로
'a' < 'b' < 'c' 가 있습니다.
이 또한, 'a' < 'b' 는 True 를 반환합니다.
True < 'c' 이기 때문에 False 가 나옵니다. ( 모든 문자열 문자열이 아닌 대상과의 비교에서 False(0) 로 치환되기 때문이죠 )
밑의 결과를 예상해볼 수 있겠죠?
'Wargame Site > SQL injection' 카테고리의 다른 글
여러분~~!! (0) 2019.05.31 저는 여전히 꾸준한 한걸음 중입니다 ~ (0) 2019.05.29 SQL injection 바로 잡기 #2 문자와 숫자의 비교 (0) 2019.05.20 SQL injection 바로 잡기 #1 Error Based Blind SQL injection 9eN (0) 2019.05.20 Test 중입니다. (0) 2019.05.15 댓글