Jaeseo's Information Security Story

UNION Injection 본문

Security Study/Web hacking

UNION Injection

Jaeseokim 2019. 10. 18. 11:46
  • UNION Injection 이란 SQL Injection 공격의 기법 중 하나로 Union을 통해 데이터를 질의하는 공격이다.

일단 이 공격을 하기 위해서는 union이라는 sql 명령어에 대해 알고 있어야 한다.

union 이란 SQL 집합 연산자이며 질의한 결과를 합치는 연산자이다.

  • 단, 모든 칼럼의 값이 동일하여야 한다.

*예시

select * from data1

+--------+--------+
| data1  | data2  |
+--------+--------+
| a      |   1000 |
| b      |   2000 |
| c      |   3000 |
+--------+--------+
select * from data2

+--------+--------+
| data3  | data4  |
+--------+--------+
| d      |   4000 |
| e      |   5000 |
| f      |   6000 |
+--------+--------+

위와 같이 두 개의 테이블이 존재한다고 한다면 UNION을 통해 결합하여 출력을 할 수가 있다.

select * from data1 union select * from data2

+--------+--------+
| data   | data   |
+--------+--------+
| a      |   1000 |
| b      |   2000 |
| c      |   3000 |
| d      |   4000 |
| e      |   5000 |
| f      |   6000 |
+--------+--------+

이제 이러한 공격이 어떻게 이루어지는지 실습을 해본다.

만약 이러한 주소 찾기 웹사이트가 있다고 하였을 때 일단 어떤 식으로 출력이 되는지 확인을 해본다.

이러한 결과가 나올 때의 테이블의 컬럼 종류와 서버 측에서 작동하는 SQL query문을 예상해본다.

지번 건물명 건물 번호

대충 이런 식으로 5개의 컬럼을 가진 DB로 예상이 된다.

select * from 주소DB where 시 like '%입력값%' or 도 like '%입력값%' or 건물명 like '%입력값%' 

또한 서버 측에서 SQL query를 위와 같이 질의하는 것으로 예상이 된다.

이때 Union Injection을 통해 공격을 해본다.

일단 공격을 하기 전에 알고 있어야 하는 선 지식이 필요하다.

DB에서는 시스템에서 관리를 위해 시스템 카탈로그 가 있는데 이러한 점을 통해 공격을 진행해본다.

일단 이번 모의해킹 사이트에서는 MSsql을 사용하였다.

MSsql에는 이러한 테이블이 있는데 이러한 정보를 통해 공격을 한다.

  1. information_schema.tables 시스템 테이블
    1) TABLE_NAME 컬럼명
    2) TABLE_NAME 컬럼명 -> 사용자 테이블명 보유

  2. information_schema.columns 시스템 테이블
    1) TABLE_NAME 컬럼명 -> 사용자 테이블명 보유
    2) COLUMN_NAME 컬럼명 -> 사용자 테이블들의 컬럼명 보유

DB에서 테이블 이름과 컬럼이름 가져온다.

'union select '-','-','-', table_name , column_name from information_schema.columns --

그 결과 모든 테이블의 이름과 컬럼명이 결합되어 출력이 되는 것을 볼 수가 있다.

이때 members 테이블 안에 passwd 컬럼과 user_id 컬럼이 있다는 것을 볼 수가 있는데 이러한 정보를 통해 유저의 id와 password 정보를 탈취해본다.

'union select '-','-','-', user_id, passwd from members --

위와 같이 유저의 아이디와 비밀번호를 가져온 것을 확인할 수 있다.

Comments