'sql 전체 테이블 문자검색변경'에 해당되는 글 1건

  1. 2008.07.15 mssql 전체 테이블 문자 검색 변경

mssql 전체 테이블 문자 검색 변경

angel830514 2008.06.03 13:48

답변 2 NEW | 조회 517

MSSQL에 웹해킹으로 DB안에 특정 사이트로 이동하는 자바스크립트 문을 넣어놨는대요.


예를 들어 게시판이라면 제목과 본문뒤에 <script ....> 와 같은 글을 적어놨습니다.


문제는 회원 아이디부분에도 들어가 스크립트만 싹 지워야하는대


 전체 테이블에서 해당 문자 검색해서  해당 문자만 변경하게 할려면 어떻게 해야하나요?


테이블 수가 많아 하나하나 노가다 하기는 너무 많습니다.


방법즘 알려주세요.

질문자 선택

re: mssql 전체 테이블 문자 검색 변경

resetman71

답변채택률 72.7%

2008.06.03 16:21

질문자인사 알려주신 내용을 기반으로 보강해서 수정했습니다. 감사합니다.

검정된 쿼리입니다.

검색 쿼리와 추가된 <script 등을 제거해주는 쿼리입니다.


아래의 쿼리를 돌리기 전에 해당 DB로 가셨어 각 DB마다 확인을 하신 후 발견되시면 제거해주면
됩니다.


* Script 삽입 공격을 당했는지 확인하는 쿼리

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>''');
-- print 'select ['+@C+'] from ['+@T+'] where ['+@C+'] like ''%<script%</script>'''

  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

* 위의 공격을 당했을 때 복원하는 쿼리 (100% 다 되는 것은 아님 - 별도 확인 필요)

* 해킹 시 길이가 긴 경우에는 짤리고 들어가는 현상이 발생함 - 이 경우에는 복원을
해도 원상복구가 안됨

* 백업 받은 것을 복원하는 수 밖에는 없음

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;

꼭 복구하시기 바랍니다. 홧팅.

그 외 답변들 1

받은 추천순 | 최신순

re: mssql 전체 테이블 문자 검색 변경

warez104

답변채택률 89.2%

2008.06.03 14:19

시스템 테이블인 sysobjects테이블과 syscolumns테이블을 이용해서
스크립트를 생성해서 EXEC명령으로 실행하는 방법이 있습니다.


대충 만들어보면...

DECLARE @SQL varchar(1000), @TableName varchar(128),
@ColumnName varchar(128), @SearchText varchar(1000)

SET @SearchText = '<SCRIPT>
...
...
</SCRIPT>
'

DECLARE cur_COLUMNS CURSOR FOR
SELECT TableName = m.name, ColumnName = d.name
  FROM sysobjects m, syscolumns d
 WHERE m.xtype = 'U' AND m.id = d.id

OPEN cur_COLUMNS

FETCH NEXT FROM cur_COLUMNS
INTO @TableName, @ColumnName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'UPDATE ' + @TableName + ' SET ' + @ColumnName +
 ' = REPLACE(' + @ColumnName + ', ''' + @SearchText + ''', '''' )'
    EXEC @SQL
    FETCH NEXT FROM cur_COLUMNS
    INTO @TableName, @ColumnName
END

CLOSE cur_COLUMNS
DEALLOCATE cur_COLUMNS

이런 식으로 녹색 부분에 찾아서 없앨 텍스트를 적고,
SQL문자열을 만들어서 실행하는 방법이 있습니다.


출처 : 직접서술

Posted by onewater
,
이전 1 다음