最近 網站的數據庫被注入了代碼,同事要我搞個SQL給他,
剛好自己收藏下, 免得以後在寫,最好是不要用了
廢話少說 ,上碼
以下sql語句針對於數據庫列後邊注入代碼的情況.
nvarchar 類型的替換方式
update tablexxx
set columns=replace(columns , substring(columns , charindex('</a' , columns),len(columns)-charindex('</a' , columns)+1),'')
where charindex('</a' , columns),len(columns) >0
text , ntext 類型的替換方式
(1)當字段長度小於8000
update test set textdemo=replace(convert(varchar(8000),textdemo),
substring(textdemo , charindex('<div class="wxmsjhqx"' , textdemo),len(convert(varchar(8000),textdemo))-charindex('<div class="wxmsjhqx">' , textdemo)+1),'')
where charindex('<div class="wxmsjhqx"' , textdemo) >0
(2)大於 小於 8000多可以用
declare @s_str varchar(8000) ,@d_str varchar(8000)
--要替換的字符串
select @s_str ='要替換的字符串',
@d_str=''
declare @ptrval varbinary(16) ,@str int ,@rplen int
declare cur cursor for select textptr(textdemo),
charindex('<div class="wxmsjhqx">' ,textdemo)-1,
len(@s_str)
from test where textdemo like '%<div class="wxmsjhqx">%'
open cur
fetch next from cur into @ptrval ,@str ,@rplen
while(@@fetch_status =0)
begin
declare @sql nvarchar(1000)
set @sql = 'UPDATETEXT test.textdemo @ptrval '+ltrim(@str)+' '+ltrim(@rplen)+' N'''''
exec sp_executesql @sql ,N'@ptrval varbinary(16)' ,@ptrval
print @rplen
print @str
print @ptrval
fetch next from cur into @ptrval ,@str ,@rplen
end
close cur
deallocate cur
數據 表
CREATE TABLE [dbo].[test](
[id] [int] IDENTITY(1,1) NOT NULL,
[mytext] [nvarchar](3000) COLLATE Chinese_PRC_CI_AS NULL,
[textdemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
語句比較簡單。