Windows DB

SQL 인젝션 치료용 커서

2008.12.10 22:52

dhkim 조회 수:15029

안녕하세요 HOSTWAY입니다.

SQL Injection으로 인해 <Scrtip 구문이 삽입이 되어 피해를 입은 테이블에 대해서 자동으로 수정을 해주는 커서 입니다.

크게 자료형 vchar와 text로 나누어져 있습니다. 자료형 별로 나누어 2번씩 업데이트 해주시면 되겠습니다.

* 사용전 반드시 백업을 해주시기 바라며 DATABASE에 대해서 지식이 있는 개발자 분들이 사용해 주시면 되겠습니다.

감사합니다.
-----------------------------------
-- 적용하기 전 백업을 꼭 해주세요
-- EXEC 앞에 있는 주석 --를 제거해주시고 쓰시면 되겠습니다.
-- 참고사항으로 소유권 문제로 안될수 있으므로 쿼리 분석기의 바꾸기 기능으로
-- dbo를 사용자 계정으로 바꿔주시면 됩니다.
-- 감사합니다.
-----------------------------------
DECLARE @curr_sysobjid varchar(100), @curr_sysobj varchar(500),@curr_columns_id varchar(100), @curr_columns_name varchar(100),@curr_columns_xtype varchar(50)
DECLARE sysobjects_cursor CURSOR
FOR
    SELECT id,name FROM sysobjects WHERE xtype='U'
OPEN sysobjects_cursor

FETCH NEXT FROM sysobjects_cursor INTO @curr_sysobjid,@curr_sysobj
WHILE(@@FETCH_STATUS <> -1)
BEGIN
    IF(@@FETCH_STATUS <> -2)
     BEGIN
-- 컬럼명 출력용 커서----
      PRINT @curr_sysobjid +  ' ' + @curr_sysobj
 EXEC('DECLARE columns_cursor CURSOR FOR SELECT id,name,xtype FROM syscolumns WHERE id ='  + @curr_sysobjid)
 OPEN columns_cursor
 FETCH NEXT FROM columns_cursor INTO @curr_columns_id,@curr_columns_name,@curr_columns_xtype
 WHILE(@@FETCH_STATUS<> -1)
  BEGIN
     IF(@@FETCH_STATUS <> -2)
     BEGIN
       IF(type_name(@curr_columns_xtype) = 'varchar' or type_name(@curr_columns_xtype) =  'nvarchar')
       BEGIN
-- 자료형이 varchar거나 nvarchar일때
-- update할때
       --EXEC('UPDATE dbo.' + @curr_sysobj + ' SET '  + @curr_columns_name + ' = ' +  'replace(' +  @curr_columns_name + ',substring(' +  @curr_columns_name  + ',charindex(' + '''<script src=''' + ',' +  @curr_columns_name +'), len(' + @curr_columns_name + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
----------------

-- SELECT할때
       --EXEC('SELECT ' + @curr_columns_name  + ',replace(' +  @curr_columns_name + ',substring(' +  @curr_columns_name  + ',charindex(' + '''<script src=''' + ',' +  @curr_columns_name +'), len(' + @curr_columns_name + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
----------------

       PRINT @curr_columns_name
       END
      IF(type_name(@curr_columns_xtype) =  'ntext' or  type_name(@curr_columns_xtype) =  'text')
      BEGIN

-- 자료형이 text 나 ntext일때 CONVERT함수로 text,ntext 자료형을 varchar로 변경한다.
-- UPDATE할때
       --EXEC('UPDATE dbo.' + @curr_sysobj + ' SET '  + @curr_columns_name + ' = ' +  'replace(' +  'CONVERT(varchar(8000),' + @curr_columns_name + ')' + ',substring(' +  'CONVERT(varchar(8000),' + @curr_columns_name + ')'  + ',charindex(' + '''<script src=''' + ',' +  'CONVERT(varchar(8000),' + @curr_columns_name + ')' +'), len(' + 'CONVERT(varchar(8000),' + @curr_columns_name + ')' + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
-------------

-- SELECT할때
       --EXEC('SELECT ' + 'CONVERT(varchar(8000),' + @curr_columns_name + ')' + ',replace(' + 'CONVERT(varchar(8000),' +  @curr_columns_name + ')' + ',substring(' +  'CONVERT(varchar(8000),' +  @curr_columns_name + ')'  + ',charindex(' + '''<script src=''' + ',' +  @curr_columns_name +'), len(' + 'CONVERT(varchar(8000),' +  @curr_columns_name + ')' + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
-------------

       PRINT @curr_columns_name
      END
     END
 FETCH NEXT FROM columns_cursor INTO @curr_columns_id,@curr_columns_name,@curr_columns_xtype
                            END
 CLOSE columns_cursor
 DEALLOCATE columns_cursor
---------------------
--      PRINT 'SELECT id,name FROM ' + @curr_sysobj + ' WHERE id ='  + @curr_sysobjid
      FETCH NEXT FROM sysobjects_cursor INTO @curr_sysobjid,@curr_sysobj
    END
END
CLOSE sysobjects_cursor
DEALLOCATE sysobjects_cursor

 

번호 제목 글쓴이 날짜 조회 수
30 MSSQL DB Lock 해제 file 호스트웨이 2012.06.23 10735
29 MS SQL 2008에서 메뉴 관리툴의 한글깨짐 현상 방지 file 호스트웨이 2012.03.16 11098
28 MS-SQL 사용자 DB 경로 변경 호스트웨이 2012.05.04 11172
27 Windows Server 2008에서 MS SQL 2008 설치오류에 대한 해결[역할관리도구] file 호스트웨이 2012.08.31 11286
26 SQL Server 2005 설치시 데이터 저장 경로 변경 file 호스트웨이 2012.09.14 11310
25 SQL 빌드 넘버 리스트 호스트웨이 2012.11.08 11561
24 Guide to Secure Configuration of SQL W2K file dalgri 2009.05.14 11562
23 SQL 서버 관리자가 알아야 할 11가지 유용한 팁 호스트웨이 2012.08.03 11783
22 Windows SQL 2008 Tunning Seminar file dalgri 2009.05.14 12484
21 MSSQL ErrorLog 지우기 file 호스트웨이 2012.07.14 12606
20 [MS SQL]다른 DB에 있는 테이블 이동/복사하기 호스트웨이 2015.09.15 12761
19 SQL 2008 Express 버전 설치 2 file 호스트웨이 2010.04.01 12992
18 System Table Field Query file dalgri 2009.05.14 13171
17 SQL System Query dalgri 2009.05.14 13238
16 SQL 2008 Express 버전 설치 1 file 호스트웨이 2010.04.01 13766
15 SQL 2008 RTM 에서 유지관리계획 실행 시 Error file 호스트웨이 2012.09.14 13864
» SQL 인젝션 치료용 커서 dhkim 2008.12.10 15029
13 SQL 인젝션에 이용되는 XP_cmdshell 확장프로시져 삭제 방법 dhkim 2008.12.24 18425
12 [MS-SQL] DB Table 소유자변경 dalgri 2009.05.25 19859
11 MS-SQL 서비스 포트 변경 file 호스트웨이 2012.07.14 20323