Mysql에서 SQL Injection Filtering Bypass에 대해서 알아봅시다.
Whitespace Filtering Bypass
공백 문자 필터링은 %09, %0a, %0b, %0c, %0d, %a0, /**/ 를 사용하여 우회할 수 있습니다.
문자열 | 의미 |
---|---|
%09 | 수평 탭 |
%0a | Line Feed |
%0b | 수직 탭 |
%0c | 페이지 넘김 |
%0d | Carriage Return |
%a0 | 비중간 공백 |
/**/ | 주석문자 |
() 을 이용하여 우회할 수 있습니다.
String Filtering Bypass
문자열 필터링은 2진법, 16진법등 진법을 이용하여 우회가 가능합니다.
환경에 따라서는 싱글쿼터가 없이 x,b
만 넣어서 동작하는 경우가 있습니다.
또한 concat 을 이용하여 우회가 가능합니다.
Number Filtering Bypass
숫자가 필터링이 되어 있는 경우는 auto type cast 을 이용하여 우회가 가능합니다.
Blind SQL Injection
mysql에서 Blind SQL Injection을 수행하기 위해 일반적으로 자르기 함수substr, substring을 이용해서 문자열을 잘라서 가져옵니다.
해당 함수가 필터링이 되어 있을 경우 like, mid, left, right, lpad, rpad, reverse 등 함수를 이용할 수 있습니다.
조건 구문 SQL Injection
mysql에서는 조건 구문으로 if, case when, ifnull(), nullif() 을 이용할 수 있습니다.
Time based SQL Injection
mysql에서는 sleep, benchmark 등을 이용할 수 있습니다.
TIP
원하는 테이블 정보를 찾기 어려울 때 현재 사용중인 쿼리 SELECT info FROM information_schema.processlist를 조회할 수 있습니다.