SQL Injection(SQLi)은 웹 애플리케이션에서 입력값을 통해 데이터베이스 쿼리를 조작하는 공격 기법이야.
쉽게 말하면 **“웹사이트가 입력값을 그대로 DB 쿼리에 넣는 실수를 이용해 공격자가 원하는 명령을 실행하는 것”**이라고 보면 돼.
🔹 SQL Injection 개념
- 공격 원리
- 웹페이지에서 사용자가 입력한 데이터를 DB 쿼리에 직접 연결할 때 발생
- 예: 로그인 폼에서 username과 password를 입력받아 DB에서 확인
- 공격자가 input_user에 ' OR 1=1 -- 를 입력하면
- 결과적으로 조건이 항상 참이 되어 로그인 우회 가능
- 공격 목표
- 인증 우회 (로그인 탈취)
- 민감 정보 조회 (개인정보, 계좌 정보 등)
- 데이터 삭제·변경·삽입
- 서버 내부 명령 실행, 파일 접근 가능(Advanced SQLi)
- SQL Injection 종류
| Classic / In-band | 결과가 웹페이지에 그대로 나타나는 공격 |
| Error-based | DB 오류 메시지를 이용해 정보 획득 |
| Blind SQLi | 결과가 안 나와도 참/거짓 기반으로 정보 추출 |
| Time-based | DB 응답 시간으로 참/거짓 판별 |
| Out-of-band | 다른 채널(메일, DNS 등)로 정보 탈취 |
- 실무 방어 방법
- Prepared Statement / Parameterized Query 사용
- 입력값 검증(Input Validation)
- 최소 권한 DB 계정 사용
- 오류 메시지 노출 금지
- WAF 규칙 적용 (SQLi 탐지/차단)
- 정기적인 취약점 스캔 및 모니터링
🎯 한 문장 요약
SQL Injection = 웹 입력값을 조작해 데이터베이스 쿼리를 변조함으로써 정보 탈취, 조작, 권한 우회 등을 수행하는 공격.
공격 예시
아래는 SQL Injection 공격 예시 + 실제 Payload + WAF에서 어떻게 차단하는지를 실무자 기준으로 깔끔하게 정리한 내용이야.
(보안관제·WAF 담당자라면 바로 현업에서 쓸 수 있어.)
🔥 1. SQL Injection 공격 원리 (그림 개념)
예: 로그인 화면에서
ID: ' OR 1=1 --
PW: 아무거나
→ 서버는 아래처럼 쿼리를 만듦
OR 1=1 때문에 항상 참 → 로그인 우회 성공
🔥 2. 실제 공격 Payload 예시
✔️ (1) 로그인 우회
✔️ (2) 데이터 추출 (테이블/컬럼 이름 획득)
✔️ (3) Error-based SQLi
DB 오류 메시지를 이용해 정보를 역으로 획득
✔️ (4) Blind SQLi (TRUE/FALSE 기반)
✔️ (5) Time-based Blind SQLi
응답 시간으로 데이터 추출
DB가 5초 후 응답 → 조건이 참
🔥 3. 공격 시 WAF 로그 예시 (실무 기준)
아래는 WAF에서 흔하게 잡히는 패턴들:
또는 이런 요청 URL:
→ 패턴 매칭, 시그니처, 머신러닝 룰로 차단됨.
🔥 4. WAF에서 막는 방법 (실무 버전)
✔️ 1) 시그니처 기반 차단
- ' OR 1=1
- UNION SELECT
- SLEEP(
- updatexml(
등 SQLi 키워드 탐지 시 차단
✔️ 2) 입력값 검증(Normalization)
URL 인코딩 등 우회 공격 방지
예:
%27 OR 1%3d1 -- → ' OR 1=1 -- 로 정규화 후 차단
✔️ 3) 파라미터 무결성 체크
파라미터 형태가 평소와 다른 경우 차단
예: 숫자 파라미터에 문자열 삽입
✔️ 4) ML 기반 이상 행위 탐지
- 특정 IP에서 짧은 시간에 수백 개 SQL 시도
- User-Agent가 SQLmap
- Union select 반복 발생
→ 이상 행위로 판단해 자동 차단
🔥 5. 개발 단계에서의 방어 코드
✔️ Prepared Statement 예시 (PHP)
✔️ Java (Spring)
→ 입력값이 SQL로 해석되지 못함
→ SQL Injection 완전 차단
🎯 한 문장 요약
SQL Injection = 사용자가 입력한 값을 SQL 쿼리로 잘못 연결한 취약점을 이용해 DB를 조작하는 공격이며, WAF와 개발 보안이 함께 대응해야 완벽히 방어 가능하다.
'2. 보안 > 2. 보안 관제' 카테고리의 다른 글
| [보안_GPT] File Upload Vulnerability 이란? (0) | 2025.11.14 |
|---|---|
| [보안_GPT] Command Injection 이란? (0) | 2025.11.14 |
| [보안_GPT] CSRF(Cross-Site Request Forgery)란? (0) | 2025.11.14 |
| [보안_GPT] 크로스 사이트 스크립트(XSS)란? (0) | 2025.11.14 |
| [보안_GPT] 보안 관제란? (0) | 2025.11.14 |