Skip to main content

测试SQL注入漏洞

网络安全 SQL注入专题3 SQL注入漏洞寻找、利用及判定依据 (六月 2025)

网络安全 SQL注入专题3 SQL注入漏洞寻找、利用及判定依据 (六月 2025)
Anonim

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注入攻击,包括:

  • 对所有应用程序实施参数检查。例如,如果您要求某人输入客户编号,请确保在执行查询之前输入为数字。
  • 限制执行SQL查询的帐户的权限。适用最小特权规则。如果用于执行查询的帐户没有执行权限,则不会成功。
  • 使用存储过程(或类似技术)来防止用户直接与SQL代码交互。