이 포스트는 인프런의 성공적인 SQL 인젝션 공격을 위한, SQL 기본 문법 강의를 보고 작성하였습니다!
SQL 의 연산자는 기존에 다른 언어들과 비슷한 형식이다.
0. 연산자와 피연산자
1. 산술연산자
(1) 종류: +,-,*,/
ex) select 절을 이용해서 출력가능.
select 1+4;
(2) 산술 연산자와 injection간의 관계
: seq에 숫자를 받는 경우.
<코드>
select * from member where seq=6-1;
2. 비교 연산자(관계)
(1) 종류: < , < =, >=, !=, ~, =
3.1 논리 연산자
(1) 종류:
AND, OR, NOT
*우선순위: NOT → AND → OR
3.2 비트 논리 연산자
(1) 종류:
AND, OR, NOT (논리연산자와 같다)
DBMS | AND | OR | XOR |
ORACLE | bitand(피연산자1, 피연산자2) | X | X |
MSSQL | 피연산자 & 피연산자2 | 피연산자1 | 피연산자2 | 피연산자1 ^ 피연산자2 |
MYSQL | 피연산자 & 피연산자2 | 피연산자1 | 피연산자2 | 피연산자1 ^ 피연산자2 |
★비트 논리 연산자를 쓰는 이유: 이진연산이 십진수 연산보다 빠르기 때문.
(2) 특징
① ORACLE 은 bitand함수를 이용 → OR, XOR 연산도 bitand를 이용해서 표현
② 비트 연산이기 때문에 비트각각으로 따져줘야함.
(3) 비트 논리 연산자와 injection간의 관계: blind base 를 이용한 sql injection 비트 단위의 공격이 많이 사용됨.
4. 연결 연산자
(1) 종류
DBMS | 연산자 | 표현식 | 예시 |
ORACLE | || | 피연산자1 || 피연산자2 | 'TE' || 'ST' |
MSSQL | + | 피연산자1 + 피연산자2 | 'TE' + 'ST' |
MYSQL | 공백 | 피연산자1 공백 피연산자2 | 'TE' 공백 'ST' |
★DBMS 공통적으로 CONCAT(문자열1, 문자열2...) 함수 사용이 가능하다
∨ mysql 에서는 문자열 형태이면 공백이 두개를 붙여주는 역할을 함.
▶concat 함수를 사용한 경우,
5. IN 연산자
(1) 형식
ex)
SELECT name, email, FROM member WHERE id in('adimin','guest');
∨ or 연산자를 계속 사용한 효과가 나옴.
∨ 서브쿼리도 넣을 수 있다.
↔ NOT IN :제외한 나머지를 출력
6. LIKE 연산자
: 문자 패턴을 이용하는 연산자.
(1) 종류
와일드 카드 | 의미 | 예시 |
% | 모든 문자 | id like 'ad%' |
_ | 하나의 문자 | id like 'admi_' |
(2) 사용 예시:
select * from member where name like '%admin%';
'WEB > SQL' 카테고리의 다른 글
[프로그래머스] SQL 고득점 Kit 문제 풀이 (0) | 2021.05.26 |
---|---|
[SQL INJECTION] SQL 기본 문법 정리 Ⅴ (예제) (0) | 2020.08.23 |
[SQL INJECTION] SQL 기본 문법 정리 Ⅳ (함수, 조건문) (0) | 2020.08.22 |
[SQL INJECTION] SQL 기본 문법 정리 Ⅱ (0) | 2020.08.22 |
[SQL INJECTION] SQL 기본 문법 정리 Ⅰ (0) | 2020.08.21 |