SQL注入攻击给依赖于数据库后端生成动态内容的Web应用程序带来了巨大风险。在这种类型的攻击中,黑客操纵Web应用程序,试图将自己的SQL命令注入数据库发出的命令。有关示例,请参阅文章SQL注入攻击数据库。在本文中,我们将介绍几种测试Web应用程序的方法,以确定它们是否容易受到SQL注入攻击。
自动SQL注入扫描
一种可能性是使用自动化Web应用程序漏洞扫描程序,例如HP的WebInspect,IBM的AppScan或Cenzic的Hailstorm。这些工具都提供了简单,自动的方法来分析您的Web应用程序是否存在潜在的SQL注入漏洞。然而,它们非常昂贵,每个座位最高可达25,000美元。
手动SQL注入测试
什么是糟糕的应用程序开发人员?实际上,您可以运行一些基本测试,仅使用Web浏览器来评估Web应用程序的SQL注入漏洞。首先,请注意:我们描述的测试仅查找基本的SQL注入漏洞。他们不会检测先进的技术,使用起来有点乏味。如果您负担得起,请使用自动扫描仪。但是,如果您无法处理该价格标签,手动测试是第一步。评估应用程序是否易受攻击的最简单方法是尝试无害的注入攻击,如果成功,它们实际上不会损害您的数据库,但会为您提供需要纠正问题的证据。例如,假设您有一个简单的Web应用程序,它可以在数据库中查找个人并提供联系信息。该页面可能使用以下URL格式: http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike
我们可以假设此页面使用类似于以下内容的查询执行数据库查找: 选择手机
FROM目录
WHERE lastname ='chapple'和firstname ='mike'
让我们试试一下。通过上面的假设,我们可以对测试SQL注入攻击的URL进行简单的更改: http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1
如果Web应用程序没有得到适当的SQL注入保护,它只需将这个伪名字插入它对数据库执行的SQL语句中,从而导致: 选择手机
FROM目录
WHERE lastname ='chapple'和firstname ='mike'
AND(从假冒中选择计数(*))> 0
或'1'='1'
您会注意到上面的语法与原始URL中的语法略有不同。我们冒昧地将URL编码变量转换为ASCII等价物,以便更容易地遵循该示例。例如,%3d是'='字符的URL编码。我们还为类似目的添加了一些换行符。 当您尝试使用上面列出的URL加载网页时,会进行测试。如果Web应用程序运行良好,它会在将查询传递给数据库之前从输入中删除单引号。这只会导致对包含一堆SQL的名字的人进行奇怪的查找。您将看到来自应用程序的错误消息,类似于下面的消息: 错误:找不到名称为mike + AND +的用户(选择+计数(*)+来自+假)+%3e0 + OR + 1%3d1
查普尔!
另一方面,如果应用程序容易受到SQL注入的攻击,它会将语句直接传递给数据库,从而产生两种可能性之一。首先,如果您的服务器启用了详细的错误消息(您不应该这样做),您将看到如下内容: Microsoft OLE DB Provider for ODBC Drivers错误'80040e37'
Microsoft ODBC SQL Server驱动程序 SQL Server无效的对象名称“假”。
/directory.asp,第13行
另一方面,如果您的Web服务器没有显示详细的错误消息,您将收到更一般的错误,例如: 内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。
请与服务器管理员联系,以告知错误发生的时间以及可能导致错误的任何操作。
服务器错误日志中可能提供了有关此错误的更多信息。
如果您收到上述两个错误之一,则您的应用程序很容易受到SQL注入攻击。您可以采取一些步骤来保护您的应用程序免受SQL注入攻击,包括: 评估结果