sql注入數據庫修復的兩種實例辦法。本站提示廣大學習愛好者:(sql注入數據庫修復的兩種實例辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是sql注入數據庫修復的兩種實例辦法正文
1.第一種情形是 須要將指定的 注入字符串全體調換失落(僅調換注入的字符串為空)
declare @delStr nvarchar(500)
set @delStr='<script src=http://www.jb51.net/js/common.js></script>' --這裡被注入的字段串
/****************************************/
/**********以下為操作實體************/
set nocount on
declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
declare @sql nvarchar(2000)
set @iResult=0
declare cur cursor for
select name,id from sysobjects where xtype='U'
open cur
fetch next from cur into @tableName,@tbID
while @@fetch_status=0
begin
declare cur1 cursor for
select name from syscolumns where xtype in (231,167,239,175, 35, 99) and id=@tbID
open cur1
fetch next from cur1 into @columnName
while @@fetch_status=0
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']= SUBSTRING([' + @columnName + '],' + '1, PATINDEX( ''%' + @delStr + '%'', [' + @columnName + '])-1) + ' + 'SUBSTRING([' + @columnName + '], PATINDEX( ''%' + @delStr + '%'', [' + @columnName + ']) + ' + 'len(''' + @delStr + ''') , datalength([' + @columnName + '])) where ['+@columnName+'] like ''%'+@delStr+'%'''
exec sp_executesql @sql
set @iRow=@@rowcount
set @iResult=@iResult+@iRow
if @iRow>0
begin
print '表:'+@tableName+',列:'+@columnName+'被更新'+convert(varchar(10),@iRow)+'筆記錄;'
end
fetch next from cur1 into @columnName
end
close cur1
deallocate cur1
fetch next from cur into @tableName,@tbID
end
print '數據庫教程共有'+convert(varchar(10),@iResult)+'筆記錄被更新!!!'
close cur
deallocate cur
set nocount off
2.第二種是 須要將注入到表中肇端地位到最初都刪失落。(此種辦法直接找到注入的肇端地位,前面的全體刪失落)
--恢復被注入數據庫
--2013-09-26
declare @delStr nvarchar(500)
set @delStr='</title><style>.' --被注入的字段串的開端采樣,從此地位前面的數據都為注入數據
/**********以下為操作實體************/
set nocount on
declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
declare @sql nvarchar(2000)
set @iResult=0
declare cur cursor for
select name,id from sysobjects where xtype='U'
open cur
fetch next from cur into @tableName,@tbID
while @@fetch_status=0
begin
declare cur1 cursor for
select name from syscolumns where xtype in (231,167,239,175, 35, 99) and id=@tbID
open cur1
fetch next from cur1 into @columnName
while @@fetch_status=0
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']=
SUBSTRING([' + @columnName + '],1, PATINDEX( ''%' + @delStr + '%'', [' + @columnName + '])-1) where ['+@columnName+'] like ''%'+@delStr+'%'''
exec sp_executesql @sql
set @iRow=@@rowcount
set @iResult=@iResult+@iRow
if @iRow>0
begin
print '表:'+@tableName+',列:'+@columnName+'被更新'+convert(varchar(10),@iRow)+'筆記錄;'
end
fetch next from cur1 into @columnName
end
close cur1
deallocate cur1
fetch next from cur into @tableName,@tbID
end
print '數據庫教程共有'+convert(varchar(10),@iResult)+'筆記錄被更新!!!'
close cur
deallocate cur
set nocount off