我读过不同的数据库(mysql,sql server,.)有不同的漏洞,它们容易受到某些特定sql注入的攻击。
当攻击者试图对网站(如SQL注入)执行数据库攻击时,首先确定数据库的类型,然后执行检测到的数据库的攻击思路。
攻击者如何执行先前的检查?使用一些特殊的查询?有没有特定的工具?我还没找到这方面的任何信息。
发布于 2012-12-10 12:35:16
除了其他答案之外,我用于数据库指纹的一种方法(尤其是当注入是盲目的,而不是数据被返回时)是数据库引擎之间语法上的差异。我倾向于使用的这份报告幻灯片34上有一个很好的示例。
因此,一个很好的例子是字符串连接。MS和DB2使用+,而Oracle /SQL和PostGRES使用的是巧用收,所以您可以将其插入字符串中,并观察应用程序的行为。如果它的行为类似于字符串被连接,那么它可能是注入。
发布于 2012-12-10 11:58:43
攻击者确定应用程序正在使用的数据库的最简单方法之一是在数据库查询中以某种方式导致应用程序出错。
然后,如果应用程序中没有启用错误处理(通常不启用),则会显示数据库错误。这些通常是相当详细的,您可以从中确定数据库。
如果您知道web应用程序所用的任何语言、正在使用的框架、正在使用的平台、托管提供商等,也值得考虑。它们都可以帮助计算出正在使用的数据库。例如,如果使用的是asp,则最有可能使用MSSQL,如果使用的是PHP,则最有可能使用MySQL。显然,这并不总是正确的,但如果您不得不猜测,比方说,盲目的sql注入会攻击另一种缩小范围的方法。
发布于 2012-12-14 03:26:35
有许多方法可以做到这一点。但是,请注意,您不需要知道执行攻击所需的数据库类型。知道它可能会提供额外的或替代的攻击矢量,但对于SQL注入来说并不是必要的。
大多数数据库提供函数或有字典故事,可以用来识别数据库类型和版本。供应商之间的不同之处在于,如果您已经找到了一个通用的sql注入点,那么您只需尝试每个点,直到得到有效的响应为止。
SQL的许多不同方言之间也有句法上的差异。例如,Oracle具有表示外部联接的(+)语法。在可用的数据类型上常常存在细微的差异,例如postgres的文本类型( Oracle没有这种类型),或者序列/自动递增列的处理方式等等。
有时,您可以通过获取数据库驱动程序或连接器的详细信息来判断。取决于环境、语言等,这可能是微不足道的,也可能不是微不足道的。
https://security.stackexchange.com/questions/25213
复制相似问题