본문 바로가기
Hacking/SQL Injection

5.SQL Injection를 위한 UNION

by 혁이 2017. 4. 27.
반응형


안녕하세요


베비온입니다.


저번에 컬럼 갯수를 세는 sql injection을 수행했었죠?


이번엔 그것을 이용해서 테이블명, 컬럼 명을 뽑아내겠습니다.


그 전에 먼저 UNION이라는 sql문을 짚고 넘어가겠습니다.




저번에 list.php가 11개의 컬럼을 사용한다고 했었습니다.


이 컬럼에 제가 원하는 것들을 출력하고자 합니다.


UNION 이라는 sql문을 사용해서 말이죠


union은 2 종류에서 한번 다룬적이 있었지요?


간단하게 알아보고 가겠습니다.


union 은 두 개의 결과를 한 개의 결과로 합쳐주는 역할을 합니다.


즉 select한 두 개의 결과를 한개의 테이블로 만듭니다.


이것을 하기 위해선 조건이 있는데요

1.두 개의 select에 사용되는 필드의 갯수가 동일해야 한다.


2. 두 개의 select에 사용되는 필드의 데이터 형식이 서로 동일해야 한다.


정리하자면 select col1,col2,col3 from table1 union select col4,col5,col6 from table2 


에서는 col1과 col4가, col2와 col5가, col3, col6의 데이터의 형식이 동일해야합니다.


또한 두 개의 select에 사용되는 컬럼 수가 같죠?


이것이 union을 사용하는 조건입니다.


예시를 들어보겠습니다.


예시


test1이라는 테이블에 자료들을 넣어보겠습니다.



같은 데이터 형식을 가진 test2도 만들어보겠습니다.




만들고 데이터를 넣어주었습니다.


test1

 col1  (varchar)

col2  (int) 

 A

  1 

 B

 2

 C

 3



 

test2

 col3  (varchar)

col4  (int) 


이러한 형식과 데이터가 들어있지요


이 두개를 UNION해보겠습니다.


SELECT * FROM TEST1 UNION * FROM TEST2;



두 개의 SELECT 가 앞의 SELECT 결과 뒤에 붙은 것을 보실 수가 있습니다.


여기서 눈에 띄는 것은 C가 중복값으로 인해 한 개만 출력이 되는 것을 보실 수 있습니다.




이러한 기능을 가진 UNION을 사용해 보도록 하겠습니다.


감사합니다

반응형