怎么预防SQL Injection 漏洞利用攻击(三)
>首页 -> 社会专题 -> 硬件网络 2010-07-08 来源: 作者: 【】 浏览:2838

Bword(14)=")"

Bword(15)="--"

Bword(16)=" chr(9)"

Bword(17)=" chr(34)"

Bword(18)=" chr(32)"

errc=false

‘以下是应用实例部分

for i= 0 to ubound(Bword)

if instr(FQYs,Bword(i))<>0 then

errc=true

end if

next

if errc then

response.write " "

response.end

end if

程序体(3)

有了上面的过滤函数您可以在任何需要过滤的地方应用过滤函数直接使用就可以了。这就使我们的修复工作大大的简化了。

另外,我想在这里再次多提醒一下,一些站点的UBB在进行小的表情图标转化时也会出现过滤问题,由于很隐蔽所以不容易发现:

如:

我们标签内的文字进行修改,

不知道各位看懂没,前一个单引号用来中和程序提供的左引号,第二个单引号用来中和闭合的右引号,这样程序输出就为:

如果图片不存在,那么将激活onerror标签执行脚本程序。对于已经过滤了单引号的站点在这里用双引号一样可以完成。对于过滤了****字段的,只用alert()也完全可以。所以说要过滤就要过滤完全,别给攻击者留下一丝机会。

防范SQL Injection 漏洞攻击

可以这样说,这里似乎是整篇文章的重点了.SQL Injection 漏洞攻击的的多样化也使得我们在程序防护上不得不想的更多一些。面对SQL Injection 的强大"攻势",我们到底该过滤哪些?

一些常用的危险字符有

' 数据库字段判别封闭

-- 某些数据库注释标志

# 某些数据库注释标志

" 可能导致程序出错

\ 跨越目录

3221143836nicode编码的特征字符

$ 可能用于变量标注

/ 和\ 一样

NULL 小心"空"录入的危险,可能导致数据库或系统处理报错,利用报错构造溢出.

空格和'一起,构造sql injeciton

? = & 如果存在二次参数传递,可能改写querystr。

(1) 从最一般的.SQL Injection 漏洞攻击来看:用户名和密码上的过滤问题,如:

提交:用户名为:'or''=' 用户密码为:'or''='

从程序出发,我们完全可以得出,数据库在执行以下操作

Sql=" SELECT * FROM lUsers WHERE Username=''or''='' and Password = ''or''=''"

这样一来,这样,SQL 服务器将返回 lUsers 表格中的所有记录,而 ASP 脚本将会因此而误认为攻击者的输入符合 lUsers 表格中的第一条记录,从而允许攻击者以该用户的名义登入网站。对此类注入的防范似乎简单的很:

利用以下程序就可以实现,程序体(4)

strUsername = Replace(Request.Form("Username"), "''", "''''")

strPassword = Replace(Request.Form("Password"), "''", "''''")

程序体(4)

(2)杜绝SQL 注入式攻击的第一步就是采用各种安全手段监控来自 ASP request 对象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用户输入,以确保 SQL 指令的可靠性。具体的安全手段根据你的 DBMS 而异。

SQL 注入式攻击可能引起的危害取决于该网站的软件环境和配置。当 Web 服务器以操作员(dbo)的身份访问数据库时,利用SQL注入式攻击就可能删除所有表格、创建新表格,等等。当服务器以超级用户 (sa) 的身份访问数据库时,利用SQL注入式攻击就可能控制整个 SQL 服务器;在某些配置下攻击者甚至可以自行创建用户帐号以完全操纵数据库所在的 Windows 服务器。

如:

http://127.0.0.1/forum/showuser.asp?id=999';declare @a sysname set @a='xp_'+

'cmdshell' exec @a 'dir c:\'--&aid=9

http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp'+

'_cm'+'dshell' exec @a 'dir c:\'--&aid=9

甚至可以执行像:net user fqy fqy /add 这样的指令.当然这就需要你当前的运行身份必须是Sa,或者你攻击的只是一台虚拟主机,我劝你还是就此打住.

对于一些整机使用的站点来说防止通过80端口攻击而直接拿到整机管理权限,这一点就变得至关重要了。对xp_cmdshell 的过滤就成为首要,很多站点的程序都是用GET或者是GET与POST混合来提交数据的,对于此,我们给出一种防止GET进行SQL注入的程序:如程序体(5)

fqys=request.servervariables("query_string")

dim nothis(18)

nothis(0)="net user"

nothis(1)="xp_cmdshell"

nothis(2)="/add"

nothis(3)="exec%20master.dbo.xp_cmdshell"

nothis(4)="net localgroup administrators"

nothis(5)="select"

nothis(6)="count"

nothis(7)="asc"

nothis(8)="char"

nothis(9)="mid"

nothis(10)="'"

nothis(11)=":"

nothis(12)=""""

nothis(13)="insert"

nothis(14)="delete"

nothis(15)="drop"

nothis(16)="truncate"

nothis(17)="from"

nothis(18)="%"

errc=false

for i= 0 to ubound(nothis)

if instr(FQYs,nothis(i))<>0 then

您看到此篇文章时的感受是:
Tags: 责任编辑:佚名
免责申明: 除原创及很少部分因网文图片遗失而补存外,本站不存储任何有版权的内容。你看到的文章和信息及网址索引均由机器采集自互联网,由于时间不同,内容可能完全不同,请勿拿本网内容及网址索引用于交易及作为事实依据,仅限参考,不会自行判断者请勿接受本站信息,本网转载,并不意味着赞同其观点或证实其内容的真实性.如涉及版权等问题,请立即联系管理员,我们会予以更改或删除,保证您的权利.对使用本网站信息和服务所引起的后果,本网站不作任何承诺.
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论:0条】 【关闭】 【返回顶部
微信分享二维码

打开微信扫一扫分享

上一篇网管如何保护在网络上传输的个人.. 下一篇windows7/8升级win10卡在32%造成..
密码: (新用户注册)

最新文章

图片主题

热门文章

推荐文章

相关文章

便民服务

手机扫描

空间赞助

快速互动

论坛互动
讨论留言

有事联系

有哪个那个什么的,赶紧点这里给DOVE发消息

统计联系

MAIL:gnlt@Dovechina.com
正在线上:1

版权与建议

任何你想说的