Oh! JUN
ORDER BY , UNION 구문 실행 확인 실습 본문
# 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개에서 하나씩 추가해보는 방법이 있다.
'웹 해킹 > SQL Injection' 카테고리의 다른 글
ORACLE UNION-BASED 공격 실습 (0) | 2022.08.27 |
---|---|
MYSQL UNION-BASED 공격 실습, 목록과 상세보기의 기능적 차이 (0) | 2022.08.26 |
UNION 공격 검증 (0) | 2022.08.25 |
UNION과 UNION ALL 차이점 실습 (0) | 2022.08.24 |
아이디 중복 조회 기능 제작을 통한 UNION 공격 가능 여부 판단 (0) | 2022.08.24 |