如何在 Windows 上找到 Master-key 和 Session-ID 以使用 wireshark 解密 SSl/TLS 流量?

Posted

技术标签:

【中文标题】如何在 Windows 上找到 Master-key 和 Session-ID 以使用 wireshark 解密 SSl/TLS 流量?【英文标题】:how to find Master-key and Session-ID on windows for decryption of SSl/TLS traffic using wireshark? 【发布时间】:2014-09-26 23:51:35 【问题描述】:

我有一个 C++ 应用程序,它与自己的服务器进行 SSL/TLS 通信,但我无权访问该服务器。我正在尝试找出它从我的 PC 发送到服务器的内容。

我尝试将 burp 和 fiddler 作为中间人,但没有奏效。该应用程序不支持代理,所以我尝试使用 proxifier 将流量路由到打嗝和提琴手,但它没有用。

所以我想出了这些文章https://isc.sans.edu/forums/diary/Psst+Your+Browser+Knows+All+Your+Secrets+/16415和http://ask.wireshark.org/questions/4229/follow-ssl-stream-using-master-key-and-session-id

我只需要知道,如何找到 Master-key 和 Session-ID 来解密 SSL/TLS 流量。

【问题讨论】:

您为 SSL/TLS 使用什么库或框架? 最简单的方法是使用eNULL和/或aNULL作为密码如果服务器允许它。有了eNULL,一切都清楚了。有了aNULL,Fiddler 和 Burp 就可以工作了。 【参考方案1】:

这取决于所使用的 TLS 密码套件。如果密码套件使用前向保密 (DHE),您无法解密流。如果它使用 RSA 加密,那么您至少需要服务器的私钥。如果它还使用客户端身份验证,那么您还需要客户端的私钥。如果它使用对称加密,则需要其中任何一个的对称(主)密钥。

但如果您确实有一个 C++ 应用程序,我会简单地将日志记录添加到该应用程序(在最低级别)。

【讨论】:

我实际上找到了一个很好的程序来转储内存并获取主密钥,但我还没有成功,但是当我这样做时,我会在这里给出答案。不过你说的倒是个好主意。如何在最低级别将日志记录添加到该应用程序?请你再给我解释一下好吗? 您采用一个日志框架,将其添加到您的 C 应用程序并在流到达 SSL 套接字之前对其进行记录?这当然需要编程和重新编译(这 SO)。 Wireshark 可以使用服务器私钥或 ANY keychange(自 2011 年以来)使用主密钥或预主密钥解密纯 RSA,前提是它可以从任一端点获得 - 哪个 SSL /TLS 端点通常旨在防止,但有时有调试类型的功能来获取它们。问题中的链接对此进行了详细说明。您永远不需要客户端私钥,因为它用于身份验证,并且对会话密钥没有任何贡献。【参考方案2】:

您可以在 x86 窗口上使用以下替代方法

STRACE - http://blogs.msdn.com/b/emmanubo/archive/2007/06/04/introduction-to-strace-httpreplay-support-tools.aspx

SOCKTRC 如果此应用在 Windows 结帐中 http://blogs.msdn.com/b/emmanubo/archive/2007/08/03/socktrc-tool.aspx

HTTPREPLAY - 通常用于浏览器,但这里可用于查看 UI 中的响应

【讨论】:

这些工具非常棒,但适用于非加密连接,例如 http,但不适用于 https 这些工具在加密发生之前挂钩并捕获解密后但是是的,这不是捕获密钥而是解密流量

以上是关于如何在 Windows 上找到 Master-key 和 Session-ID 以使用 wireshark 解密 SSl/TLS 流量?的主要内容,如果未能解决你的问题,请参考以下文章

在Windows7上如何找到Cookie(亲测100%可找到)

如何找到文件“mime-type(Content-Type?)”?在 Windows 上

如何在windows7上使用snmp命令

如何通过 Windows 10 上的注册表找到默认浏览器

在哪里可以找到有关如何将 Blazor 应用部署到在 Windows Server 2019 上运行的 IIS10 的具体详细信息

如何从 cmd 中找到当前的 Windows 语言?