정보보안공부

SQL Injection - 데이터베이스별 스키마 객체 본문

Web

SQL Injection - 데이터베이스별 스키마 객체

Steady_sp 2019. 9. 18. 01:40

#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
Comments