Lord Of SQL injection, 문제 18번 나이트메어입니다.
일단 자리수가 6자리 이하로 정해져있습니다.
필요한 값을 작성해보겠습니다.
%27) 그리고 뒤를 주석처리할 %00
%27은 single quote 이고 %00은 그저 널값이니까 총 세자리를 사용했습니다.
그러면 남은 세자리로 답을 출력해야는 상황입니다.
해답을 보기전에, SQL문에서 일반적으로 문자열과 상수를 어떻게 비교를 하는지부터 알아보겠습니다.
"AAA" = 1 은 거짓입니다.
당연하듯이 AAA는 따옴표로 감싸진 문자열이고 1은 상수이지요.
그런데..
"AAA" = 0 은 참이됩니다.
엥? 왜 참이 되는 걸까요?
그 이유는 0 에게 있습니다.
SQL에서는 0이 임의의 문자열을 나타내는 역할을 맡고있습니다.
하지만
'123'=0 은 거짓입니다.
사용자의 편의상 '123'=123 을 참으로 계산하는데
위와 같은 값에서 Single quote가 없어지면 결국 123=0 이므로 거짓이 됩니다.
사진을 보면 더 정확히 알 수 있습니다.
pw가 1일 때는 거짓으로 처리되서 결과가 나오지 않고
pw가 0일 때는 참으로 처리되서 반환값이 나옵니다.
결국 이렇게 작성하면 클리어할 수 있습니다.
pw=%27)=0;%00
그리고 이렇게 작성된 것은 사진에서 보시다시피 pw=0과 같습니다.
'워게임 > LOS' 카테고리의 다른 글
[워게임 LOS] 문제 20번, 드래곤(Dragon) (0) | 2016.07.28 |
---|---|
[워게임 LOS] 문제 19번, 자비스(Xavis) (0) | 2016.07.27 |
[워게임 LOS] 문제 17번, 서큐버스(succubus) (0) | 2016.07.27 |
[워게임 LOS] 문제 16번, 좀비 어쌔신(Zombie Assassin) (0) | 2016.07.27 |
[워게임 LOS] 문제 15번, 어쌔신(Assassin) (0) | 2016.07.27 |