SQL 인젝션: 작동 방식과 원리
일반적인 SQL 인젝션, 블라인드 SQL 인젝션, 대역 외 SQL 인젝션을 이해하고 매개변수화된 쿼리가 이를 방지하는 이유를 배워보세요.
SQL 인젝션: 작동 방식과 원리은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
SQL 인젝션이란 무엇인가
SQL 인젝션(SQLi)은 사용자 입력이 적절한 정제 없이 SQL query에 포함될 때 발생하며, 공격자가 query의 논리를 조작할 수 있게 합니다. 이는 가장 오래되고 피해가 큰 웹 취약점 중 하나입니다.
SQL 인젝션 작동 방식
로그인 양식은 다음 query를 실행합니다. SELECT * FROM users WHERE username='INPUT' AND password='INPUT'
공격자가 사용자 이름으로 ' OR 1=1--을 입력하면 query가 다음과 같이 바뀝니다. SELECT * FROM users WHERE username='' OR 1=1--' AND password='...' 이 query는 모든 사용자를 반환합니다.
SQL 인젝션 유형
SQLi의 변형은 다음과 같습니다.
- 대역 내 방식: 결과가 응답에 직접 반환됩니다(고전 방식, error 기반)
- 블라인드 불리언 방식: 직접적인 출력이 없으며 참/거짓 응답으로 데이터를 추론합니다
- 블라인드 시간 기반 방식: 응답 지연으로 데이터를 추론합니다(
SLEEP(5)) - 대역 외 방식: DNS/HTTP 요청을 통해 데이터가 유출됩니다
UNION 기반 인젝션
UNION 공격은 공격자가 제어하는 query의 결과를 덧붙입니다.
-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--error 기반 인젝션
error 메시지는 데이터베이스 구조를 드러냅니다. 공격자가 구문 오류를 일으키는 데이터를 입력하면, 그 결과인 error 메시지에 테이블 이름, 열 이름 또는 데이터베이스 버전이 노출됩니다. 운영 환경에서는 자세한 error 메시지를 비활성화하세요.
블라인드 SQL 인젝션
눈에 보이는 출력이 없을 때 공격자는 불리언 조건을 사용합니다.
-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--sqlmap: 자동화된 SQL 인젝션
sqlmap은 SQL 인젝션 탐지와 악용을 자동화합니다. 데이터베이스를 덤프하고 파일을 읽으며, DB 사용자에게 충분한 권한이 있으면 OS 명령도 execute할 수 있습니다.
sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dumpSQL 인젝션 방지: 매개변수화된 query
가장 중요한 방어 방법은 매개변수화된 query(준비된 문)입니다. 사용자 입력은 매개변수로 전달하며 query 문자열에 절대 이어 붙이지 않습니다.
# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])ORM 보호
ORM(SQLAlchemy, Hibernate, Sequelize)을 사용하면 일반적으로 안전한 추상화를 사용해 query를 구성하므로 SQL 인젝션을 방지할 수 있습니다. 그러나 문자열 보간을 사용하는 원시 query 메서드(execute(), query())는 ORM의 보호 기능을 우회합니다.
입력 검증 및 WAF
추가 방어 방법은 다음과 같습니다.
- 입력 유형(정수, 이메일)을 검증하고 허용 목록을 사용합니다
- 웹 애플리케이션 방화벽(WAF)으로 인젝션 패턴을 탐지합니다
- 최소 권한 DB 계정을 사용합니다(읽기 전용 query에서 DROP 사용 금지, UNION 사용 금지)
- 저장 프로시저를 사용합니다(노출을 줄일 수 있지만 완전한 해결책은 아닙니다)
SQL 인젝션의 영향
SQL 인젝션이 성공하면 데이터베이스 전체 덤프, 인증 우회, 데이터 수정 또는 삭제, 서버 파일 읽기(LOAD_FILE), 웹 셸 작성, xp_cmdshell(MSSQL)을 통한 OS 명령 실행 등이 발생할 수 있습니다.
빠른 확인: SQL 삽입 공격
SQL 삽입 공격에 대한 가장 중요한 방어 방법은 무엇인가요?
수업 요약
SQL 삽입 공격은 정제되지 않은 사용자 입력을 통해 데이터베이스 쿼리를 조작합니다. 공격 유형에는 고전형, 블라인드 부울형, 시간 기반, UNION 기반이 있습니다. 가장 중요한 방어 방법은 매개변수화된 쿼리입니다. 사용자 입력을 SQL에 절대 문자열로 이어 붙이지 마십시오. ORM은 신중하게 사용하고, 최소 권한의 데이터베이스 계정을 적용하며, 상세한 오류 메시지를 비활성화하십시오.
자주 묻는 질문
“SQL 인젝션: 작동 방식과 원리” 강의는 무료인가요?
네 — “SQL 인젝션: 작동 방식과 원리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“SQL 인젝션: 작동 방식과 원리”에서 뭘 배우나요?
일반적인 SQL 인젝션, 블라인드 SQL 인젝션, 대역 외 SQL 인젝션을 이해하고 매개변수화된 쿼리가 이를 방지하는 이유를 배워보세요. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“SQL 인젝션: 작동 방식과 원리” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- SQL 인젝션: 작동 방식과 원리
- 사이트 간 스크립팅(XSS)
- 사이트 간 요청 위조(CSRF)
- 보안 구성 오류와 노출된 서비스