정보보안공부
SQL Injection - 데이터베이스별 스키마 객체 본문
#Mssql 데이터베이스
- INFORMATION_SCHEMA.TABLES
- INFORMATION_SCHEMA.COLUMNS
- SYS.OBJECTS
- SYS.COLUMNS
** INFORMATION_SCHEMA를 통한 조회
1) 테이블 이름 조회
#> select table_name from information_schema.tables where table_type = 'base table'
-> 테이블 이름을 table_name 컬럼을 통해 조회하고 table_type = 'base table'을 통해 일반 테이블 정보만 조회한다.
2) 컬럼명 조회
#> select column_name from information_schema.columns where table_name = '조회한 테이블명'
-> 컬럼 이름을 column_name 컬럼을 통해 조회하고 table_name = '조회한 테이블명'으로 컬럼 정보를 조회한다.
** SYSTEM VIEW를 통한 조회
1) 테이블 이름 조회
#> select name from sys.objects where type='U'
-> 테이블 이름을 name 을 통해 조회하고 type='u'는 사용자가 정의한 테이블을 의미한다.
2) 컬럼명 조회
#> select name from sys.columns where object_id=1269579561
-> 컬럼 이름을 name 컬럼을 통해 조회하고 컬럼명 조회 시 object_id 값을 알아야 조회가 가능하다.
3) 조인문을 사용하여 컬럼명 조회
#> select col.name from sys.columns col, sys.objects obj where col.object_id = obj.object_id and obj.name = '조회한 테이블명'
-> 컬럼 이름을 sys.columns 테이블의 name 컬럼을 통해 조회하고 sys.columns 테이블의 object_id 값과 sys.objects 테이블의 object_id 값이 같고 sys.objects 테이블에서 조회한 테이블 명을 통해 컬럼 조회가 가능하다.
#Oracle 데이터베이스
ALL_TABLES
USER_TABLES ( TABS )
ALL_TAB_COLUMNS
USER_TAB_COLUMNS ( COLS )
** USER_TABLES ( TABS ) 와 USER_TAB_COLUMNS ( COLS ) 를 이용한 조회
1) 테이블 이름 조회
#> select table_name from tabs
#> select table_name from user_tables
-> 현재 사용자 소유의 DB를 대상으로 table_name을 조회한다.
2) 컬럼 이름 조회
#> select column_name from cols where table_name = 'EMPLOYEES'
#> select column_name from user_tab_columns where table_name = 'EMPLOYEES';
-> 현재 사용자 소유의 DB를 대상으로 EMPLOYEES 테이블의 column_name을 조회한다.
( 오라클에서 테이블명이 대문자로 이루어져있어 employees를 조회하면 조회가 되지 않는다. - 대소문자를 구분하기)
** 구버전에서 사용했던 객체인 TAB 과 COL 을 이용한 조회
1) 테이블 이름 조회
#> select tname from tab
-> 현재 사용자 소유의 DB를 대상으로 tname 테이블 이름을 조회한다.
2) 컬럼 이름 조회
#> select cname from col where tname = 'EMPLOYEES'
-> 현재 사용자 소유의 DB를 대상으로 EMPLOYEES 테이블의 cname 컬럼 이름을 조회한다.
( 오라클에서는 테이블명이 대문자로 이루어져있어 employees를 조회하면 조회가 되지 않는다. 대소문자를 구분하기)
#Mysql 데이터베이스
- INFORMATION_SCHEMA.TABLES
- INFORMATION_SCHEMA.COLUMNS
** INFORMATION_SCHEMA를 통한 조회
1) 테이블 이름 조회
#> select table_name from information_schema.tables where table_type = 'base table'
-> 테이블 이름을 table_name 컬럼을 통해 조회하고 table_type = 'base table'을 통해 일반 테이블 정보만 조회한다.
2) 컬럼명 조회
#> select column_name from information_schema.columns where table_name = 'Employees'
-> 컬럼 이름을 column_name 컬럼을 통해 조회하고 table_name = '조회한 테이블명'으로 컬럼 정보를 조회한다.
( Mysql에서 테이블명 입력 시 대소문자를 구분하므로 employees를 조회하면 조회가 되지 않는다. )
'Web' 카테고리의 다른 글
SQL Injection - DB별 단일행, 단일열 쿼리 (0) | 2019.09.22 |
---|---|
SQL Injection - Error-Based Sql Injection (0) | 2019.09.22 |
SQL Injection - Blind Sql Injection (0) | 2019.09.22 |
SQL Injection - Union Sql Injection (0) | 2019.09.20 |
Fiddler & Burp 연결 (1) | 2019.08.25 |