사용자 삽입 이미지

Last Update : 2008.05.07.


Windows Server 2000의 ASP와 MSSQL 2000 조합의 구성은 그 동안 많은 환경에서 사용되어 왔고 접할 수 있었으나 최근에는 Windows Server 2003의 ASP와 MSSQL 2005 조합의 구성을 접하는 경우가 점차적으로 늘어가고 있다.

MSSQL 2005는 기존의 MSSQL 2000과 동일한 방식으로 Error Based SQL Injection이 되지 않아 곤란한 경우가 종종 있고 최근에는 중국에서 공개한 몇 가지 방법 등이 등장하고 있다. 모의해킹 관련 일을 하거나 웹 애플리케이션 보안을 하는 사람들을 위하여 본 문서에서는 MSSQL 2005에서 DB 공격 기법 중 DB의 SCHEMA와 DATA획득 방법에 대하여 설명한다.

DB의 데이터를 획득하기 위한 다양한 툴들이 나와 있으며 애플리케이션 점검에도 많이 활용되나 크래킹의 용도로도 많이 사용되는 거 같습니다. 해당 자료는 점검 또는 학습 용도로만 사용하여 주시기 바랍니다.


1. 배경 기술 설명

MSSQL2005는 새로운 보안 메커니즘이 구현돼 있는지 MSSQL2000과 동일한 방법으로 SQL Injection을 수행할 경우 하나의 테이블 명만 계속해서 에러구문에 노출 된다. 그래서 기존의 SQL Injector 툴의 경우 DB의 획득이 불가하나, MSSQL 2005의 새로 추가된 기능을 이용하면 가능하다.

MSSQL2005는 row_number()라는 행 넘버를 추가해 주는 함수가 새로 추가되었으며 해당 함수를 이용하면 기존과 유사하게 sysobjects와 syscolumns를 이용하여 DB의 데이터 획득이 가능하다.
※ 참고 URL : http://technet.microsoft.com/ko-kr/library/ms186734.aspx

또한 새로 추가된 db_name.sys.all_objects와 db_name.sys.all_columns를 이용하는 방법도 있다.
※ 참고 URL : http://www.nspcn.org/forum/viewthread.php?tid=2535



2. DB의 SCHEMA 및 DATA 획득 방법

row_number()를 이용하여 MSSQL2005에서 에러 구문을 통한 DB 획득 SQL Query를 설명한다.


2.1. TABLE 명 획득 방법

select name from (select row_number() over(order by name) as rowid, name from sysobjects where xtype=0x55)T where rowid=1


rowid의 값을 증가 시키면 해당 행에 대한 table name이 에러 구문에 노출된다.


2.2. COLUMN 명 획득 방법

select name from(select row_number() over(order by col.name) as rowid,col.name from sysobjects tab,syscolumns col where tab.id=col.id and tab.name='table_name')T where rowid=1


rowid의 값을 증가 시키면 해당 table에 대한 column name이 에러 구문에 노출된다.


2.3. DATA 획득 방법

select column1 from (select row_number() over(order by column2) rowid, column3 from table_name)T where rowid=1


column1은 에러 구문에서 얻고자하는 DATA가 저장된 칼럼을 지정한다.
                column3에 나열된 테이블 중의 하나여야 한다.
column2은 행번호 지정의 기준이 되는 컬럼명을 지정한다.
column3은 테이블의 컬럼명을 나열한다. 여기에는 얻고자 하는 데이터가 포함된 모든 칼럼명을
                입력한다.

rowid의 값을 증가 시키면 해당 DB의 데이터가 순서대로 에러 구문에 노출된다.



3. DB 데이터 획득화면

위에서 설명한 기법을 이용한 자동화 툴 구현이 가능하며, 자동화 툴을 이용하여 Error Based SQL Injection을 통한 DB데이터 획득 화면이다.

사용자 삽입 이미지

Error Based를 사용하여 48개의 데이터 획득에 4초가 소요된 화면이다.



4. 자가 점검 툴

N3015M BSID는 홈페이지가 SQL Injection에 취약한지 검사해 주는 툴로 웹 애플리케이션 개발자를 위해서 개발한 툴이다. Blind SQL Injection을 탐지하며 Error Based SQL Injection도 Blind 방식으로 탐지한다. 해당 툴의 자세한 사용법은 설치 후 설명서를 참고하기 바라며 기능 중에 사용자가 정의한 SQL 구문 수행 기능이 있어 일부 DB 데이터 획득에도 활 용 할 수 있다.

사용자 삽입 이미지

Download : http://n3015m.tistory.com/entry/N3015MBSID1




애플리케이션에서 MSSQL2005의 SQL Injection 점검은 오히려 위의 기법을 활용할 경우 기존의 MSSQL 2000보다 더 수월하게 DB의 데이터를 획득 할 수 있다. 또한 MSSQL 2005는 Blind SQL Injection 방식을 사용할 경우 기존의 MSSQL 2000과 동일하게 DB의 데이터를 획득 할 수 있다.

DB의 데이터 획득 측면에서 본다면 Error Based SQL Injection에서만 차이점을 보인다.

MSSQL 2005는 이 외에도 다양한 기능이 내장되어 있어 해당 기능들을 사용할 경우 다양한 방법을 통하여 DB의 데이터 획득이 가능하며 또한 보다 폭 넓게 애플리케이션을 통한 DB의 데이터 노출관련 취약점 점검이 가능하다.

※ 위 자료는 애플리케이션 점검 또는 학습 용도로만 사용하여 주시기 바랍니다.

Posted by n3015m
:
BLOG main image
'네오이즘'의 보안LAB 블로그입니다........... n3oism@gmail.com by n3015m

카테고리

분류 전체보기 (228)
[ HappyDevTool ] (29)
[ HappyToolRelease ] (4)
[Book] (6)
[ Security Studies ] (0)
- CII (2)
- BigData (2)
- Web Hacking (10)
- SQL Injection (25)
- Mobile Security (9)
- Network (6)
- OperatingSystem (4)
- Malware & Reversing (4)
- Phishing (5)
- Compliance (0)
- Programming (13)
- Tools (13)
- IoT (6)
- etc (21)
[Pentration Testing] (3)
[OS X] (4)
[ Security Trends ] (16)
[ Fixing Guideline ] (7)
My Way, My Life (34)
About Me (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :