在客户端和服务器之间拦截 SQL 查询数据以测试加密

Posted

技术标签:

【中文标题】在客户端和服务器之间拦截 SQL 查询数据以测试加密【英文标题】:Intercept SQL Query Data between Client and Server to test encryption 【发布时间】:2017-10-25 21:19:28 【问题描述】:

早上好,

这是我第一次尝试这个,所以我很高兴承认我在这里确实缺乏一些知识,但我在这里是因为我很难在网上找到答案。

我想再次检查从 SQL Server 传输到客户端应用程序(在本例中为 Excel)的数据是否已加密。现在,理想情况下,我希望将请求中的数据视为纯文本(未加密)或一堆无意义的字符(加密) - 当然这是一个巨大的简化。

我已尝试安装 WireShark 和 Microsoft 消息分析器,并在连接到 SQL Server 时在端口 1433 上运行跟踪,然后(在 Excel 中)连接并下载数据...我可以获得正在运行的 SQL 查询(即:从 MyTable 中选择 *),但我似乎无法从表中获取任何实际数据(例如:您在 SSMS 中看到的上述查询的结果)。

现在,我确信还有其他方法可以确保对流量进行加密,但我想首先实际捕获传输中的数据并查看它,然后尝试在我的 SQL 上启用 ODBC 加密和/或 SSL服务器盒子。

我一直在寻找有关查看 SQL 查询的文章,但实际目标是尝试查看是否可以查看正在传输的数据。

希望这有意义吗?

干杯, 本

【问题讨论】:

【参考方案1】:

有足够的文档来设置它。阅读Enable Encrypted Connections to the Database Engine、Encrypting Connections to SQL Server、How to enable SSL encryption for an instance of SQL Server by using Microsoft Management Console,我相信还有更多。

此外,SQL Server DMV sys.dm_exec_connections 有一列清楚地指示连接是否加密:

encrypt_option nvarchar(40) 布尔值,用于描述是否为此连接启用加密。不可为空。

如果您真的想查看线框(鉴于 DMV 中的信息,这有点没用),那么 Microsoft Message Analyzer 有一个 TDS protocol 解析器,还有其他线检测产品的 TDS 解析器.此类解析器可以显示传输的详细信息,包括加密标志等。但必须注意,SQL Server 默认使用Shared Memory 传输进行本地连接,因此在测试到localhost 的连接时,您很可能不会点击TCP 堆栈和您的线路检查器将无法查看任何流量。

【讨论】:

嗨 Remus,谢谢你的及时回复 - 我听到你关于 localhost 的问题 - 我发现了这个问题,所以我使用了另一台安装了 SQL 的机器,我发现好好工作。我浏览了这些页面,但从某种意义上说,我有两个选择:将 SSL 应用于 SQL Server 或使用 ODBC 加密选项(如果适用于正确的驱动程序)。我只是很好奇看到它在行动。我已经为 SQLBatchPacketData.* 申请了 MMA 中的额外列。但我只得到一些 SQL 查询但没有数据......我觉得我在这里遗漏了一些关键的东西......一块拼图 1) ODBC 不能比 SQL Server 加密更多。 ODBC 只能公开 SQL Server 功能。 2)您可以通过在服务器名称前加上 tcp:np: (对于命名管道)来强制本地传输所需的传输。 好的,但是我仍然卡住了...当我从本地计算机连接到远程 SQL Server 实例并跨表时找不到查询结果...这甚至可能吗?【参考方案2】:

如果您使用数据库代理(如Gallium Data),您应该能够查看所有流量,甚至可以修改该流量。它处理加密,因此不应该成为障碍。

【讨论】:

以上是关于在客户端和服务器之间拦截 SQL 查询数据以测试加密的主要内容,如果未能解决你的问题,请参考以下文章

接口测试基础——fiddler抓包常见问题

性能测试-2.Fiddler抓包工具的使用

第二章 Burp Suite代理和浏览器设置

客户端开发中的后端数据拦截与修改

拦截到 memcached 的流量以进行统计/分析

第三章 如何使用Burp Suite代理