215, 1/11 회원가입  로그인  
   ka0r1
   SQL Injection

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=144 [복사]


SELECT * FROM user_data WHERE last_name = 'Your Name or 1=1'
위의 값을...

SELECT * FROM user_data WHERE last_name = 'Your Name' or '1=1'
위의 값으로 바꾸니깐 로그인이 되었습니다.




'Your Name or 1=1'이 그 자체가 한 블럭이 된다? 불안정하다?
이렇게 설명이 되어 있더라고요.

그래서 제가 'Your Name' or '1=1'로 바꾸니깐 되는데...

'Your Name or 1=1' <- 일단은 이것 자체가 FALSE값이 되어서 로그인이 불가능한 것이고

'Your Name' or '1=1' <- 이것은 FALSE or TRUE가 되어서, 논리연산에 의해 TRUE가 되어서
로그인이 되는 거라고 알고 있습니다.

제가 궁금한 건 'Your Name or 1=1' <- 이게 왜 FALSE가 되는 건가요?

  Hit : 4639     Date : 2013/04/14 02:53



    
rubiya last_name = 'Your Name or 1=1' 쿼리 그대로 last_name 이 콤마 사이에 있는 'Your Name or 1=1' 인 값을 반환하라는 의미입니다.

char a = 'Your Name or 1=1'; 이것과 비슷하다고 보시면 좋을 것 같습니다.
2013/04/14  
ka0r1 제가 질문에 글을 올리면서 답을 써버렸네요 ㅋㅋㅋㅋ
Your Name or 1=1 (FALSE or TRUE) ==> 결국엔 논리연산자에 의해 FALSE가 된다.
이렇게 이해하면 되나요? Your Name 자체가 FALSE인건가요?
2013/04/14  
rubiya last_name 의 값이 Your Name or 1=1 이렇게 16글자인 값이요!

or 이라는 단어가 들어있다고 해서 last_name의 인자가 끝나는게 아니예요

'가 오는순간이 인자가 끝나욤

그리고 false or true면 true입니당ㅋㅋㅋ
2013/04/14  
asdf3856 성명을 어렵게 하시는거 같은데.,..
간단히 설명해드림.
SELECT * FROM user_data WHERE last_name = 'Your Name or 1=1'
1.라스트 네임이라는 변수값에 true를 넣어 우회 하는게 목적.
2. 'yourName or 1=1' 이렇게 된것은 흡사 .. last_name = 'asdf'와 같습니다.

즉,싱글 쿼터 (')로 값을 묶어 주셔야 되요.. 'yourName' '1=1' 이렇게 묶어 주시지 않으면 or문 자체가 의미가 없어지는데 or는 ' 1' '2' 비교할 변수 두개를 만들어주셔야됩니다...

SELECT * FROM user_data WHERE last_name = 'Your Name' or '1=1'
' ' or 'true' 로 우회 되는 거져.. 말이 이상한데 나도.. ㅠ
2014/10/18  
asdf3856 ' a' or 'b' 이렇게 묶어 주는이유는 비교할 대상 설정하신다고 보면되요 .
'a or b' 이렇게 되있으면 비교할 대상을 찾지 못하고 'a or b'를 하나의 string으로 본답니다.

ps:type이 스트링인가?..기억이 가물
2014/10/18