앞의 글에 이어지는 내용, SQL - WHERE 공격 참고
UNION(합집합)을 이용하면 데이터베이스의 모든 정보를 알아낼 수 있다.
그러나, 앞의 원래 query문이 요청하는 칼럼의 수와 UNION 뒤의 query문이 요청하는 칼럼의 수가 같지 않으면 error가 발생한다.
명령창에
1' UNION SELECT 1#
입력하면, 다음과 같이 칼럼수가 맞지 않는다는 error 가 발생한다.
칼럼 수를 두개로 늘려 다음 명령을 입력해보면,
1' UNION SELECT 1,2#
성공적으로 결과를 반환한다.
따라서 앞의 select문에서 두개의 칼럼을 요청한다는 것을 알 수 있다.
order by는 하나의 칼럼을 기준으로 정렬할 때 사용한다.
먼저, 다음과 같이 입력하면
1' ORDER BY 1#
첫번째 칼럼을 기준으로 정렬하는 것으로 결과가 출력된다.
두번째 칼럼을 기준으로 했을 때도 마찬가지로 결과가 출력된다.
1' ORDER BY 2#
그러나 세번째 칼럼을 기준으로 정렬했을 때 에러가 발생한다.
따라서 세번째 칼럼은 존재하지 않으며, 두개의 칼럼만 존재한다는 것을 알 수 있다.
UNION을 사용하면, 정확한 값을 입력할 때 까지 일일이 대입해봐야 하지만 ORDER BY를 사용하면 입력한 값보다 큰지/작은지로 판단하기 때문에
ORDR BY를 사용했을 때 더 빠르게 칼럼의 수를 찾을 수 있다.