본문 바로가기
웹 취약점 분석

SQL Injection(Union based SQL Injection 실습)

by 웹하는빡통 2019. 10. 2.

일단 UNION SQL인젝션을 실습 하기 전에 UNION SQL 인젝션 공격을 이용할때

사용하는 information_schema의 구조와 기본적이면서 중요한 개념을 설명하고 실습을 하겠다.

개인적인 생각으로 대부분 사람들이 information_schema을 왜?? 쓰는지를

잘모르는 상태에서 union sql인젝션을 배우는것 같아서 내용 설명을 하겠습니다.

 

데이터 조회

SELECT 속성1,속성2 FROM TABLE이름 WHERE 조건문

 

DATABASE SCHEMA??

자료의 구조, 표현방법, 자료간의 관계를 형식 언어로 정의한 구조.

 

데이터 딕셔너리: 다양한 정보를 저장하는 시스템 테이블

사용자가 테이블을 생성 또는 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신되는 테이블

.

데이터를 설명하기 위한 데이터로 메타 데이터의 집합이라고도 할 수 있다. MYSQL,MSSQL INFORMATION_SCHEMA를 이용하여 딕셔너리 정보를 제공

 

INFORMATION_SCHEMA:

DATABASE

TABLE_NAME

COLUMN DATA TYPE

접근권한 등이 저장

 

TABLES: 현재 데이터베이스에 존재하는 테이블의 정보를 제공.

COLUMNS: 칼럼의 정보를 제공.

TABLE_TYPE: 테이블 유형을 볼 수 있음.

 

TABLE_TYPE 3가지(중요도:)

□BASE TABLE: 일반적인 테이블(정보획득에 꼭 필요함!!)

VIEW:

SYSTEM VIEM:INFORMATION_SCHEMA 테이블

* DB를 관리하기 위한 데이터가 저장되기 때문에 정보획득에는 불필요!

 

 

 

☆INFORMATION_SCHEMA를 통한 조회(중요도:★)

 

TABLE_NAME 조회

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES;

 

BASE TABLE 조회

SELECT TABLE_NAME FROM INFORMTION_SCHEMA.TABLES WHERE TABLE_TYPE=’BASE TABLE’;

TABLE_TYPE 및 TABLE_NAME 조희

SELECT TABLE_NAME, TYPE_TYPE FROM INFORMTION_SCHEMA.TABLES WHERE

TABLE_NAME=’테이블 이름‘ AND TABLE_TYPE=’BASE TABLE’;

COLUMN 조회

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’테이블 이름‘;

UNION이란

둘 이상의 SELECT 문에서 검색된 레코드를 단일 집합으로 결합해주는 연산자.

UNION 과 UNION ALL이 있음.

 

둘의 차이점

UNION은 레코드의 중복을 제거한 결과의 합.

UNION ALL은 레코드의 중복을 포함한 결과의 합.

 

 

컬럼의 개수 확인(중요도:)

 

ORDER BY “정수”--, #

UNION SELECT NULL,NULL,NULL,NULL 1,2,3,4,5,6,7, ‘’,‘’,‘’,‘’,‘’,‘’--. #

UNION ALL SELECT 위와 동일.

 

UNION 구문에 NULL을 사용하는 이유는 데이터베이스에 정의된 데이터 타입에 상관 없이 사용이 가능하기 때문 NULL의 뜻은 데이터가 존재하지 않는다는 뜻이며

 

* NULL은 공백 또는 0과는 구분되는 의미.

 

데이터값이 데이터베이스에 존재하지 않음을 나타내기 위해 구조화된 쿼리언어(SQL)에 사용되는 특수한 표기.

 

 

1. UNION SQL Injection을 통한 사용자 계정 노출

1.‘ or 1=1을 넣어 SQL인젝션 취약점이 발생하는지 확인하였는데 그 결과 or 1=1 참값을 넣어 검색란에 참값이 반응한 것을 알 수 있었음.

 

2. 쿼리분석기로 칼럼수를 파악함.

 

3. UNION SQL Injection 구문을 이용하여 계정을 열람 할 수 있는구문을 작성함.

 

4. UNION SQL Injection 구문을 검색 창에 입력하자 타 계정 아이디와 비밀번호가 노출이 된 것을 알 수 있음.

 

 

 

 

2. UNION SQL Injection을 통한 TABLE 노출

 

 

 

 

 

table_type을 이용하여 TABLE명을 열람할 수 있는 구문을 작성함.

 

TABLE명이 노출되는 것을 알 수 있음.

댓글