로그인 회원가입
SQL INJECTION 논리 연산자 및 주석
normaltic 짝사랑남 2025-11-17 17:08:23

1. AND / OR (논리 연산자)

SQL에서는 조건을 연결할 때 논리 연산자를 사용합니다.

  • AND → 두 조건이 모두 참(True)일 때만 전체가 참

  • OR → 둘 중 하나라도 참이면 전체가 참

이 두 개는 로그인 우회와 같은 인젝션 공격에서 매우 중요한 역할을 합니다.


🔹 1) AND 사용 예시 (조건을 강제로 참/거짓으로 만드는 용도)

✔ 공격자 입력

비밀번호에 아래처럼 입력한다고 가정합니다:

' AND '1'='1

DB로 전달되는 SQL은 이렇게 됩니다:

SELECT * FROM users WHERE username='admin' AND password='' AND '1'='1';

'1'='1' 은 무조건 참(True)이므로
공격자는 조건을 조작하여 원하는 결과를 유도할 수 있습니다.

반대로 '1'='2' 같은 “거짓을 만드는” 방식으로도 쿼리 결과 확인이 가능합니다.


🔹 2) OR 사용 예시 (로그인 완전 우회에 쓰임)

✔ 공격자 입력

비밀번호에 다음을 넣었다고 가정합니다:

' OR '1'='1

전달되는 SQL:

SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1';

OR '1'='1' 때문에 전체 WHERE 절은 항상 True로 해석됩니다.

즉,

비밀번호가 틀려도 로그인 성공

이런 식으로 login bypass가 이루어집니다.


2. -- (SQL 주석 문법, MySQL/Oracle/SQL Server 공통)

-- 는 SQL에서 **주석(Comment)**을 의미합니다.
뒤에 오는 모든 내용은 SQL로 처리되지 않고 무시됩니다.

예:

SELECT * FROM users; -- 이것은 주석입니다

🔹 공격에서 어떻게 사용되는가?

✔ 공격자 입력:

' OR '1'='1' --

DB로 전달되는 최종 SQL:

SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1' -- ';

-- 뒤의 ' 문자는 완전히 무시됩니다.

이 말은 곧,

쿼리 뒤쪽의 문법 오류를 모두 지워버릴 수 있다는 뜻

→ 비밀번호 비교 구문(AND password='...') 자체를 무력화
→ WHERE 조건을 공격자가 원하는 대로 재구성 가능


3. # (MySQL 전용 주석문)

# 역시 주석을 의미하며, MySQL에서만 동작합니다.

예:

SELECT * FROM users; # 이것도 주석

🔹 공격에서 사용하는 방식

공격자가 다음처럼 넣으면,

' OR '1'='1' #

SQL은 이렇게 됩니다:

SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1' # ';

# 뒤는 전부 주석 처리되기 때문에
남아 있는 ' 같은 문법 오류를 전부 무시하게 됩니다.


⭐ 핵심 요약

기호의미공격에서 쓰는 목적
AND논리 AND조건을 정밀하게 조작해서 True/False 테스트
OR논리 OR비밀번호 없이 로그인 우회, 조건 항상 True 만들기
--SQL 주석뒤의 쿼리를 모두 무시해서 문법 오류 제거 (인젝션 성공률 ↑)
#MySQL 주석--와 동일하지만 MySQL 전용 주석

🎯 공격 시 실제 패턴 예시

✔ 로그인 우회(가장 유명)

admin' OR '1'='1' --

or

admin' OR '1'='1' #

✔ Blind SQL 인젝션 AND 기반

admin' AND LENGTH(database())=5 --

✔ Boolean 기반

' OR 1=1 -- ' AND 1=0 --
리스트 글삭제 글수정

댓글 0
등록하기