首页
社区
课程
招聘
[翻译]黑掉SQL Server数据库链接:实验的设置和攻击指南
发表于: 2017-6-11 21:53 5916

[翻译]黑掉SQL Server数据库链接:实验的设置和攻击指南

2017-6-11 21:53
5916


现代的应用程序驱动着我们的世界。 每天他们都习惯于访问银行帐户,管理医疗保健计划,并从互联网远程启动汽车。大多数人都知道存储类似于社会保障号码,信用证卡号和保健信息这些敏感数据的背后是一个数据库。 然而,大多数人没有意识到的是泄露一个数据库,通常可以用最小的代价接管各种企业环境。 其中一种方法是通过“数据库链接”。

数据库链接本质上是从一个数据库服务器到另一个数据库服务器的可信连接。 数据库链接可以“爬网”,类似于抓取网站的超链接。 通过爬行从数据库服务器到数据库服务器的链接,可以访问通常不能被用户访问的数据和系统。 在现代企业环境中,使用数据库链接抓取技术获取对数百个数据库服务器的未经授权的访问并不罕见。 这种访问通常导致敏感数据和网络的完全泄露。 可以通过直接数据库连接和SQL注入攻击来启动数据库链接抓取。 更好地了解与这种数据库配置相关的风险变得更加重要。

在本文中,我提供了创建可用于通过直接连接和各种类型的SQL注入对SQL Server数据库链接执行攻击的实验室环境的说明。 我还提供了数据库链接的一般介绍和如何利用它们的示例。 这些内容应该有助于渗透测试人员,Web开发人员和数据库管理员尝试更好地了解与数据库服务器链接配置错误或过度使用相关的风险。 尽管本文重点介绍SQL Server,但将涵盖的许多概念可以应用于其他数据库平台。

在我们动手之前,让我们简短的了解一下数据库链接。 微软声称数据库链接可用于“使SQL Server数据库引擎能够针对SQL Server实例之外的OLE DB数据源执行命令”。 这基本上意味着我们可以在数据库级别创建预配置的“链接”,以连接和查询各种数据存储,包括但不限于:

如果你不是数据库管理员,可能不明白为什么有人想要配置数据库链接。 下面我提供了一些我们遇到的常见用例。

对于有兴趣的人,我列出了在SQL Server上列出数据库链接的两种方法。 默认情况下,您应该看到自己的服务器。 但是,数据访问将被禁用,所以我不相信你可以查询它。

有关更多信息,您可以访问Microsoft的Linked Server页面,网址为http://msdn.microsoft.com/en-us/ library/ms188279.aspx

尽管数据库链接非常有用,但它们通常配置有过高的权限,可能导致多个数据库和系统的折中。 以下是数据库链接可能出现的风险的简短列表。

过高的权限是很常见的。 大多数DBA使用静态用户名和密码来配置数据库链接,而不是配置数据库链接来继承执行查询的数据库用户的权限。 这意味着当数据库用户查询链接时,查询将使用预配置的链接权限运行,而不是数据库用户的。

•默认情况下可以使用Openquery()。 Openquery()是可用于查询链接服务器的本地SQL Server函数。 默认情况下,属于PUBLIC固定服务器角色的任何SQL登录名都可以使用它查询数据库链接。 所以与类似的openrowset()函数不同,它通常允许所有数据库用户默认查询所有预配置的数据库链接。 下面是一个基本的Openquery示例:

•可以嵌套数据库链接查询。 所有数据库链接查询都可以通过openquery()函数嵌套。 因此,数据库链接可以从数据库服务器到数据库服务器,类似于网页抓取。 在我们的测试期间,我们发现数据库链接抓取可能导致对我们称为“数据库链接网络”的数百个数据库服务器的未经授权的访问。 抓取数据库链接网络时我们遇到的唯一限制是openquery()函数允许的最大字符数。 基于Microsoft的文档,openquery()函数具有8000个字符的限制。 以下是通过嵌套数据库链接执行的查询的基本示例:

•可以通过数据库链接执行存储过程。 尽管Microsoft文档声明说,可以盲目执行openquery函数来执行存储过程。 这意味着危险的程序(如xp_cmdshell)可以用于通过多个嵌套数据库链接在操作系统级别上执行任意命令。 这在数据库社区已经有一段时间的社会化,但在信息安全界没有多少讨论。

本章将介绍如何构建可用于测试常见数据库链接攻击的实验室环境。 总而言之,你将设置三个SQL Server实例,在它们之间创建数据库链接,并安装连接到其中一个实例的Web应用程序。 以下是实验室完成后我们应该能够执行的攻击的概述。

安装名为“server1”,“server2”和“server3”的三个SQL Server命名实例。 这些实例可以安装在单个或多个服务器上。 确保记住每个SQL Server实例的sa帐户密码。 你将需要它们来设置数据库帐户和链接。

安装SQL实例时,请确保设置了以下配置:

注意:如果所有实例都配置在同一台服务器上,则可能不需要。


有关更多信息,请访问以下链接:http://msdn.microsoft.com/en-us/library/bb909712%28v=vs.90%29.aspx

SQL Server 2008下载

http://www.microsoft.com/en-us/download/details.aspx?id=1695

SQL Server 2008安装

http://blog.sqlauthority.com/2008/06/12/sql-server-2008-step-by-step-installation-guide-with-images/

我已经提供了设置下面所需的SQL Server登录的说明。 但是,如果您需要其他帮助,请点击下面的几个链接来指导您创建数据库登录。

有关更多信息,请访问http://msdn.microsoft.com/en-us/library/ms189751.aspx

1.打开SQL Server Management Studio并使用sa帐户登录到所有SQL Server实例。 通过打开三个独立的“对象探测器”,可以同时打开所有三个实例。 使用三个对象浏览器中的查询窗口在其余步骤中执行查询。

2.在server1上使用sysadmin角色创建名为“s1admin”,密码为“s1password”的数据库登录名。 注意:您可能需要禁用密码策略。

3.在server1上使用默认权限创建名为“s1user”的数据库登录名,密码为“s1password”。

4.在server2上使用默认权限创建一个名为“s2user”的数据库登录名,密码为“s2password”。

5.在server3上使用默认权限创建名为“s3user”的数据库登录名,密码为“s3password”。

6.使用OSQL验证实例和登录是否正确设置。 检查实例是否响应广播请求:

在Windows cmd.exe控制台中,使用对象资源管理器或sqlcmd检查每个实例的数据库登录名是否可以登录:

以下是启用可以通过数据库执行本地操作系统命令的xp_cmdshell存储过程的说明。 只能在server1上启用它。

以下是创建数据库的说明。 有关更多信息,可以在http://msdn.microsoft.com/en-us/library/ms190479.aspx中找到官方Microsoft页面。 我还建议使用Microsoft SQL Server Management Studio。 它能让人生不那么艰难。

1.使用s2user数据库登录创建一个从server1到server2的数据库链接。 添加数据库链接:

添加将应用于数据库链接的数据库用户:

验证数据库链接已添加以下查询:

通过向其发出查询来验证数据库链接的工作原理:

2.使用s3user数据库登录创建一个从server2到server3的数据库链接。 添加数据库链接:

添加数据库用户的数据库链接:

验证数据库链接已添加以下查询:

通过向其发出查询来验证数据库链接的工作原理:

3.使用s1admin数据库登录创建一个从server3到server1的数据库链接。 添加数据库链接:

添加数据库用户的数据库链接:

 验证数据库链接已添加以下查询:

 通过向其发出查询来验证数据库链接的工作原理:

  验证用户是否具有sysadmin权限。 下面的查询应该返回1:

  4.使用任何凭据在server1,server2和server3上创建一个坏的链接到“BADSERVER”。 此链接旨在模拟不再存在的服务器的链接。

添加数据库链接:

添加数据库用户的数据库链接。 凭证在这里并不重要,因为这是为了模拟到不再存在的服务器的链接。 所以'baduser'和'badpassword'可以是任何值。

验证数据库链接已添加以下查询:

验证访问坏链接的尝试超出预期。

1.在Server1上从Microsoft下载并安装AdventureWorks2008_Database.zip数据库。 它可以从http://msftdbprodsamples.codeplex.com/releases/view/93587下载。

以下是安装步骤的概述。

 有关更多信息,请访问http://msdn.microsoft.com/en-us/library/ms178630(v=sql.90).aspx

2.安装IIS服务器并启用对asp页面的支持。

a. 在Windows上安装IIS: http://www.howtogeek.com/howto/windows-vista/how-to-install-iis-on-windows-vista/

b. 启用ASP页面的使用:http://www.iis.net/learn/application-frameworks/running-classic-asp-applications-on-iis- 7-and-iis-8 / classic-asp-not-installed-by-default-on-IIS

3.从GitHub下载并安装易受攻击的ASP页面到C:\ Inetpub \ wwwroot。 链接到易受攻击的页面下载列表如下。

•employee.asp 

https://raw2.github.com/nullbind/Metasploit-Modules/master/employee.asp

•search.asp 

https://raw2.github.com/nullbind/Metasploit-Modules/master/search.asp

4.编辑empolyee.asp和search.asp页面。 将db_server变量更改为您为server1安装的服务器名称和实例。 它应该看起来像下面的例子。

5.启用详细错误消息。 根据您的版本IIS详细错误可能会启用,但是如果他们不是下面的链接应该能够给你一些指导。

http://www.iis.net/learn/application-frameworks/running-classic-asp-applications-on-iis-7-and- iis-8/classic-asp-script-error-messages-no-longer-shown-in-web-browser-by-default

http://blogs.msdn.com/b/rakkimk/archive/2007/05/25/iis7-how-to-enable-the-detailed-error- messages-for-the-website-while-browsed-from-for-the-client-browsers.aspx

在本章中,您将使用SQL Server Management Studio连接到SERVER1,通过链接爬网将权限升级到sysadmin,并通过xp_cmdshell存储过程在OS级别接管服务器。 在下面的示例中,10.2.9.183中已经安装了所有SQL Server实例。

这是在发现没有sysadmin访问权限的登录后,在内部渗透测试中可能会发现的一个很好的例子。

SQL Server Management Studio Express可以作为SQL Server安装的一部分或单独安装。 安装完成后,使用它连接到SERVER1实例,如下所示。 但是,请注意,您的IP地址可能不同。


单击“新建查询”按钮,并键入以下查询以确定s1user是否为系统管理员。

结果应该类似于下面的截图。


“0”告诉我们,s1user没有sysadmin权限,所以让我们使用下面的查询找到一些爬网链接。

结果应该类似于下面的屏幕截图。


它应该显示三个链接的服务器。 “BADSERVER”是一个死链接,“WIN-ODG2LLLUIPN”没有数据访问。 所以我们来关注“.\SERVER2”的链接。

3.2作为用户从服务器1爬到服务器2

使用下面的查询检查“.\SERVER2”这个链接配置是什么权限。

结果应该像下面的屏幕截图。


又一次,我们没有sysadmin权限,所以让我们来看看SERVER2上的数据库链接。 使用下面的查询列出SERVER2上的链接服务器。

结果应该像下面的屏幕截图。


与SERVER1类似,您应该看到三个链接。 我们专注于链接到“。\ SERVER3”

使用下面的查询检查“.\SERVER3”的链接配置是什么权限。

结果应该像下面的屏幕截图。


再次,我们没有sysadmin权限,所以让我们来看看SERVER3上的数据库链接,接下来使用下面的查询。


看起来我们有一个链接到SERVER1。 让我们看看我们可以从中得到什么

让我们使用下面的查询检查链接到SERVER1的权限。

结果应该像下面的屏幕截图。


最后,它返回了“1”! 您现在可以使用sysadmin访问SERVER1。

现在我们有sysadmin访问SERVER1,我们可以向操作系统添加本地管理员。 我们先从使用下面的查询添加一个用户开始。

注意:只要返回一个值,可以通过链接的OPENQUERY执行任何存储过程。 这就是为什么在调用xp_cmdshell之前使用“SELECT 1”。

结果应该像下面的屏幕截图。


不幸的是,xp_cmdshell存储过程在通过OPENQUERY使用时不会显示输出,因为我们需要使用“SELECT 1”。 所以如果查询失败,返回“1”。 无论哪种方式,新操作系统用户都可以使用下面的查询添加到“管理员”组。

再次返回1,如下面的截图所示。


如果一切正常,您现在应该可以通过远程桌面使用新帐户登录服务器。


对于那些不喜欢手动抓取SQL Server链接的用户,本章将概述如何使用mssql_linkcrawler Metasploit模块通过直接数据库连接自动化对SQL Server数据库链接的攻击。 对于本实验,您将需要可在http://www.sqlsecurity.com/上找到的SQLPing v3和可在http://www.metasploit.com/上找到的Metasploit Framework。

为了使用mssql_linkcrawler Metasploit模块连接到特定的SQL Server实例,您需要确定实例的侦听TCP端口。 确保定位到“SERVER1”实例,并注意每个安装的侦听端口将不同。 在下面的示例中,SQLPing用于扫描10.2.9.199配置的实验室系统。


Metasploit是一套可用于开发利用和攻击系统的工具。 在这种情况下,您将使用mssql_linkcralwer模块来攻击远程SQL Server上的数据库链接。 要开始,请打开Metasploit控制台,然后选择模块,如下所示。


接下来,使用实验室中连接到远程SQL Server所需的信息配置模块的设置,如下所示。 再次确保定位到“SERVER1”实例。

现在您已经配置了模块,“显示选项”显示您的设置,并确保一切都输入正确。


如果一切看起来都很好,当你输入“显示选项”,然后输入“exploit”来运行模块。 默认情况下,它将以“只读”模式运行,并仅列出可用的链接和权限。

下图显示了模块成功连接到SERVER1并显示基本配置信息。 基于输出,SERVER1上有2个链接。 此时我们没有sysadmin权限。


该模块然后尝试连接到SERVER1上的每个数据库链接。 在下面的示例中,到SERVER2的链接似乎正在运行,并且到BADSERVER的链接已经死机。 此时,我们仍然没有sysadmin权限。 但是,输出也显示SERVER2上有两个链接。

在输出中跳过,您应该会看到,通过遵循从SERVER3返回到SERVER1的链接,爬网程序升级到sysadmin。

最后,将显示抓取结果的摘要,并将显示的所有信息记录到CSV文件中。 下面是输出的一个例子。

如果数据库链接配置了sysadmin权限,那么它们也可以用于在OS级别上执行SQL Server上的任意命令。 该模块可以配置为使用该功能为攻击者提供远程命令控制台。

为了使用Metasploit开始,通过设置“multi / handler”模块来获得一个反向控制台,如下所示。 这将监听正在爬网的数据库服务器的传入连接。 将“ExistOnSession”设置为false,以便一次可以处理多个连接。

在现实世界中,您可能会最终爬行数百个SQL Server。 “DisablePayloadHandler”可用于禁用模块的默认处理程序,并允许您通过上一步中设置的处理程序来管理连接。 您可以将有效负载设置为Metasploit中的任何Windows有效负载,但在此示例中,使用默认值(reverse meterpreter)。 最后,将“DEPLOY”设置为true,以便将有效负载部署到具有sysadmin权限的服务器上。

如果您键入“显示选项”,您的配置显示如下图所示。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/07/12
最新回复 (2)
雪    币: 25
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
厉害了,真会玩
2017-6-12 09:34
0
游客
登录 | 注册 方可回帖
返回
//