아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
냉정한쿠스쿠스26
냉정한쿠스쿠스2619.05.06

SQL 인젝션 공격기법중 쿼리 대입문구 의미가 궁금합니다.

' or ''='

' or 1=1--

' or 1=1#

' and ''='

' and 1=1--

' and 1=1#

SQL 인젝션 취약점 공격 중 위의 쿼리들이 어떻게 해석되는 것인지 이해가 잘 안됩니다...

쿼리문으로 예시로 혹시 설명좀 부탁 드립니다 ㅜ

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 로그인 하는 경우를 예로 들어보겠습니다. 별 생각 없이 대충 만들면 아래 쿼리처럼 될 수 있습니다.

    SELECT user_id FROM users WHERE username = '$id' AND password = '$pw'

    이런 쿼리에서 단순히 $id와 $pw를 적절한 escape 없이 바꾸기만 한다면 $pw에 ' or ''='를 넣을 경우

    SELECT user_id FROM users WHERE username = 'admin' AND password = '' or ''=''

    결과적으로 이런 쿼리가 만들어질 수 있습니다. 비밀번호를 몰라도 어떤 아이디로든 로그인을 할 수 있게 되죠!

    AND보다는 OR이 더 확실합니다. --와 #은 그 뒤 부분을 주석으로 처리하겠다는 뜻입니다.


  • SQL 인젝션은 웹에서 아이디,암호등을 입력받을때 인젝션 공격에 대한 방어를 하지

    않을경우 해커가 데이타베이스 명령을 통해 서버의 정보등을 빼앗아 가는건데요

    보편적으로 위 질의를 통해, 인젝션 공격이 가능한지 불가능한지 알아볼수 있습니다

    우선 아이디와 암호를 UID 와 UPASS로 받는다고 가정을 하구요

    $sql = "select uid from members where uid='$uid' and upw = '$upass' ";

    서버단에서는 보통 위 소스처럼 사용자 인증을 하게 됩니다

    만약 $uid = "test" , $upass = "1231312" 라고 들어오면 저 $sql 은 아래처럼 변화됩니다

    $sql = "select uid from members where uid='test' and upw = '1231312' ";

    그래서 해당 아이디와 암호를 동시에 만족하는 레코드 가 있다면 참이 되는것이고

    해당 아이디를 출력해주는거죠

    만일 없다면? 출력되는것이 없으니, 아~ 암호 또는 아이디가 잘못되었다는걸 사용자에게 경고메세지를

    통해 출력을 해줍니다

    근데 sql 인젝션으로 공격을 할때 해당 아이디가 hong 이라는걸 알고 있다묜?

    아이디에 hong , 암호부분에 ' or 1=1 -- 를 입력합니다

    그러면 서버단은

    아래처럼 해석을 하게 되죠

    $uid = "hong" , $upass = "' or 1=1 --"

    $sql = "select uid from members where uid='hong' and upw = '' or 1=1 --' ";

    즉, 위 sql 명령은 아이디에 hong 이 있다면 무조건 참!

    결국 암호를 몰라도 hong 으로 로그인이 가능하게 됩니다

    결국 이렇게 명령문을 통하여, 나머지 필드의 모든 내용도 전부 해킹할 수 있는것입니다