✅ 1. AND / OR (논리 연산자)
SQL에서는 조건을 연결할 때 논리 연산자를 사용합니다.
-
AND→ 두 조건이 모두 참(True)일 때만 전체가 참 -
OR→ 둘 중 하나라도 참이면 전체가 참
이 두 개는 로그인 우회와 같은 인젝션 공격에서 매우 중요한 역할을 합니다.
🔹 1) AND 사용 예시 (조건을 강제로 참/거짓으로 만드는 용도)
✔ 공격자 입력
비밀번호에 아래처럼 입력한다고 가정합니다:
DB로 전달되는 SQL은 이렇게 됩니다:
'1'='1' 은 무조건 참(True)이므로
공격자는 조건을 조작하여 원하는 결과를 유도할 수 있습니다.
반대로 '1'='2' 같은 “거짓을 만드는” 방식으로도 쿼리 결과 확인이 가능합니다.
🔹 2) OR 사용 예시 (로그인 완전 우회에 쓰임)
✔ 공격자 입력
비밀번호에 다음을 넣었다고 가정합니다:
전달되는 SQL:
OR '1'='1' 때문에 전체 WHERE 절은 항상 True로 해석됩니다.
즉,
비밀번호가 틀려도 로그인 성공
이런 식으로 login bypass가 이루어집니다.
✅ 2. -- (SQL 주석 문법, MySQL/Oracle/SQL Server 공통)
-- 는 SQL에서 **주석(Comment)**을 의미합니다.
뒤에 오는 모든 내용은 SQL로 처리되지 않고 무시됩니다.
예:
🔹 공격에서 어떻게 사용되는가?
✔ 공격자 입력:
DB로 전달되는 최종 SQL:
-- 뒤의 ' 문자는 완전히 무시됩니다.
이 말은 곧,
쿼리 뒤쪽의 문법 오류를 모두 지워버릴 수 있다는 뜻
→ 비밀번호 비교 구문(AND password='...') 자체를 무력화
→ WHERE 조건을 공격자가 원하는 대로 재구성 가능
✅ 3. # (MySQL 전용 주석문)
# 역시 주석을 의미하며, MySQL에서만 동작합니다.
예:
🔹 공격에서 사용하는 방식
공격자가 다음처럼 넣으면,
SQL은 이렇게 됩니다:
# 뒤는 전부 주석 처리되기 때문에
남아 있는 ' 같은 문법 오류를 전부 무시하게 됩니다.
⭐ 핵심 요약
| 기호 | 의미 | 공격에서 쓰는 목적 |
|---|---|---|
| AND | 논리 AND | 조건을 정밀하게 조작해서 True/False 테스트 |
| OR | 논리 OR | 비밀번호 없이 로그인 우회, 조건 항상 True 만들기 |
| -- | SQL 주석 | 뒤의 쿼리를 모두 무시해서 문법 오류 제거 (인젝션 성공률 ↑) |
| # | MySQL 주석 | --와 동일하지만 MySQL 전용 주석 |
🎯 공격 시 실제 패턴 예시
✔ 로그인 우회(가장 유명)
or
✔ Blind SQL 인젝션 AND 기반
✔ Boolean 기반