✅ 1. 정의
SQL Injection은 공격자가 웹 애플리케이션의 입력값에 악의적인 SQL 구문을 삽입하여,
애플리케이션이 이를 데이터베이스 명령어로 실행하도록 유도하는 취약점이다.
이 취약점을 통해 공격자는 데이터 조회, 수정, 삭제, 인증 우회까지 시도할 수 있다.
- 발생 원인: 입력값을 SQL 쿼리에 직접 연결
- 주요 영향:
- 데이터베이스 구조/내용 유출
- 인증 우회
- 관리자 권한 탈취
- 전체 테이블 삭제 등의 치명적 피해
🎯 2. 공격 목적
- 데이터베이스 이름 및 구조 수집
- 테이블 및 컬럼 정보 파악
- 민감 데이터 탈취 (ID/PW, 개인정보 등)
- 웹 애플리케이션 제어 권한 확보
🎬 3. 실습 시나리오
💻 시나리오 개요:
- 게시판의 검색 기능 또는 주소창 파라미터를 통해 SQL 인젝션 공격 시도
- 주로 UNION SELECT, ORDER BY, --, ' 등의 SQL 예약어를 조합
- 단계적으로 칼럼 수 파악 → DB명 → 테이블명 → 컬럼명 → 데이터 추출
📌 실습 단계 및 예시
1️⃣ 칼럼 수 파악
1. 칼럼수 DB : test' order by n # //칼럼 수를 알아냄. n까지 잘 출력되었으나 n+1개에서 나오지 않는다면 칼럼개수는 n개
![]() |
![]() |
2. DB이름 확인 : test' union select database(),2,3,4,5,6...n #
![]() |
🛡️ 4. 보안 대응방안
✅ 특수문자 및 SQL 키워드 필터링
- ', ", ;, --, /*, #, %, =, +, (, ) 등 SQL 관련 기호 차단
- UNION, SELECT, INSERT, UPDATE, DELETE, OR, AND 등 SQL 예약어 필터링
✅ 입력값 길이 제한
- 검색어, 파라미터 등 사용자 입력값에 대해 최대 길이 제한 설정
✅ 오류 메시지 노출 방지
- SQL 오류가 웹페이지에 그대로 노출되지 않도록 설정
- 공용 에러 페이지로 리다이렉션 처리
✅ 서버 측 검증 필수
- 클라이언트 측 필터링은 우회 가능 → 반드시 서버 스크립트에서 필터링 및 검증 구현
- 가능한 경우 Prepared Statement(예: PDO, MyBatis, ORM 등) 사용
📎 5. 관련 정보
- CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
- OWASP Top 10: A1 - Injection (대표적인 사례)
'웹 모의해킹' 카테고리의 다른 글
운영체제 명령 실행 취약점 (0) | 2025.05.30 |
---|---|
버퍼 오버플로우 취약점 (0) | 2025.05.30 |
프록시 설치(Fiddler Classic) (0) | 2025.05.30 |