参加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>0user是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”)工具。不过大家要注意,工具永远只是工具,只能用来提高效率和准确性,自己一定得了解原理。