SQL 연산자

snovvy·2024년 8월 4일

SQL-Injection

목록 보기
5/9

SQL 연산자 종류


[출처] : 인프런-성공적인 SQL 인젝션 공격을 위한 기본 문법

산술 연산자

  • + : 더하기, 우선순위(2)
  • - : 빼기, 우선순위(2)
  • * : 곱하기, 우선순위(1)
  • / : 나누기, 우선순위(1)
입력
select 1+4
출력
5
입력
select 1+4*2;
출력
9
select * from member where seq=2+1;

비교 연산자

  • > : 크다
  • >= : 크거나 같다
  • < : 작다
  • <= : 작거나 같다
  • = : 같다
  • <>, != : 같지 않다
select * from member where seq > 2;

시퀀스 값이 2보다 큰 값들이 모두 출력

논리 연산자

  • NOT : 부정, 우선순위(1)
  • AND : 그리고(논리곱), 우선순위(2)
  • OR : 또는(논리합), 우선순위(3)
select * from member seq=1 and seq=5;

1과 5를 동시에 만족하는 시퀀스 값이 없음

select * from member seq=1 or seq=5;

시퀀스 값이 1이나 5인 경우를 고름

비트 논리 연산자(MYSQL)

블라인드 베이스의 공격에서 자주 사용됨

  • AND : 피연산자1 & 피연산자2
  • OR : 피연산자1 | 피연산자2
  • XOR : 피연산자1 ^ 피연산자2
  • XOR -> 1 xor 2 (1이 T, 2가 F 이면 참, 둘 중 하나만 참)
입력
select 1 & 1;
출력
1
입력
select 2 & 1;
출력
0

2 -> 1 0
1 -> 0 1
0 0 반환
그래서 0이 출력됨

연결 연산자(MYSQL)

  • 공백 : 피연산자1 공백 피연산자2

    'te' 공백 'st'

입력
select 'te' 'st'
출력
te
test
select * from member where name='gue' 'st';
  • concat(문자열1, 문자열2...) : 문자열 1, 2... 를 붙여줍니다
입력
select concat('cre', 'hack', 'tive');
출력
crehacktive

IN 연산자

목록 안에 값중 일치하는 데이터를 출력하고 or 연산자를 연속적으로 사용하는 것과 동일한 결과를 얻을 수 있습니다.

  • IN 연산자 사용
  • [컬럼/값] IN (값1, 값2...)
SELECT name, email FROM member WHERE id in ('admin', 'guest')
id = 'admin' or id = 'guest'

id가 admin인 레코드와 guest인 레코드를 출력하라는 의미가 됩니다.

  • NOT IN 연산자 사용
  • [컬럼 값] NOT IN (값1, 값2...)
SELECT name, email FROM member WHERE id not in ('admin', 'guest')

id가 admin인 레코드와 guest인 레코드를 제외한 나머지를 출력하라는 의미가 됩니다.

Like 연산자

  • % : 모든 문자

    id like 'ad%'

select * from member where name like '%admin%';
  • _ : 하나의 문자

    id like 'admi_'

select * from member where name like 'gu_st';

0개의 댓글