对于那些不喜欢手动抓取 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_linkcrawler 模块
Metasploit 是一套可用于开发利用和攻击系统的工具。 在这种情况下,您将使用mssql_linkcralwer 模块来攻击远程 SQL Server 上的数据库链接。 要开始,请打开Metasploit 控制台,然后选择模块,如下所示。
接下来,使用实验室中连接到远程 SQL Server 所需的信息配置模块的设置,如下所示。 再次确保定位到“SERVER1”实例。
现在您已经配置了模块,“显示选项”显示您的设置,并确保一切都输入正确。
以审计模式运行mssql_linkedcrawler模块
如果一切看起来都很好,当你输入“显示选项”,然后输入“exploit”来运行模块。 默认情况下,它将以“只读”模式运行,并仅列出可用的链接和权限。
下图显示了模块成功连接到 SERVER1 并显示基本配置信息。 基于输出,SERVER1上有2个链接。 此时我们没有 sysadmin 权限。
该模块然后尝试连接到SERVER1上的每个数据库链接。 在下面的示例中,到SERVER2的链接似乎正在运行,并且到BADSERVER的链接已经死机。 此时,我们仍然没有sysadmin权限。 但是,输出也显示SERVER2上有两个链接。
在输出中跳过,您应该会看到,通过遵循从SERVER3返回到SERVER1的链接,爬网程序升级到sysadmin。
最后,将显示抓取结果的摘要,并将显示的所有信息记录到CSV文件中。 下面是输出的一个例子。
如果数据库链接配置了 sysadmin 权限,那么它们也可以用于在 OS 级别上执行 SQL Server 上的任意命令。 该模块可以配置为使用该功能为攻击者提供远程命令控制台。
为了使用 Metasploit 开始,通过设置“multi / handler”模块来获得一个反向控制台,如下所示。 这将监听正在爬网的数据库服务器的传入连接。 将“ExistOnSession”设置为false,以便一次可以处理多个连接。
在漏洞利用模式下运行mssql_linkedcrawler模块
在现实世界中,您可能会最终爬行数百个SQL
Server。 “DisablePayloadHandler”可用于禁用模块的默认处理程序,并允许您通过上一步中设置的处理程序来管理连接。
您可以将有效负载设置为Metasploit中的任何Windows有效负载,但在此示例中,使用默认值(reverse meterpreter)。
最后,将“DEPLOY”设置为true,以便将有效负载部署到具有sysadmin权限的服务器上。
如果您键入“显示选项”,您的配置显示如下图所示。
如果一切顺利,请继续输入“exploit”来运行模块。 最初它将像只读扫描一样运行,但是当它爬行配置有sysadmin权限的数据库链接时,它应该自动部署有效载荷。 有效载荷应该执行并启动一个立即发送到后台的更换外壳。 它应该类似于下面的截图。
一旦链接抓取工具完成类型“会话”以查看现有会话。 然后键入“sessions -i ”,如下所示与每个命令控制台交互。
本章将介绍基本的SQL注入测试,以熟悉常见技术。 它还将介绍如何通过SQL注入执行链接爬网。 这是一个很好的例子,在外部渗透测试期间,SQL Server数据库链接可以通过SQL注入进行爬网。
本节提供了如何手动验证应用程序中是否可能进行基本SQL注入的概述。
1. 通过访问以下URL上的Web服务器来验证应用程序的工作。
http://127.0.0.1/search.asp
http://127.0.0.1/employee.asp?id=1
6. 通过在后端数据库上尝试数学运算,验证基本SQL注入是否工作。
7. 通过将语句设置为true来验证基本SQL注入是否可以查看所有记录。
http://127.0.0.1/employee.asp?id=193 or 1=1--
8. 确定页面正在使用的查询中的列数(16)。 这种知识将在以后用于联合选择注入。
http://127.0.0.1/employee.asp?id=193 order by 15--
http://127.0.0.1/employee.asp?id=193 order by 16--
http://127.0.0.1/employee.asp?id=193 order by 17--
9. 验证基于联合的SQL注入是否使用以下URL从服务器中选择数据库列表。 请注意,我们必须使用16列或者注入会出错。
10. 验证基于错误的SQL注入是否使用以下URL在错误消息中显示数据库版本。
11. 验证基于时间的盲SQL注入是否使用以下URL强制服务器等待10秒钟才能进行响应。 在第二个示例中,如果服务器等待10秒钟响应您是系统管理员。 你不应该这样,页面应该立即返回。
本节提供了如何在实验室环境中手动验证数据库链接爬网是可能的概述。 下面的说明将会像攻击者那样一步步走一步。
1. 从server1中选择服务器名称和数据库用户。
2. 检查数据库入口点的sysadmin权限,应该是server1。 注入应返回0,表示Web应用程序使用的数据库用户没有sysadmin权限。
3. 在server1上选择可用的数据库链接列表。 您应该在列表中看到server2。
4. 在server2上选择数据库链接服务器名称,用户和权限。 注入应返回“DBLinkPriv”旁边的0,表示用于设置从server1到server2的数据库链接的帐户没有sysadmin权限。
注意:将“RELATIVESERVERNAMEHERE”替换为安装了SQL Server实例的服务器。 另外,“%2b”是URL编码的“+”。 这样做是为了使字符串可以正确地与查询输出连接。
5. 在server2上选择可用的数据库链接列表。 您应该在列表中看到server3。
注意:将“RELATIVESERVERNAMEHERE”替换为安装了SQL Server实例的服务器
6. 在server3上选择数据库链接服务器名称,用户和权限。 注入应返回“DBLinkPriv”旁边的0,表示用于设置从server2到server3的数据库链接的帐户没有sysadmin权限。
注意:将“RELATIVESERVERNAMEHERE”替换为安装了SQL Server实例的服务器。
7. 选择server3上的数据库链接列表。 您应该看到一个返回到server1的链接。
注意:将“RELATIVESERVERNAMEHERE”替换为安装了SQL Server实例的服务器。
8. 在server1上选择数据库链接服务器名称,用户和权限。 注入应返回“DBLinkPriv”旁边的1,表示用于设置从server3到server1的数据库链接的帐户确实具有sysadmin权限。 最后!!
注意:将“RELATIVESERVERNAMEHERE”替换为安装了SQL Server实例的服务器。
注意:您可能必须在较新版本的IE中禁用XSS过滤,以获取此特定示例。 但是,所有Firefox版本似乎都工作正常。
9. 通过链接串使用升级的权限,将新的操作系统用户添加到server1。
注意:将“RELATIVESERVERNAMEHERE”替换为安装SQL Server的服务器实例。
请求1:添加用户“test123”
请求2:将用户“test123”添加到“管理员”组。
10. 使用新的本地管理员帐户登录到server1(本地或通过RDP)。
Antti Rantasaari和我也写了一个Metasploit模块,通过SQL注入来爬取数据库链接,但是在这一点上它尚未被框架接受。 但是,我下面提供了一个链接到源代码和一个视频教程,谁有兴趣可以看看。
模块和视频
• https://github.com/nullbind/Metasploit-Modules/blob/master/mssql_linkcrawler_sqli.rb
• http://www.youtube.com/watch?v=eCSxPC4FenQ
恭喜!
如果一切顺利,您将拥有一个功能齐全的数据库链接实验室,可用于训练,研究和应用程序测试。
玩得开心!
本文由 看雪翻译小组 Daemond 编译,来源 netspi
如果你喜欢的话,不要忘记点个赞哦!
热门阅读文章:
更多优秀文章,长按下方二维码,“关注看雪学院公众号”查看!
看雪论坛:http://bbs.pediy.com/
微信公众号 ID:ikanxue
微博:看雪安全
投稿、合作:www.kanxue.com