SQL Injection이란?
보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써
데이터베이스를 비정상적으로 조작하는 행위
SQL Injection 종류
일반적으로 SQL Injection은 In-band, Inferential(Blind), Out-of-band로 나뉜다.
- In-band SQL Injection - Error based SQL Injection
- In-band SQL Injection - Union based SQL Injection
- Inferential(Blind) SQL Injection - Boolean based SQL Injection
- Inferential(Blind) SQL Injection - Time based SQL Injection
- Out-of-band SQL Injection
In-band SQL Injection
공격자는 동일한 통신 채널을 사용하여 공격을 시작하고 결과를 수집한다.
Error based SQL Injection - 공격자는 데이터베이스가 오류 메세지를 생성하도록 하는 작업을 수행한다. 공격자는 이런 오류 메세지를 통해 데이터베이스 구조에 대한 정보를 수집할 수 있다.
Union based SQL Injection - 이 SQL Injection은 UNION SQL 연산자를 활용한다. 이 연산자를 활용하여 원래의 요청에 한 개의 추가 쿼리를 삽입하여 정보를 수집할 수 있다. 이 공격은 조건이 있다. Union 하는 두 테이블 컬럼 수가 같아야 하고 데이터 형이 같아야 한다.
Inferential(Blind) SQL Injection
공격자는 데이터 payload를 서버로 보내고 섭의 응답과 동작을 관찰하여 구조에 대해 알아본다. 이 방법은 웹 데이터베이스에서 공격자에게 데이터가 전송되지 않으므로 공격자가 In-band 공격에 대한 정보를 볼 수 없기 때문에 Blind SQL Injection이라고 한다. Blind SQL Injection은 서버의 응답 및 동작에 의존하므로 일반적으로 실행 속도가 느리지만 그만큼 해를 입힐 수 있다.
Boolean based SQL Injection - 공격자가 데이터베이스에 SQL 쿼리를 보내 결과를 반환하도록 한다. 쿼리가 true인지 false인지에 따라 결과가 달라지고, 결과에 따라 HTTP 응답 내의 정보가 수정될 수 있다. 그리고 공격자는 메세지가 true 또는 false 결과를 생성했는지 확인할 수 있다.
Time based SQL Injection - 공격자는 SQL 쿼리를 데이터베이스에 보내 반응할 때까지 대기한다. 공격자는 쿼리가 true인지 false인지 데이터베이스가 응답하는데 걸리는 시간을 알 수 있다. 결과에 따라 HTTP 응답이 즉시 또는 대기시간 이후에 생성된다. 공격자는 데이터베이스의 데이터에 의존하지 않고 자신이 사용한 메세지가 true 또는 false를 반환했는지 확인할 수 있다.
Out-of-band SQL Injection
Out-of-band SQL Injection은 웹이 사용하는 데이터베이스 서버에서 특정 기능이 활성화된 경우에만 사용할 수 있다. 이 공격은 위 두 개의 공격들의 대안으로 사용된다.
Out-of-band SQL Injection은 공격자가 동일한 채널을 사용하여 공격을 시작하고 정보를 수집할 수 없거나 서버가 너무 느리거나 불안정하여 수행할 수 없을 때 사용된다. 이 공격은 공격자에게 데이터를 전송하기 위해 DNS 또는 HTTP 요청을 생성하는 서버에 의존한다.
'Security > SQL Injection' 카테고리의 다른 글
DVWA sql injection, blind sql injection low (강의 과제) (0) | 2022.02.23 |
---|