-
SQL Injection 종류와 발생 원리 - 1Web - Security/Injection 2023. 5. 8. 22:44
SQL이란?
SQL은 Structured Query Language의 약자로, 데이터베이스를 관리하고 검색하는 데 사용되는 표준 프로그래밍 언어이다
SQL은 관계형 데이터베이스 관리 시스템(RDBMS)에서 많이 사용되며, 데이터를 삽입, 업데이트, 삭제, 검색하는 데 사용된다
위 식은 가장 간단한 SQL 질의문이다
위 식의 의미는 test 라는 테이블에서 모든 열의 정보를 가져오라는 질의문이다위 식은 member라는 테이블에서 user_id, password 를 가져오라는 질의문이다
실행 결과로 member 테이블에 있는 모든 아이디와 비밀번호를 가져온다위 식에서 홍길동이라는 사람의 정보만 가지고 오고 싶어서 뒤에 WHERE 라는 조건절을 추가해 줬다
질의 결과는 홍길동이라는 사람의 id와 비밀번호만 가지고 오는 결과일 것이다SQL 질의문은 줄을 구분하지 않고 ;(세미콜론)이 나올 때까지 계속 유효한 의미를 가진다 ( 문장의 종료를 알림 )
위 질의문은 member라는 테이블에서 user_id, password의 열만 가져온다
그리고 이렇게 골라낸 정보들 중에서 user_id가 홍길동 이어야 하고 password는 홍길동123 인 정보만 가지고 오게 된다위 질의문을 이용하여 '홍길동' 자리에는 고객이 입력하는 아이디가 들어가게 되고 '홍길동123'에는 고객이 입력한 비밀번호가 들어가 해당 고객의 정보를 찾을 수 있게 되는 것이다
SQL Injection
SQL Injection이란 SQL 쿼리를 실행할 수 있는 코드를 삽입하여, 원래 의도와는 다른 동작을 유발하는 공격 기법이다
위 질의문에서 '아이디 입력' 과 '비밀번호 입력' 에는 고객이 로그인 홈페이지에서 아이디, 비밀번호란에 입력한 정보가 그대로 들어오게 된다
예를 들어 고객의 아이디가 duli_123이고 비밀번호가 ZZang_Gu123 이라고 하자
고객은 아이디 입력란에 duli_123 을 입력할 것이고 비밀번호 입력란에 ZZang_Gu123 을 입력하고 로그인 버튼을 누르게 될 것이다그럼 서버에는 위와 같은 질의문이 완성이 되어 아이디가 duli_123이고 비밀번호가 ZZang_Gu123인 정보를 찾아서 보내줄 것이다
그럼 여기서 아이디에 SQL 질의문을 작성하고 비밀번호를 입력하면 어떻게 될까?
아이디에 duli_123' AND '가진돈 다 내놔!! 를 입력하였고 비밀번호는 정상적으로 입력하였다
위 질의문은 정상적인 질의문이 되고 가진돈을 다 주도록 된다
AND는 앞에 조건과 뒤에 조건 모두 만족을 해야 참이 되므로 OR을 이용하여 앞조건이든 뒤조건이든 1개만 맞으면 참이 되도록 SQL질의문을 작성하여 보낼 수 도 있다위 질의문의 의미는 user_id가 duli_123 이거나 1과 1이 같으면 참이 된다
아이디가 틀리더라도 1과 1은 같기 때문에 항상 참인 조건이다1과 1이 같아서 참인 조건이 만족되었으므로 정상적으로 실행이 된다
--을 이용하여 뒤에 문장은 주석처리를 하여 위와 같은 SQL 질의문이 완성이 된다
위와 같이 원래 의도와는 다른 결과가 발생하여 공격자는 해당 홈페이지에 있는 모든 고객의 정보를 가져와 악의적으로 이용하는 등 부정적인 결과가 발생하게 된다
728x90'Web - Security > Injection' 카테고리의 다른 글
SQL Injection 종류와 발생 원리 - 2 (0) 2023.05.08