探测漏洞
随手找了个页面(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