Error-Based SQL Injection: 원리 및 방어 전략
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Error-Based SQL Injection: 원리 및 방어 전략

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

보안

대상자

  • 웹 개발자, 보안 전문가, 시스템 설계자
  • 중급 이상의 SQL 및 보안 지식을 가진 개발자 대상

핵심 요약

  • Error-Based SQL Injection은 데이터베이스 오류를 유도하여 민감 정보 추출 또는 블라인드 조건 판단을 가능하게 하는 공격 기법입니다.
  • CASE WHEN ... THEN 1/0 구문은 조건이 참일 때 오류를 강제로 발생시켜 HTTP 응답 차이로 조건 판단합니다.
  • SUBSTRING(Password, 1, 1)와 같은 함수를 활용해 패스워드 한 글자씩 추출 가능하며, MySQL의 extractvalue()PostgreSQL의 generate_series() 등 DB별 기술 사용.

섹션별 세부 요약

1. 조건부 오류 (Conditional Errors)

  • CASE WHEN (1=2) THEN 1/0 구문은 조건이 거짓일 때 오류를 발생시키지 않아 블라인드 SQLi 시 조건 판단 가능.
  • 1/0은 0으로 나누기 오류를 유발하며, ELSE 'a'은 안전한 값으로 처리.
  • HTTP 응답 차이 분석을 통해 조건의 참/거짓을 추론.

2. 오류를 통한 데이터 추출

  • array_to_string() 또는 extractvalue() 함수를 사용해 오류 메시지 내 데이터 누출 가능.
  • 예시: SELECT array_to_string(ARRAY(SELECT table_name FROM information_schema.tables), ', ')은 테이블 이름을 오류 메시지에 노출.
  • MySQL의 extractvalue(rand(), concat(0x3a, (SELECT database()), 0x3a))는 데이터베이스 이름을 오류로 반환.

3. DB별 기술적 차이

  • MySQL: extractvalue()updatexml() 함수 사용.
  • PostgreSQL: generate_series()array_to_string() 활용.
  • SQL Server: xp_cmdshell 등 시스템 함수 사용 가능.

4. 방어 전략

  • 사용자에게 세부 오류 메시지 노출 금지파라미터화 쿼리 사용 필수.
  • WAF(Web Application Firewall) 설정으로 SQLi 패턴 감지.
  • 로그 기록 시 클라이언트에게 오류 노출 금지보안 모니터링 강화.

결론

  • Error-Based SQL Injection은 오류 유도를 통해 민감 정보를 추출하는 고급 공격 기법으로, CASESUBSTRING 구문을 통해 조건 판단 및 데이터 추출 가능.
  • 방어를 위해 반드시 파라미터화 쿼리 사용, WAF 도입, 오류 메시지 마스킹이 필수적입니다.