2008.12.10 22:52
안녕하세요 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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
10 | SQL 인젝션에 이용되는 XP_cmdshell 확장프로시져 삭제 방법 | dhkim | 2008.12.24 | 18513 |
» | SQL 인젝션 치료용 커서 | dhkim | 2008.12.10 | 15077 |
8 | MS-SQL 개체 소유권 변경 | 레이쩡 | 2008.09.18 | 24881 |
7 | MS SQL 트랜잭션 로그를 줄이는 방법 | 레이쩡 | 2008.09.18 | 21235 |
6 | Microsoft Source Code Analyzer for SQL Injection 관련 자료 | dhkim | 2008.07.25 | 21539 |
5 | MDF파일만 있을 경우 복구하는 방법(SQL2000만 해당) | shpark | 2008.07.07 | 24685 |
4 | SQL Server 인덱스 설정의 효과 | dhkim | 2008.06.27 | 23596 |
3 | tempdb 복구 및 이동 방법 | hostway | 2008.05.15 | 22793 |
2 | 실행중인 Mssql 버젼 확인 | hostway | 2008.05.15 | 25314 |
1 | sql injection 보안 점검 | hostway | 2008.05.14 | 21726 |