안녕하세요
베비온입니다.
저번에 컬럼 갯수를 세는 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) |
C | 3 |
D | 4 |
E | 5 |
이러한 형식과 데이터가 들어있지요
이 두개를 UNION해보겠습니다.
SELECT * FROM TEST1 UNION * FROM TEST2;
두 개의 SELECT 가 앞의 SELECT 결과 뒤에 붙은 것을 보실 수가 있습니다.
여기서 눈에 띄는 것은 C가 중복값으로 인해 한 개만 출력이 되는 것을 보실 수 있습니다.
이러한 기능을 가진 UNION을 사용해 보도록 하겠습니다.
감사합니다
'Hacking > SQL Injection' 카테고리의 다른 글
6.SQL Injection>테이블 명, 컬럼 명 알아내기 (0) | 2017.04.30 |
---|---|
4. 게시판의 컬럼 갯수 알아내기 (0) | 2017.04.27 |
3.SQL Injection - 로그인 우회하기 (0) | 2017.04.24 |