'전체테이블'에 해당되는 글 1건

  1. 2008.07.15 전체테이블들의 스크립트를 삭제하는 커서

http://cafe.naver.com/sqlmaster.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1755

인젝션공격 으로 인해서 모든 테이블에 아래와 같은 스크립트들이 입력되어 있는 경우가 있습니다.
전체테이블들의 스크립트를 삭제하는 커서를  만들었습니다.

-- 스크립트의
--<script src=http://www.encode72.com/b.js></script>
--<script src=http://www.win496.com/b.js></script>
--<script src=http://www.sslput4.com/b.js></script>
--<script src=http://www.rundll841.com/b.js></script>
--<script src=http://www.advertbnr.com/b.js></script>
--<script src=http://www.siteid38.com/b.js></script>
--<script src=http://www.cookieadw.com/b.js></script>

declare @name sysname, @id int
declare @sname sysname,@xtype int
declare @sql varchar(1000) , @b_data varchar(1000), @a_data varchar(10)

set @b_data='<script src=http://www.cookieadw.com/b.js></script>'  -- 변경할문자(스크립트)
set @a_data=''''''                                                                            -- 변경될문자(공백문자)

DECLARE MYCUR CURSOR FOR

-- 사용자테이블
 select name,id from dbo.sysobjects where xtype='U'
     
OPEN  MYCUR
FETCH NEXT FROM MYCUR INTO @name, @id

WHILE (@@FETCH_STATUS = 0)
 BEGIN
  DECLARE subcur CURSOR FOR

  --컬럼 데이터타입이 VARCHAR, CHAR , NVARCHAR, NCHAR 형인것만
   select name,xtype from dbo.syscolumns
   where xtype in (
    167 -- varchar
    ,175 -- char
    ,231 --nvarchar
    ,239 --nchar

    )
    and id=@id 
   
  OPEN subcur
  FETCH NEXT FROM subcur INTO @sname,@xtype
  WHILE (@@FETCH_STATUS = 0)
   BEGIN

     -- REPLACE 사용한 업데이트 (동적sql)
      set @sql=' update dbo.' + @name + ' set ' + @sname + ' = replace(' + @sname + ',''' + @b_data + ''',' + @a_data +')'
      exec   ( @sql)
   
   FETCH NEXT FROM subcur INTO @sname,@xtype
   END
  CLOSE  subcur
  DEALLOCATE  subcur  
  FETCH NEXT FROM MYCUR INTO @name, @id
 END

CLOSE  MYCUR
DEALLOCATE  MYCUR


Posted by onewater
,