본문 바로가기
정보보안(웹해킹)/SQLInjection

Information_schema와 SQL Injection

by 끊임없는정진 2023. 1. 7.

▶ Information_schema?

DB의 메타 정보(ex. 테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 DB를 말한다. Information_schema 데이터베이스 내의 모든 테이블은 읽기 전용이며, 단순히 조회만 가능하다. 즉, 직접 수정하거나 관여하는건 불가하다. 데이터베이스 내의 테이블은 레코드가 있는 것이 아니라, SQL을 이용해 조회할 때마다 메타 정보를 MySQL 서버의 메모리에서 가져와서 보여준다. 따라서, 한꺼번에 많은 테이블을 조회할 경우 시간이 많이 걸린다. 

※ 메타 데이터(Metadata) : 데이터의 데이터로써, 데이터베이스 또는 테이블의 이름, 칼럼의 데이터 타입, 또는 접근 권한과 같은 것을 말한다. 경우에 따라서 데이터 사전(data dictionary)과 시스템 카탈로그(system catalog)로 불린다.

 

 

▶ information schema를 이용한 SQLi

information schema가 이러한 정보를 제공하기 때문에 만약, information_schema를 사용할 수 있는 sqli를 수행하게 될 때 다음과 같은 과정으로 유용하게 정보를 뺄 수 있다. 테이블 이름을 빼내는 과정에서 개발자가 생성한 테이블보다 위에 기본적으로 생성되는 테이블이 존재하기 때문에 table_type='base table' 혹은 table_type=0x42415345205441424C45 라는 조건문을 걸어준다. information_schema 에서 table 정보를 빼내고 싶으면 다음과 같은 서브쿼리를 이용해서 table 이름을 하나씩 빼낼 수도 있다. 다음과 같이 말이다. (서브쿼리는 반드시 단수의 데이터를 반환해야 하므로 limit를 걸어준다.)

select table_name from information_schema.tables where table_type=0x42415345205441424C45 limit 1,1
select table_name from information_schema.tables where table_type=0x42415345205441424C45 limit 2,1

 

column을 빼낼 때는 다음과 같은 쿼리로 하나씩 빼서 쓰면 된다. 

select column_name from information_schema.columns where table_name=0x727562697961 limit 1,1

 

 

 

출처: Rubiya님 블로그

댓글