Bypass WAF
- Web Application Firewall (WAF)는 웹 애플리케이션에 특화된 방화벽임
- 각 DBMS 별로 방화벽을 우회하기 위한 방법이 있음
대소문자 검사 미흡
탐지 과정 미흡
문자열 검사 미흡
- admin 키워드의 포함 여부를 검사하는 경우
mysql> SELECT reverse('nimda'), concat('adm','in'), x'61646d696e', 0x61646d696e;
reverse와 concat 함수를 이용해 문자열을 뒤집고, 이어붙이며, 16진수를 사용해 임의의 문자열을 완성함
연산자 검사 미흡
- 연산자를 검사하는 경우 다음과 같은 방법으로 우회할 수 있음
mysql> select 1 || 1;
이 외에도 ^, =, !=, %, /, *, &, &&, |, ||, >, <, XOR, DIV, LIKE, RLIKE, REGEXP, IS, IN, NOT, MATCH, AND, OR, BETWEEN, ISNULL 등의 연산자를 사용할 수 있음
공백 탐지
MySQL 우회 기법
문자열 검사 우회
mysql> select 0x6162, 0b11000010110010;
mysql> select char(0x61, 0x62);
mysql> select concat(char(0x61), char(0x62));
mysql> select mid(@@version,12,1);
공백 검사 우회
mysql> select
-> 1;
mysql> select1;
주석 구문 실행
PostgreSQL 우회 기법
문자열 검사 우회
postgres=> select chr(65);
postgres=> select concat(chr(65), chr(66));
postgres=> select substring(version(),23,1);
공백 검사 우회
postgres=> select
1;
postgres=> select1;
MSSQL 우회 기법
문자열 검사 우회
> select char(0x61);
> select concat(char(0x61), char(0x62));
> select substring(@@version, 134, 1);
공백 검사 우회
> select
1;
> select1;
SQLite 우회 기법
문자열 검사 우회
sqlite> select char(0x61);
sqlite> select char(0x61)||char(0x62);
공백 검사 우회
sqlite> select
...> 1;
sqlite> select1;
구문 검사 우회