상세 컨텐츠

본문 제목

SQL Injection

웹 해킹의 개념

by ser-ser 2024. 11. 14. 19:29

본문

SQL 인젝션(SQL Injection)은 웹 애플리케이션에서 사용자 입력을 제대로 처리하지 않을 때 발생하는 보안 취약점입니다. 이를 악용하면 공격자가 데이터베이스에 악의적인 SQL 문을 주입하여 데이터 유출이나 조작 등의 심각한 문제를 일으킬 수 있습니다.

 

 

 

예시로 이해하기:

 

주어진 SQL 문의 기본 구조는 다음과 같습니다

SELECT * FROM users WHERE user_id = '_____'

여기서 _____ 부분에 사용자의 입력이 들어갑니다.
일반적으로 사용자가 입력한 user_id를 데이터베이스에서 검색하는 용도입니다.

 

예를 들어, 사용자가 doldol을 입력하면 SQL 문은 다음과 같이 완성됩니다

SELECT * FROM users WHERE user_id = 'doldol'

 

 

하지만 공격자가 악의적인 입력을 넣으면 어떻게 될까요?


만약 사용자가 다음과 같은 문자열을 입력했다고 가정해봅시다

doldol' OR '1'='1

 

doldol' OR '1'='1

SELECT * FROM users WHERE user_id = 'doldol' OR '1'='1'

 

이렇게 되면 조건문 '1'='1'이 항상 참이므로,users 테이블의 모든 사용자 정보를 가져오게 됩니다.
이는 원래 의도와 다르게 모든 데이터에 접근하는 결과를 낳습니다.

 

왜 작은따옴표(')를 추가로 넣지 않을까요?

기본 SQL 문에서 이미 user_id를 작은따옴표로 감싸고 있으므로,
입력할 때 앞뒤에 작은따옴표를 추가로 넣을 필요가 없습니다.
만약 추가로 작은따옴표를 넣으면 문법 오류가 발생하거나 의도한 대로 동작하지 않을 수 있습니다.

 

SQL 인젝션을 이해하는 핵심 포인트

  • 입력 값의 신뢰성: 사용자로부터 입력받은 값은 신뢰할 수 없으므로 항상 검증해야 합니다.
  • SQL 문 조작 가능성: 입력 값이 그대로 SQL 문에 포함되면, 공격자가 SQL 문의 구조를 변경할 수 있습니다.
  • 보안 취약점 발생: 이런 취약점을 통해 데이터베이스의 데이터가 유출되거나 조작될 수 있습니다.

 

공격기법

1. OR 연산자를 활용한 SQL 인젝션

OR 연산자는 두 조건 중 하나라도 참이면 전체 조건이 참이 되도록 합니다. 이를 악용하여 인증 절차나 데이터 조회를 우회할 수 있습니다.

 

기본 SQL 문

SELECT * FROM users WHERE user_id = '_____'

 

공격자가 입력한 값

' OR '1'='1

 

완성된 SQL 문

SELECT * FROM users WHERE user_id = '' OR '1'='1'

 

 

설명

  • 첫 번째 작은따옴표 '로 기존 문자열을 닫고, OR '1'='1' 조건을 추가합니다.
  • '1'='1'은 항상 참이므로, users 테이블의 모든 레코드가 반환됩니다.

 

 

2. AND 연산자를 활용한 SQL 인젝션

AND 연산자는 두 조건이 모두 참이어야 전체 조건이 참이 됩니다. 이를 이용해 특정 조건을 만족하는 데이터를 필터링하거나, 존재 여부를 파악할 수 있습니다.

 

공격자가 입력한 값

doldol' AND '1'='1

 

 

완성된 SQL 문

SELECT * FROM users WHERE user_id = 'doldol' AND '1'='1'

 

설명

  • user_id가 doldol이고, '1'='1'인 레코드를 찾습니다.
  • '1'='1'은 항상 참이므로, 기존 조건에 영향을 주지 않습니다.
  • 하지만 추가적인 조건을 붙여 복잡한 쿼리를 만들 수 있습니다.

 

 

3. 주석 문자 # 또는 --를 활용한 SQL 인젝션

# 또는 --는 SQL에서 주석을 시작하는 문자입니다. 이를 이용해 쿼리의 일부를 무력화시킬 수 있습니다.

 

공격자가 입력한 값

doldol'#

 

완성된 SQL 문

SELECT * FROM users WHERE user_id = 'doldol'#

 

 

설명:

  • # 뒤의 내용은 주석 처리되어 무시됩니다.
  • 이러한 공격을 SQL 인젝션 기반의 SQL 명령 실행이라고 합니다.

 

'웹 해킹의 개념' 카테고리의 다른 글

Error Based SQL Injection  (0) 2024.12.03
UNION  (0) 2024.11.26
Burp Suite를 활용한 Web Proxy Tool의 활용과 실습  (2) 2024.11.07
JWT  (0) 2024.11.04
로그인 세션 유지  (0) 2024.11.01

관련글 더보기