如何使用Wireshark解码SQL Server流量?

20

我可以使用Wireshark捕获数据包,但我无法将流解码为任何可理解的内容。

WireShark bug数据库中的这个项目表明,在SQL Server 2005或更新版本中可能无法实现。但在此问题的答案中,Stack Overflow上的多位用户表示这是一种有效的方法。

感谢您提供任何帮助。

4个回答

10

编辑(2017-05-02):微软网络监视器 - 已被 Microsoft Message Analyzer 替换 - 具有相同的目的。有关如何使用它,请参见以下答案中的评论。

注意: Microsoft Message Analyzer 于2019年末已停用,不再提供下载。

原始回答

还有一个来自微软自己的被低估的工具:“微软网络监视器”。基本上,这与Wireshark非常相似,但某些特定的MS协议具有比Wireshark本身更好的解析和可视化支持,显然只能在Windows下运行 ;-)。

该工具相当古老,看起来已经被抛弃(迄今没有看到更新版本),但仍然做得很好,定义新协议的语法非常整洁/有趣 - 因此它仍然具有许多未来的优点。 mnm 3.4 about dialog

分析示例 - 录制已针对TDS进行过滤,因此其他数据包大多被丢弃:

Example Session for TDS (MSSQL)

这同样适用于SQL Server连接。MNM甚至可以可视化通过网络传输的结果集 - 相当不错。尽管如上所述,Wireshark足以验证加密和应用程序本身上的证书。这意味着它可以完全理解TDS协议。
处理TLS
还有一个扩展(所谓的专家)'NmDecrypt'和正确的证书(包括私钥) - 可以解密协议 - 对于在TDS内部使用TLS的TDS非常好 - 难怪 - 没有人真正将其实现为wireshark的完全支持的协议 ;)
到目前为止 - 关于MSSQL-Traffic - 或者更准确地说是TDS-Protocol,这是我迄今为止发现的最好的工具。Wireshark很酷 - 但在这种情况下,MNM更好。享受吧!;)
工具链接:

8
MS Network Monitor已被替换为Microsoft Message Analyzer,它确实可以很好地解密TDS中的TLS(无需使用NMDecrypt)。 - David Ching
1
此产品已被弃用,没有替代品。 - Evan Mulawski
太糟糕了!这是一个很棒的工具...哀悼微软消息分析器 - 但很可能与Wireshark并行存在有太多的努力 - 问题是:现在Wireshark能够正确解码TDS吗?每个协议步骤的脚本编写真的很酷...但是... - dalini

7
不是Wireshark,而是对我来说Microsoft Message Analyzer非常适用。

获取所有发送的命令:

  1. 开始一个新会话
  2. Live Trace添加为数据源
  3. 选择场景(我选择了本地网络接口
  4. 输入会话过滤器表达式,如*address == 10.1.2.129以仅过滤到您的sql服务器的流量。
  5. 点击开始
  6. 在消息表中右键单击列标题,然后选择添加列...
  7. 添加TDS > SQLBatch > SqlBatchPacketData > SQLText

这应该会给你像下面这样的东西:enter image description here

不幸的是,目前还没有自动滚动功能,但可以按时间戳排序并让新的查询出现在顶部。


1
此产品已被弃用,没有替代品。 - Evan Mulawski

2

您所提到的问题是如何证明流量已经被加密。

他们使用Wireshark来展示您无法读取它。

早期版本的SQL Server加密较弱,但我认为解密SQL Server 2005流量并不容易。


2
但问题是,他们如何证明它是加密的?您需要解码TDS流,而在wireshark中如何做到这一点并不明显(至少对我来说不是)。 - Pete

1
Wireshark可以解码并显示捕获的数据,前提是你要理解协议(和层次结构)。这意味着捕获的数据没有加密。如果数据被加密了(例如SSL),Wireshark只会显示SSL握手和原始数据。

这是错误的,因为使用的 MS-SQL-Protocol 在协议本身内部执行 SSL/TLS,而不是在最外层执行,这是非常普遍的。因此,在这种情况下,这是错误的,并且如果寻找 SSL 握手,则不会指示正确的答案 - 在这种情况下永远不会有任何握手! - dalini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接