Windows DB

SQL 인젝션 치료용 커서

2008.12.10 22:52

dhkim 조회 수:15078

안녕하세요 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 DB 마이그레이션 방법 호스트웨이 2012.04.27 7422
29 MS-SQL 사용자 DB 경로 변경 호스트웨이 2012.05.04 11304
28 DBMS효율적으로 관리하기 - LDF 축소 호스트웨이 2012.05.11 9604
27 MSSQL Master DB 이동 file 호스트웨이 2012.05.11 9436
26 DB 소유권 이전 호스트웨이 2012.06.01 8860
25 MSSQL DB Lock 해제 file 호스트웨이 2012.06.23 10894
24 DBConnectionOpen오류 호스트웨이 2012.07.14 6368
23 MS-SQL 서비스 포트 변경 file 호스트웨이 2012.07.14 20492
22 SQL2008 설치시 성능 카운터 레지스트리 하이브 일관성 실패 file 호스트웨이 2012.07.14 10046
21 MSSQL ErrorLog 지우기 file 호스트웨이 2012.07.14 12746
20 SQL 서버 관리자가 알아야 할 11가지 유용한 팁 호스트웨이 2012.08.03 14437
19 Windows MySQL root 패스워드 분실시 호스트웨이 2012.08.10 45979
18 Windows2003 SP2 에서 SQL2008 설치시 오류(0X5EBE5729) 호스트웨이 2012.08.31 12471
17 Windows Server 2008에서 MS SQL 2008 설치오류에 대한 해결[역할관리도구] file 호스트웨이 2012.08.31 13788
16 테이블에 있는 악성코드 제거 하기 위한 방법 2 file 호스트웨이 2012.09.06 11296
15 SQL 2008 RTM 에서 유지관리계획 실행 시 Error file 호스트웨이 2012.09.14 16372
14 SQL Server 2005 설치시 데이터 저장 경로 변경 file 호스트웨이 2012.09.14 13811
13 SQL 빌드 넘버 리스트 호스트웨이 2012.11.08 14051
12 데이터베이스 경로 변경하기 (MDF,LDF파일 경로 변경하기) 호스트웨이 2012.11.15 10678
11 MS-SQL 서버 메모리 사용량 제한 호스트웨이 2012.12.14 7288