Union SQL Injection

2016. 6. 18. 11:30·프로젝트 관련 조사/모의 해킹
반응형

작성자 : koromoon (koromoon@naver.com)

작성일 : 2012-10

 

 

 

( 1 ) Union SQL Injecion

2개 이상의 쿼리를 요청하여 결과를 얻는 UNION 이라는 SQL 연산자를 이용한 SQL Injecion 공격을 말하며 공격자는 이 연산자를 이용하여 원래의 요청에 한 개의 추가 쿼리를 삽입하여 정보를 얻어냄.

전제 조건 : 컬럼의 갯수가 같아야 하고 데이터 형식도 같아야 함.

 

 

( 2 ) UNION 연산자

 


< 예제 테이블 >

 




< UNION 연산자를 이용한 구문의 결과값 >

 

UNION 연산자를 사용하여 둘 이상의 SELECT문 결과를 단일 결과 집합으로 결합할 수 있음.

UNION 연산자를 사용하여 결합된 결과 집합은 모두 같은 구조를 가져야 함. 즉, 컬럼의 갯수가 같아야 하며 해당 결과 집합 컬럼은 호환되는 데이터 형식을 가져야 함.

UNION의 결과 집합 컬럼 이름은 UNION의 첫 번째 SELECT문의 결과 집합에 있는 컬럼 이름과 동일함. 다른 SELECT문의 결과 집합 컬럼 이름은 무시됨.

기본적으로 UNION 연산자는 결과 집합에서 중복 행을 제거함.

참고로 ALL 옵션을 사용하면 결과에 모든 행이 포함되고 중복 행은 제거되지 않음.

 

참고 사이트 : http://msdn.microsoft.com/ko-kr/library/ms191141(v=sql.105).aspx

 

 

( 3 ) SQL Injection에 주로 사용되는 문자열

 

문자열

설명

'

문자 데이터 구분 기호

;

쿼리 구분 기호

--, #

해당 라인 주석 구분 기호

--    Oracle, MSSQL

#     MySQL

/* */

/* 와 */ 사이 구문 주석

| |

문자 연결 (Oracle 에만 해당)

 

 

( 4 ) Union SQL Injection 공격 실습환경

 

 

< 모의해킹 홈페이지 >

 

"IT CookBook 정보 보안 개론과 실습 - 인터넷 해킹과 보안" 책의 소스로 간단히 모의해킹 홈페이지를 만듬.

ASP + IIS + MSSQL 2000 에서 실습함.

 

구분

설명

OS

Windows 2000 SP4

Web Language

ASP

WAS

IIS

DB

MSSQL 2000

< 모의해킹 홈페이지 기본 정보 >

 

열 이름

데이터 형식

길이

Null 허용

기본키 설정

id

int

4

 

설정

user_id

varchar

20

 

 

name

varchar

20

 

 

user_pw

varchar

20

 

 

nickname

varchar

20

 

 

zipcode

varchar

50

허용

 

address1

varchar

50

허용

 

address2

varchar

50

허용

 

email

varchar

50

허용

 

homepage

varchar

50

허용

 

< member 테이블 구조 >

 

열 이름

데이터 형식

길이

Null 허용

기본키 설정

zipcode_id

varchar

10

 

 

zipcode

varchar

30

 

 

sido

varchar

20

허용

 

gugun

varchar

40

허용

 

dong

varchar

40

허용

 

bunji

varchar

40

허용

 

ho

varchar

40

허용

 

< zipcode 테이블 구조 >

 

 

( 5 ) Union SQL Injection 공격 실습

 


< 우편번호 검색창 >

 

 

< 검색창 관련 ASP 코드 >

 

Union SQL Injecion 공격을 실행시킬 곳을 찾아야 함. 주로 우편번호 검색창 등과 같이 파라미터 길이가 비교적 긴 검색 결과를 보여줄 수 있는 페이지에서 실행함. 최종적으로 다양한 공격 코드들을 실행시켜 다른 사용자의 ID, PW를 알아내는 게 목표로 정함. 위 우편번호 검색창을 보면 컬럼 7개 중에 1번 컬럼과 7번 컬럼은 출력이 안 되는 걸 알 수가 있으며 이점을 유념해서 Union SQL Injecion 공격을 실행할 때 유념해야 함.

 

먼저 컬럼 갯수를 알아내야 함. 아래 공격 코드들을 하나씩 실행시켜보면 인후동' order by 8-- 부분에서 오류가 뜸.

ORDER BY 절을 사용하여 행을 정렬해서 결과값을 보여줌. SELECT 문의 마지막에 작성되며 정렬 조건으로 표현식, 별칭 또는 컬럼 위치를 지정해야 함. 여기서 숫자를 넣어서 정렬을 할 수가 있는데 숫자는 해당 순서의 컬럼을 뜻하며 그 순서의 컬럼으로 정렬하겠다는 뜻임. 그래서 컬럼의 갯수보다 더 높은 숫자를 넣으면 오류가 뜸. 그 오류를 통해서 컬럼의 갯수를 파악할 수 있음.

검색창 관련 테이블(zipcode)의 컬럼 갯수가 7개임.

 

인후동' order by 1--

인후동' order by 2--

인후동' order by 3--

인후동' order by 4--

인후동' order by 5--

인후동' order by 6--

인후동' order by 7--

인후동' order by 8--        <--- 에러

 


< 인후동' order by 8-- 공격 코드 넣을 때 에러페이지 노출 >

 

DB 정보를 알아내야함. DB 종류와 버전 별로 공격 코드에 차이가 있으며 그에 맞는 공격 코드로 공격을 해야 함.

Union SQL Injection 공격 시 반드시 컬럼의 갯수가 같아야 하며 데이터 형식도 같아야 함.

원하는 정보를 출력할 컬럼에 원하는 데이터 값을 넣고 나머지 컬럼에는 쓰레기 값을 넣음.

(참고로 테스트 중인 우편번호 검색창 출력 화면에는 1번 컬럼과 7번 컬럼이 출력이 안 됨)

아래의 공격 코드를 실행 시 DB 정보가 출력됨.

 

인후동' union select '1', '2', '3', '4', '5', @@version, '7' --

 


< WAS 정보 노출 >

 

다음 공격에 앞서 정보 스키마 뷰를 이해해야 함.

 

정보 스키마 뷰는 SQL Server 메타데이터의 내부 시스템 테이블에 종속되는 않는 뷰를 제공함.

기본 시스템 테이블이 많이 변경되더라도 응용 프로그램이 제대로 작동할 수 있도록 함.

정보 스키마 뷰는 INFORMATION_SCHEMA 라는 특수한 스키마를 정의함.

여기서 메타데이터(metadata)는 데이터를 위한 데이터를 말하며 구조화된 정보를 분석, 분류하고 부가적 정보를 추가하기 위해 그 데이터 뒤에 함께 따라가는 정보를 말함.

정보 스키마 뷰에 대해서 자세히 알고 싶다면 아래 사이트를 참고 바람.

참고 사이트 : http://msdn.microsoft.com/ko-kr/library/ms186778(v=sql.90).aspx

 

INFORMATION_SCHEMA.TABLES 와 TABLE_NAME 를 가지고 테이블 정보를 알아냄.

INFORMATION_SCHEMA.TABLES 은 현재 사용자가 사용 권한을 가진 데이터베이스의 각 테이블당 한개의 행을 반환함. 그리고 TABLE_NAME 은 테이블 이름을 말함.

 

information_schema.tables 와 table_name 을 이용한 공격 코드는 아래와 같음.

총 6개의 테이블이 노출되었으며 member 테이블이 사용자 정보일 거라 추측됨.

 

인후동' union select '1', '2', '3', '4', '5', table_name, '7' from information_schema.tables--

 

 

< 테이블 정보 노출 >

 

얻은 테이블 정보를 얻었으면 INFORMATION_SCHEMA.COLUMNS 와 COLUMN_NAME 을 가지고 컬럼 정보를 알아냄.

INFORMATION_SCHEMA.COLUMNS 는 현재 사용자가 액세스할 수 있는 열마다 한 행을 반환함. 그리고 COLUMN_NAME 은 열 이름을 말함.

 

information_schema.columns 와 column_name 을 이용한 공격 코드는 아래와 같음.

총 10개의 컬럼이 노출되었으며 user_id, user_pw 가 각각 ID, PW 라 추측됨.

 

인후동' union select '1', '2', '3', '4', '5', column_name, '7' from information_schema.columns where table_name='member'--

 

 

< member 테이블의 컬럼 노출 >

 

이제까지 얻은 정보를 가지고 다른 사용자의 ID, PW를 알아냄.

공격코드는 아래와 같음.

 

인후동' union select '1', '2', '3', '4', user_id, user_pw, '7' from member--

 

 

< 사용자 정보 노출 >

 

 

 

도움이 될 만한 사이트 :

 

MYSQL + MSSQL + ORACEL SQL Injection Knowledge Base

http://www.websec.ca/kb/sql_injection#MySQL_Default_Databases

 

pentestmonkey - SQL Injection Cheat Sheets

http://pentestmonkey.net/category/cheat-sheet/sql-injection

 

Penetration Tesing Framework

http://www.vulnerabilityassessment.co.uk/Penetration%20Test.html

 

pentest-bookmarks

http://code.google.com/p/pentest-bookmarks/wiki/BookmarksList

 

n3015m님의 블로그

http://n3015m.tistory.com/

[출처] Union SQL Injection|작성자 코로문


반응형
저작자표시

'프로젝트 관련 조사 > 모의 해킹' 카테고리의 다른 글

mysql 우회 기법 정리  (0) 2016.07.10
SQL Injection Cheat Sheet - MySQL  (0) 2016.06.18
DDOS 공격대응 메뉴얼  (0) 2016.04.26
DDOS 공격 예방하기  (0) 2015.10.18
웹셀 업로드 취약점 방어하기  (0) 2015.10.17
'프로젝트 관련 조사/모의 해킹' 카테고리의 다른 글
  • mysql 우회 기법 정리
  • SQL Injection Cheat Sheet - MySQL
  • DDOS 공격대응 메뉴얼
  • DDOS 공격 예방하기
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    판교역
    수제버거
    수제버거존맛
    상호관세
    이재곧죽습니다
    돈까스
    마케팅
    무역전쟁
    점심
    유니티
    판교맛집
    복리후생
    쥬쥬랜드
    수제버거맛집
    런치
    AWS
    판교
    대통령
    맛집
    보안가이드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
Union SQL Injection
상단으로

티스토리툴바