사용자가 입력한 값이 SQL 쿼리문에 그대로 들어가면서, 의도하지 않은 SQL 문장이 실행되는 취약점을 악용한 공격
개발자가 설계한 쿼리문의 일부에 사용자의 입력값을 이어 붙여 실행되도록 구현한 경우 SQL Injection 취약점이 발생함.
예시
개발자가 로그인 기능을 구현하기 위해 아래 쿼리를 사용한다고 하자.
SELECT * FROM user WHERE id='[사용자입력]' and pw='[사용자입력]'
이때 사용자가 id로 aa, pw로 aa’ or ‘1’=’1이라는 값을 입
대부분의 웹 서비스들은 쿼리 실행 결과 전체를 노출하는 경우가 드묾. 또한, 에러 핸들링을 잘 해두어 오류 내용이 나타나는 경우도 드묾.
쿼리의 실행 결과를 확인할 순 없지만 서버의 응답을 통해 쿼리의 참과 거짓을 구분할 수 있다면, 데이터를 잘게 나누어 특정 값과 비교하는 SQL Injection을 수행할 수 있음. 이를 Blind SQL Injection이라 함.