Windows DB

SQL 인젝션 치료용 커서

2008.12.10 22:52

dhkim 조회 수:15077

안녕하세요 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

 

번호 제목 글쓴이 날짜 조회 수
50 [MS SQL]중복제거, 중복찾기 호스트웨이 2015.09.16 232151
49 Windows MySQL root 패스워드 분실시 호스트웨이 2012.08.10 45951
48 실행중인 Mssql 버젼 확인 hostway 2008.05.15 25312
47 MS-SQL 개체 소유권 변경 레이쩡 2008.09.18 24880
46 MDF파일만 있을 경우 복구하는 방법(SQL2000만 해당) shpark 2008.07.07 24685
45 SQL Server 인덱스 설정의 효과 dhkim 2008.06.27 23596
44 tempdb 복구 및 이동 방법 hostway 2008.05.15 22791
43 sql injection 보안 점검 hostway 2008.05.14 21725
42 Microsoft Source Code Analyzer for SQL Injection 관련 자료 dhkim 2008.07.25 21539
41 MS SQL 트랜잭션 로그를 줄이는 방법 레이쩡 2008.09.18 21235
40 MS-SQL 서비스 포트 변경 file 호스트웨이 2012.07.14 20481
39 [MS-SQL] DB Table 소유자변경 dalgri 2009.05.25 19956
38 SQL 인젝션에 이용되는 XP_cmdshell 확장프로시져 삭제 방법 dhkim 2008.12.24 18512
37 SQL 2008 RTM 에서 유지관리계획 실행 시 Error file 호스트웨이 2012.09.14 16370
36 [MS SQL]다른 DB에 있는 테이블 이동/복사하기 호스트웨이 2015.09.15 16008
» SQL 인젝션 치료용 커서 dhkim 2008.12.10 15077
34 SQL 서버 관리자가 알아야 할 11가지 유용한 팁 호스트웨이 2012.08.03 14429
33 SQL 빌드 넘버 리스트 호스트웨이 2012.11.08 14049
32 SQL 2008 Express 버전 설치 1 file 호스트웨이 2010.04.01 13849
31 SQL Server 2005 설치시 데이터 저장 경로 변경 file 호스트웨이 2012.09.14 13809