• SQL2005 使用SQL语句批量删除被注入的恶意代码的方法

    最近一朋友的网站访问时 360安全卫士提示有木马病毒,在google上搜索网站名称,也被冠以“该网站可能含有恶意软件,有可能会危害您的电脑。” 网站是IIs+ASP+sql server 2005

    打开杀毒软件,360,冒着风险访问这个网址,然后360报“来自h--p://boytimes..cn/s.js”木马病毒。

    然后查看网页源代码,发现有图片,有链接的地方都被插入了

    服务器上的ASP页面文件没有被修改的迹象,被修改时间也是正常的,服务器的资源也很正常,CPU  内存使用率都不高。查看了一下SQL数据库表中的数据,果然每个varchar类型的字段里都被插入了

    所以初期判断是数据库被注入了。

    启动【 SQL Server Management Studio 】 在做操作之前将数据库备份一下。如何备份sql2005的数据库,请google吧,不难。

    完整备份之后,新建一个查询,输入如下,用你数据库中有问题的部分替换掉有红色有下划线的部分,然后右击执行。

    declare @t varchar(255),@c varchar(255) 
    declare table_cursor cursor for select a.name,b.name  
    from sysobjects a,syscolumns b ,systypes c  
    where a.id=b.id and a.xtype='u' and c.name  
    in ('char', 'nchar', 'nvarchar', 'varchar','text','ntext') 
    declare @str varchar(500),@str2 varchar(500)  
    set @str=' '/*要替换的内容放在引号里*/ 
    set @str2=''
    open table_cursor  
    fetch next from table_cursor  
    into @t,@c while(@@fetch_status=0)  
    begin exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') 
    fetch next from table_cursor  
    into @t,@c end close table_cursor deallocate table_cursor;

    然后再查看数据库的表里的内容是不是正常了。

    当然这个方法只是治标治不了本,下次还是会被注入,要根治的办法还是得修改程序漏洞。