扫一扫
关注微信公众号

攻防实战:注入漏洞的利用和防范
2008-11-14   

参加IT认证考试前,笔者习惯到网上去搜搜。乱逛之余,不小心就来到了PROMETRIC的中文站。笔者发现整个站点都是ASP程序,况且刚才还有个考场的登录界面,要是能发现什么漏洞就好了。

探测漏洞

随手找了个页面(http://www.promet.ric.com.cn/openpage.asp?page_id=0),在参数0后面加上个单引号。返回的页面显示:500服务器内部错误。在IE的“Internet选项→高级”中有一个“显示友好HTTP错误信息”的选项,取消前面的钩。现在,我们可以看到详细的错误信息:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14' 

[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ''./audIT.asp,行18??


原来PROMETRIC用的是MSSQL,看来存在严重的注入漏洞(由于涉嫌攻击步骤,此处不详细叙述)。

漏洞原理

SQL注入的漏洞通常是由于程序员对它不了解,设计程序时某个参数过滤不严格所致。就拿刚才测试用的链接中的page_id这个参数来讲,肯定就没有进行过滤检查,源程序中的查询语句如下所示:

?Select * From Table Where page_id='0'??

当我们提交http://www.prometric.com.cn/openpage.asp?page_id=0 and 1=1时,

查询语句就变成了:

Select * From Table Where page_id='0' and 1=1??

当我们提交其他的查询语句时,程序也会进行执行判断,如:

http://www.prometric.com.cn/openpage.asp?page_id=0 and user>0 

查询语句变成了:

Select * From Table Where page_id='0' and user>0??user是MSSQL的一个内置函数,指的是当前连接数据库的用户名,是一个nvarchar值。当它与整型量0进行大小比较时,MSSQL会试图将user的值转换成int类型,于是MSSQL就会报错:

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'web' to a column of data type int.

错误信息的后面显示的是库名、表名、数据等。如果对方屏蔽了错误信息呢?这时,我们就要利用Unicode、Substr等函数通过条件判断来进行猜测了。??

如何利用 

大家可以利用小竹开发的NBSI2 MSSQL(以下简称“NBSI2”)工具。不过大家要注意,工具永远只是工具,只能用来提高效率和准确性,自己一定得了解原理。 


热词搜索:

上一篇:不容忽视被人轻视的“七大网络安全误解”
下一篇:实战经验:网吧入侵过程全方位剖析

分享到: 收藏