Oh! JUN

ORDER BY , UNION 구문 실행 확인 실습 본문

웹 해킹/SQL Injection

ORDER BY , UNION 구문 실행 확인 실습

Kwon Oh! JUN 2022. 8. 25. 19:12

# MYSQL  실습

select * from tb_board;


select * from tb_board order by 1; 정상 출력 
select * from tb_board order by 2; 정상 출력
select * from tb_board order by 3; 정상 출력
select * from tb_board order by 4; 정상 출력
select * from tb_board order by 5; 정상 출력
select * from tb_board order by 6; 정상 출력
select * from tb_board order by 7; 정상 출력
select * from tb_board order by 8; 에러 발생
select * from tb_board order by 9; 에러 발생
select * from tb_board order by 10; 에러 발생
select * from tb_board union all select null, null, null, null, null, null, null; 정상 출력

- order by 8에서 에러가 발생했다.

- 에러가 바로 발생했다고 해서 거기서 멈추지 말고 두번정도 더 실행해보는걸 추천한다.

- 첫번째 발생에러가 대용량 데이터 타입 때문에 발생했을수도 있으니까 그 다음에 정상 출력이 될수도 있다.

- 대용량 데이터 타입이 있으면 union으로 안되니까 처음부터 union all 사용하는것 추천한다.


# ORACLE 실습

select * from C##CREHACKTIVE.TB_BOARD;


 

select * from tb_board order by 1; 정상 출력 
select * from tb_board order by 2; 정상 출력
select * from tb_board order by 3; 에러 발생(대용량 데이터 타입 CLOB)
select * from tb_board order by 4; 정상 출력
select * from tb_board order by 5; 정상 출력
select * from tb_board order by 6; 정상 출력
select * from tb_board order by 7; 정상 출력
select * from tb_board order by 8; 에러 발생
select * from tb_board order by 9; 에러 발생
select * from tb_board order by 10; 에러 발생
select * from tb_board union all select null, null, null, null, null, null, null from dual; 정상 출력

- order by 3에서 오류가 발생했다. 

- 멈추지 말고 order by 4도 시도해봤는데 정상 출력이 되었다. 

- order by 7까지 정상 출력이 되고 8부터 에러가 발생했고 그 이후로 에러가 계속 발생했다.

- 결과적으로 order by 3은 대용량 데이터 타입으로 발생한 에러, order by 8부터 컬럼 개수 오류로 발생한 에러이다.

- 이와 같은 사례로 MYSQL 실습에서 에러가 발생했다고 멈추면 안된다.

★ Oracle과 Mssql은 Mysql과 달리 select null 뒤에 from문을 반드시 작성해야한다.

 

select column_name, data_type from all_tab_columns where table_name='TB_BOARD';

- 3번째 컬럼이 CLOB 대용량 데이터 타입인걸 확인할 수 있다.


※ 주의할 점

create table test (idx NUMBER(2), val1 VARCHAR2(10), val2 CLOB);
insert into test values(1, 'test', 'test2test');
select * from test;

select * from test order by 1; 정상 출력 
select * from test order by 2; 정상 출력
select * from test order by 3; 에러 발생(대용량 데이터 타입 CLOB)
select * from test order by 4; 에러 발생
select * from test order by 5; 에러 발생
select * from test order by 6; 에러 발생
select * from test union all select null, null from dual; 에러 발생
select * from test union all select null, null, null from dual; 정상 출력

- 해당 컬럼의 개수는 3개인데 3번째 컬럼이 대용량 데이터 타입이어서 에러 발생을 하게된다.

- 그 이후로는 컬럼 개수가 틀리니까 에러가 발생을 하게 되면서 정확한 컬럼의 개수를 확인할 수 없는데 이런 경우 union all select을 사용할때 null을  2개에서 하나씩 추가해보는 방법이 있다.