SQL 인젝션

RYU·2025년 5월 18일

JSP

목록 보기
2/5

SQL 인젝션이란

  • 데이터 기반 애플리케이션을 공격하는 데 사용되는 코드 삽입 기술
  • 가장 일반적인 웹 해킹 기술 중 하나
  • 악의적인 SQL문을 입력하여 데이터베이스를 조작하거나 중요한 정보에 접근하는 방식

SQL 인젝션의 작동 원리

  • SQL 인젝션은 애플리케이션이 사용자 입력을 적절히 검증하거나 이스케이프하지 않을 때 발생한다.
  • 공격자는 이 취약점을 이용하여 원래의 SQL쿼리를 변조하고 예기치 않은 동작을 유발할 수 있다.

ex)

SELECT * FROM users 
WHERE username = 'test1' AND password = 'test1'

위와 같은 SQL 쿼리가 있다고 가정해 보자.
공격자는 사용자명 필드에 ' OR '1' = '1을 입력하면, 쿼리는 아래와 같이 변형된다.

SELECT * FROM users
WHERE username = '' OR '1' = '1' 
AND password = 'test1'

위처럼 변형되어 위 쿼리는 항상 참이 되어 모든 사용자 정보를 반환하게 된다.


SQL 인젝션의 유형

인밴드(In-band) SQL 인젝션

: 가장 일반적인 유형으로, 공격자가 동일한 통신 채널을 사용하여 공격을 수행하고 결과를 수집한다.

유니온 기반

: UNION 연산자를 사용하여 추가 결과를 가져온다.

오류 기반

: 데이터베이스 오류 메시지를 이요하여 정보를 추출한다.

추론(Inferential) SQL 인젝션

: 직접적인 데이터 전송이 없는 상태에서 공격자가 시스템의 동작을 관찰하여 정보를 추론한다.

불린(boolean) 기반

: 참 / 거짓 질문을 통해 정보를 추출한다.

시간 기반

: 쿼리 응답 시간을 관찰하여 정보를 추론한다.


일반적인 SQL 인젝션 기법

인증 우회

: 로그인 폼을 우회하여 무단 접근을 얻는다.

UNION 공격

: 추가 SELECT문을 삽입하여 다른 테이블의 데이터를 추출한다.

배치 쿼리

: 세미콜론을 사용하여 여러 쿼리를 한번에 실행한다.

주석 사용

: 인라인 주석 (--) 또는 블록 주석 (/* */)을 사용하여 쿼리의 나머지 부분을 무효화한다.


SQL 인젝션 예방법

1. 매개변수화된 쿼리 사용

: 사용자 입력을 SQL 문의 매개변수로 전달한다.

2. 입력 유효성 검사

: 모든 사용자 입력을 철저히 검증한다.

3. 이스케이프 처리

: 특수 문자를 적절히 이스케이프 처리한다.

4. 최소 권한 원칙

: 데이터베이스 사용자에게 필요한 최소한의 권한만 부여한다.

5. ORM 사용

: 객체-관계 매핑(ORF) 라이브러리를 사용하여 SQL 쿼리를 안전하게 생성한다.

6. 웹 애플리케이션 방화벽(WAF) 사용

: SQL 인젝션 공격을 탐지하고 차단한다.

SQL 인젝션 참고 사이트

0개의 댓글