WEB/공부

SQL Injection : MySQL System Table (dreamhack)

Goblebin 2023. 2. 9. 13:47
반응형

그냥 강의만 읽어보고 외우려고 했는데 새롭게 배운 내용이 많을 것 같아서 작성한다.

https://learn.dreamhack.io/306#3

 

로그인 | Dreamhack

 

dreamhack.io


 

 

 

나는 하나의 서버가 하나의 Database를 가질거라는 잘못된 지식을 갖고 있었던 것 같다.

그래서 처음 System Table에 대해 배울 때 꽤 혼란스러웠다.

공부한 내용을 정리하겠다.

 

 

 

모의해킹은 Penetration Testing Execution Standard(PTES)에 의하면 총 일곱가지 단계로 구성되어 있다.
처음 과정에서 공격 대상을 지정하고 대상의 정보를 수집하는 과정을 핑커프린팅(fingerprinting)이라고 한다.
공격 대상이 사용한는 웹 서버와 개발 언어, DBMS와 내부정보 등을 알아내는 과정이 이에 해당됨.

 

 

 

DBMS마다 데이터베이스의 정보를 포괄하는 시스템 테이블(System Table)이 존재한다.

System Table이란?
설정 및 계정 정보 외에도 테이블과 컬럼 정보, 현재 실행되고 있는 쿼리의 정보 등 다양한 정보를 포함하고 있는 테이블임.

Sql Injection을 통해서 해킹을 위한 사전 정보들을 빼내기 위해 System Table에 접근한다.(fingerprinting)

 

 

 


 

MySQL 

 

show databases;

존재하는 모든 데이터베이스를 확인할 수 있다.

MySQL의 초기 데이터베이스는 information_schema, mysql, performance_schema, sys가 있다.

이 데이터베이스 안에 있는 테이블을 통해 사전정보들을 수집할 수 있다.

 

 

 

select TABLE_SCHEMA, TABLE_NAME from information_schema.TABLES;

information_schema데이터베이스안의 tables 테이블을 통해서 스키마와 테이블의 정보를 수집할 수 있다.

더보기
https://learn.dreamhack.io/306#7

드림핵에서 가져온 사진이다. 솔직히 잘 이해되지 않는다. TABLE_SCHEMA가 DB의 이름을 가지고 있고 TABLE_NAME은 해당 DB안에 있는 테이블 정보를 확인할 수 있는 것 같다. 

 

 

 

select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.COLUMNS;

information_schema안의 COLUMNS 테이블을 통해 스키마, 테이블, 컬럼의 정보를 얻을 수 있다.

COLUMNS 테이블 안에도 스키마와 테이블에 대한 정보가 있는 듯 하다.

더보기
https://learn.dreamhack.io/306#7

 

SQL Injection을 통해 이 정도 정보를 수집할 수 있다면 DREAMHACK에 있는 uid와 upw의 정보를 탈취할 수 있어보인다.

SELECT uid, upw FROM DREAMHACK.users ← 해당 명령어를 통해 탈취 가능할 것 같다.

 

 

 

select * from information_schema.PROCESSLIST;

PROCESSLIST 테이블을 통해 실시간으로 실행되는 쿼리를 조회할 수 있다.

 

select user, current_statement from sys.session;

sys 데이터베이스의 SESSION테이블을 통해 실행 중인 계정과 함께 조회하는 방법도 있다.

 

select GRANTEE,PRIVILEGE_TYPE,IS_GRANTABLE from information_schema.USER_PRIVILEGES;

information_schema데이터베이스의 USER_PRIVILEGES 테이블을 통해 계정과 권한 정보를 알 수 있다.

GRANTEE ← 계정

PRIVILEGE_TYPE

IS_GRANTABLE

 

select User, authentication_string from mysql.user;

mysql데이터베이스의 user테이블에서 계정 정보를 알아낼 수도 있다.

 

 

정리하면서 느꼈다. 이 부분은 MySQL 공식 홈페이지에서 초기 설정 데이터베이스에 어떤 테이블이 있는지 내가 직접 확인하고 익혀야 할 것 같다. 그리고

(개인적인 생각이지만 어느정도 보안 의식이 있는 사람이라면 초기 설정된 데이터베이스, 테이블의 이름을  무조건 바꿀 것 같다. 그리고 해킹에서 가장 필요한 사전정보는 SQL언의의 종류라고 생각함.)

 

 


여기서부터 내가 알아본 내용이다. 어떤 데이터베이스에 어떤 테이블이 있는지만 확인할 것이다.

 

mysql 테이블

 

 

information_scheme

 

더보기

information_scheme의 모든 테이블은 아닌듯 하다. 엄청 많은 듯

출처 : https://poqw.tistory.com/24

 

sys데이터베이스의 테이블은 구글을 뒤져도 잘 안나온다. 나중에 찾아보고 다음 내용 공부하러 가겠다.

반응형