본문 바로가기

Story/asp

mssql 인젝션

반응형

-- 검사루틴
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'select ['+@C+'] from ['+@T+']
      where ['+@C+'] like ''%<script%</script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

검색 부분을 바꿔가면서 해당 데이타를 찾는다.


-- 수정루틴
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
    (b.xtype = 99 OR
     b.xtype = 35 OR
     b.xtype = 231 OR
     b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
    EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script%</script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

위와 같이 처리할때 정상적인 내용도 뒷부분부터 잘려나가는 현상이 있다.

DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = replace(convert(varchar(8000), ['+@C+']), ''<script src=http://s1.cawjb.com/jp.js></script>'','''')
      where ['+@C+'] like ''%<script%</script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

위와 같이 특정 패턴이 아닌 단어를 치환하는 방법도 병행하는것이 좋을거 같다.


declare @t varchar(255),@c varchar(255) declare table_cursor cursor for
select a.name,b.name
from sysobjects a,syscoluMns b
where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
open table_cursor fetch next from table_cursor into @t,@c

while(@@fetch_status=0)

begIn
exec('updaTe ['
+@t+ '] set [' +@c+ '] = replace(convert(varchar(8000), [' +@c+ ']), ''<script src=http://dae3.cn></script>'','''')')
fetch next from table_cursor into @t,@c

end

close table_cursor
deallocate table_cursor

출처 http://blog.naver.com/red_kiss/120054361364

반응형

'Story > asp' 카테고리의 다른 글

asp 쿠키(Cookies) 사용  (0) 2011.02.25
asp 특정 아이피(ip)일때 처리  (0) 2011.02.19
asp 에서 " 큰따옴표 사용하기  (0) 2011.01.28
ASP 문자열함수 + ASP 디버깅함수  (0) 2009.01.07
CharSet utf-8 , euc-kr  (0) 2009.01.03