SQL INJECITON WAF

코딩 파인애플·2026년 6월 4일

SQL INJECTION

목록 보기
3/5
post-thumbnail

안녕하십니까 코딩 파인애플입니다
이번에는 SQL INJECTION WAF에 관해 알아보겠습니다.

SQL INJECTION WAF

SQLi WAF는 SQL Injection(SQL 인젝션)
공격을 막아주는 웹 방화벽을 의미합니다.

SQLi: SQL Injection (데이터베이스를 공격하는 기법)
WAF: Web Application Firewall (웹 애플리케이션 방화벽)
보편적으로 패턴 매칭이라는 정적인 방법을 통해 거릅니다
예, 쉽게말해서 그냥 블랙리스트를 따로 만드는 겁니다.

keywords = ['Kilroy', 'was', 'here', 'and', 'or']

이런 식으로 따로 블랙리스트를 만들어 만일 사용자가 악의적인 쿼리문을 집어넣게 된다면 필터링에 걸려서 방지하는 겁니다.

하지만 블랙리스트를 만들어도 특정한 방법을 통한 쌀먹도 가능합니다

우우우 쌀쌀쌀

키워드 필터링 우회

특정한 키워드 필터링을 우회할 때 쓰입니다
예를 들어 'UNION','SELECT','OR' 따위 등이 필터링 된다면

그냥 'uNiOn'이나 'SelEcT', 'oR' 이딴 것들로 대소문자를 구분하지 않는 특성을 이용해 우회가 가능합니다

헌데 만일 .lower나 .upper가 있다면 그냥 대/소문자 중 하나로 완전히 퉁치겠다는 뜻이니 씨알도 안먹힙니다.

'or' 이나 'and'의 경우
or은 파이프 두 개 (||) , and는 앰퍼샌드 두 개 (&&) 로 대체가 가능합니다.

그 외에도 '='가 차단된다면
'='은 a like b 등의 like함수를 혹은 a in ('b')의 in 함수
쓰면 됩니다.

마지막으로 concat 함수를 통해서도 우회가 가능합니다
SELECT password... \rightarrow SELECT CONCAT('pass', 'word')...

공백 및 특수문자 필터링 우회

말 그대로 공백 (' ')이 우회될 때 쓰입니다

주석을 이용해서 단어를 쪼개거나
UNION SELECT \rightarrow UNION//SELECT
UNION SELECT \rightarrow UNION/**/SELECT

괄호를 활용해서 같은 의미의 문장을 만들거나
SELECT column FROM table \rightarrow SELECT(column)FROM(table)

공백 대체 문자를 사용하면 됩니다
주로 탭(%09), 줄바꿈(%0a), 캐리지 리턴(%0d), 혹은 더하기 기호(+)를 사용해 공백이 필요한 사이사이에 낉이면 됩니다.

문자 인코딩을 통한 우회

문자를 인코딩해서 우회합니다

문자나 키워드를 %HEX 형태로 변환하거나
' OR 1=1 -- \rightarrow %27%20OR%201%3D1%20--

유니코드 및 다중 바이트 인코딩을 통해서 변환합니다
s \rightarrow %u0073, e \rightarrow %u0065
SELECT \rightarrow %u0073%u0065%u006c%u0065%u0063%u0074

+만일 참값 (1=1) 이 막힌다면 True나 2-1, 0+1을 써보시길 바랍니다 mysql 내부적으로는 1=True 로 취급되기에 가능합니다

재귀적 키워드 구성을 이용한 우회

만일 WAF가 특정 키워드를 탐지했을 때, 단순히 그 단어를 공백이나 빈 문자("")로 치환하는 취약한 로직을 가졌을 경우 사용하는데

SELSELECTECT \rightarrow 중간 SELECT가 치환 양옆의 SEL+ECT가 붙어 SELECT가 됨.
UNIUNIONON, anandd, oandr 이런 식으로 우회가 가능합니다.


이 외에도 더 많은 SQLI WAF 우회가 있기에 이 글은 앞으로도 업데이트될 예정입니다.

한번 배웠던 내용을 실습해봅시다

이상으로 글을 마치겠습니다 감사합니다

profile
안녕하떼요 취미로 콤푸타 배우는 고든학교 6학년 유치원생이빈다.

0개의 댓글