5.4 SQL注入

数据库存储着数据,并将数据以某种逻辑顺序进行组织。Oracle和Microsoft SQL是流行的数据库管理系统的例子,它们允许用户创建多种类型的数据库来用于存储,并以全新的方式来组织数据。

结构化查询语言,也就是我们熟知的SQL,是底层通用编程语言,可以被大多数数据库管理系统理解。它使用一组数据库可以理解的公共命令,为应用访问数据库中的数据提供了一个通用途径。

攻击者可以对这些数据库进行利用,使其显示本不该显示的输出信息。有时这种攻击会非常简单,就是攻击者直接向数据库管理系统查询一些特权信息。有时,攻击者利用的是数据库管理员的不当配置。攻击者也可能会利用数据库管理系统的漏洞,他们通过这些漏洞可以查看或写入数据库中的特权命令。

攻击者经常会通过表单或Web页面中允许用户输入的其他部分来发送恶意代码。举个例子,攻击者可能会输入随机字符,以及长声明,这样就能发现输入变量和参数设计中的薄弱的地方。如果某个输入字段被设为只接受不超过15个字符的用户名,那么错误提示就会显示数据库是如何被配置的细节。

Firefox插件HackBar支持测试SQL查询,并将你的查询注入,改变SQL请求。HackBar插件也允许渗透测试人员检查HTTP提交的信息。

在下面的例子中,我们会尝试在网站DrChaos.com上进行SQL注入。我们先在Kali服务器控制台上用Firefox打开www.DrChaos.com ,并尝试登录该网站。首先,我们尝试用用户名administrator和密码12345来登录。登录不会成功。

这时,进入Firefox的View 菜单栏,选择HackBar 菜单。点击Load URL 按钮,并点击Enable Post data 按钮。你会看到我们要登录的URL以及刚刚尝试的用户名和密码。

现在我们来在用户名administrator后面加一个单引号。就在我们点击Execute 按钮后,我们收到了一个SQL注入。这说明服务器可能是有SQL注入的漏洞的,因为服务器返回了SQL错误。

我们在该行尾部添加一个OR 1=1 ##语句来添加一个SQL注入。

执行代码后,我们就以管理员身份登录到了www.drchaos.com

我们已经给www.DrChaos.com 打了补丁,所以这种攻击对它已经没用了。不过,你能看到SQL注入对攻击来说非常有用,因为它们能为Web渗透测试人员提供一个获得系统的全部权限的简便方法。

SQL注入是否成功取决于攻击者对SQL命令的理解。如果你需要温习一下SQL技能,我们建议你看看位于http://www.w3schools.com/sql/sql_intro.asp 的W3学院SQL教程。

sqlmap

sqlmap可以用于自动化检测和利用SQL注入漏洞的过程以及接管数据库服务器。sqlmap自带了一个检测引擎,以及大量的渗透测试功能,从数据库指纹到访问底层文件系统和在操作系统上通过带外连接执行命令。

功能还包括对通用数据库管理系统的支持、对许多SQL注入技术的支持、枚举用户、密码哈希,以及许多其他功能。sqlmap也支持通过Metasploit的Meterpreter的getsystem 命令来对数据库的用户特权进行提权。

sqlmap是一个可对数据库服务器进行利用的Kali内建工具。要使用sqlmap,你需要将该工具指向Web服务器上某个调用SQL的脚本的URL。这些都能辨别,因为它们通常会在URL中带php

你可以浏览Vulnerability Analysis > Database Assessment > sqlmap 。它会打开个终端窗口来显示sqlmap的帮助信息。

使用sqlmap的基本语法格式为:

sqlmap –u URL --function

有个常用的功能是的dbs。dbs 关键字会让sqlmap 获取数据库。

sqlmap -u http://www.drchaous.com/article.php?id=5 --dbs

你能从我们的结果中看出我们已经有若干找到的数据库了。在这个例子中,我们会将精力集中在test数据库上。

找到了有漏洞的Web服务器之后,你可以通过使用-D 命令和数据库的名称来选择数据库。

sqlmap –u http://www.drchaos.com/article.php?id=5 -D test  --tables

tables 关键字用于取得我们的Web服务器上test 数据库中的所有表。我们能看到,我们已经成功获取了两张表——admincontent

调用如下命令后,sqlmap 会显示所有的表:

sqlmap -u http://www.drchaous.com/article.php?id=5  -D test --tables

特定行也可用如下命令来选择:

sqlmap -u http://www.drchaous.com/article.php?id=5  -T tablesnamehere --columns

如果在表中有任何相关信息,你可以用如下命令来搜索:

sqlmap -u http://www.drchaous.com/article.php?id=5  -T tablesnamehere -U test --dump

它会创建一个名为test 的文件,然后将数据库表中的所有原始数据都转存到那个文件中。许多情况中,这些信息包括密码和其他敏感信息。