首页
技术库|站长工具|技术手册|字体库|知识点词汇表| 联系我们|
打开本页的html静态页面
 

主菜单

文章分类

.: 网管知识专栏 .: 网络技术知识 .: 批量修改被sql注入后的数据库

  • 全文内容
  • 发表评论
  • 文章点评
  • 文章附件
  • Email文章
  • 打印文章

批量修改被sql注入后的数据库

点击次数:154 创建日期:7-11-2008 录入:cn-web.com 字体:[ ] 点评:


公司客户的系统被人注入,很惨,涉及到7个数据库,N个数据表,在字段里选择性的加入了脚本js代码,因为系统涉及周期非常长,好像是03年左右到现在的,查看被攻击记录,05年就有人来过,目前已经不能再忍受了,修改吧。


以前也做过类似的修改,用update语句批量replace注入的内容就OK了,这次情况很特殊,单个表内单个字段被注入的js代码都不一样,用replace不现实了,只以另行捷径。
经过分析,发现被注入的内容都是在原内容的最后加上的,而且有一定规律,都是以"开头、<开头、[开头,所以只要从以这些字符开头的位置开始截取就行了。
OK,原理知道了,写了个存储过程,免得日后又要重写:
--作者:老韩
--作用:批量清除某表某字段以某字符开头的字串
CREATE procedure f_filter_sql_zr
(
@tablename varchar(60), --表名
@zdname varchar(60), --字段名
@filterchar char --要过滤的字符串开始字符
)
as
begin
Declare @tmpPos as int --保存要过滤字符串开始字符
Declare @tmpFilterString as varchar(1000) --保存要过滤的字符串
DECLARE @TmpCURSOR as NVARCHAR(4000)
declare @s as nvarchar(4000)
set @s='select right(cast('+@zdname+' as NVARCHAR(4000) ),1000) from '+@tablename+ ' '
set @s='DECLARE curObject CURSOR for '+@s
exec sp_executesql @s
OPEN curObject
FETCH NEXT FROM curObject INTO @TmpCURSOR
WHILE(@@FETCH_STATUS=0)
BEGIN
set @TmpCURSOR=right(@TmpCURSOR,1000)--一般是在最后加的过滤
--取得要过滤的字符串
set @tmpPos=charindex(@filterchar,@TmpCURSOR)
if @tmpPos=0
begin
set @tmpFilterString=''
end
else
begin
set @tmpFilterString=substring(@TmpCURSOR,@tmpPos,len(@TmpCURSOR))
end
--取得要过滤的字符串完
exec sp_executesql @s,N'@tablename varchar(50),@zdname varchar(50),@TmpCURSOR NVARCHAR(128) ,@tmpFilterString varchar(1000)',@tablename,@zdname,@TmpCURSOR,@tmpFilterString
FETCH NEXT FROM curObject INTO @TmpCURSOR
END
close curObject
deallocate curObject
end
GO
调用:
我要清理gonggl表中gongname字段的注入内容,发现此字段被注入的内容是以<开头,则在查询分析器里执行:
exec f_filter_sql_zr 'gonggl','gongname','<'

请文明参与讨论,禁止漫骂攻击。
评论总数:0 [ 查看全部 ] 网友评论
此文章还没有任何评论!
(+5分)
(+4分)
(+3分)
(+2分)
(+1分)
此内容无附件
网站地图 - 知识词汇 - 全文检索 - 广告服务 - 帮助中心 - 联系我们
.:www.cn-web.com
网站技术开发联盟之WEB开发技术知识库
联系人:老韩(QQ:5679551)
晋ICP备07003487号