寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

admin 2024年10月7日03:23:59评论21 views字数 2015阅读6分43秒阅读模式

如果没有看过第一部分的读者,可以先从第一部分看起:寻找TeamViewer 0day漏洞—第一部分:故事的开始

本文开始

我开始逆向TeamViewer客户端,以了解认证过程是如何进行的。

不过,我将跳过这部分内容,因为最终我是通过逆向服务端来弄清楚认证方法的。

逆向客户端的过程非常繁琐,因为存在重叠I/O、多线程处理、控制流保护(CFG)等复杂情况,这让我多次陷入无用的路径和迷宫般的分析过程。

我认为展示客户端的逆向过程不会对这篇文章有实质性的贡献,所以我将直接跳过,进入重要的部分。

过程总结

  1. 客户端在第一部分中提到的认证消息中发送一个挑战(challenge)。

  2. 服务器响应时包含服务器的挑战以及根据客户端挑战计算出的回应。

  3. 客户端应验证该挑战,以确保不会连接到恶意的TeamViewer服务。在我们的场景中,这部分可以忽略,我们只需要正确认证到服务。

  4. 客户端基于服务器的挑战计算出响应,并在接下来的消息中发送。

从哪里开始?

在开始逆向客户端时,我发现了一个很有价值的线索。我们知道TeamViewer记录了以下日志:

  1. 2024/05/2619:03:04.77032683660 S0!!InterProcessNetwork::Received_IPCAuth() invalid response

因此,我首先在IDA中简单地搜索了这个字符串,结果返回了以下交叉引用。

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

通过回溯代码,我们可以找到最终进行比较的地方,也就是在检查客户端发送的响应是否与正确的值匹配。

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

在研究这个过程时,发现下列函数负责返回预期的输出。

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

我将展示该函数所遵循的过程。

这个函数其实是一个辅助函数,它实际上调用了另一个函数。

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

最终,我们(在再次调用了一个辅助函数之后)进入了执行所有关键操作的核心函数。

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

接着,我们进入一个循环,在循环体内不断调用一个函数。

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

这个函数的作用是什么?

我将展示反编译代码的前几行:

  1. _int64 __fastcall sub_7FF7E93DD240(_DWORD *a1, _DWORD *a2)

  2. {

  3. [...VARS...]

  4. v2 = a1[1];

  5. v3 = a2;

  6. v4 = a1[2];

  7. v5 = a1[3];

  8. v6 = a2[5];

  9. v83 =*a2;

  10. v85 = a2[1];

  11. v7 = v2 + __ROL4__(*a2 +(v5 ^ v2 &(v4 ^ v5))+*a1 -680876936,7);

  12. v80 = a2[2];

  13. v8 = v7 + __ROL4__(v85 +(v4 ^ v7 &(v2 ^ v4))+ v5 -389564586,12);

  14. v84 = v3[3];

  15. v9 = v8 + __ROL4__(v80 +(v2 ^ v8 &(v7 ^ v2))+ v4 +606105819,17);

  16. v78 = v3[4];

  17. v10 = v9 + __ROL4__(v84 +(v7 ^ v9 &(v7 ^ v8))+ v2 -1044525330,22);

  18. v77 = v3[6];

  19. v11 = v10 + __ROL4__(v78 +(v8 ^ v10 &(v9 ^ v8))+ v7 -176418897,7);

  20. v12 = v11 + __ROL4__(v6 +(v9 ^ v11 &(v10 ^ v9))+ v8 +1200080426,12);

  21. v13 = v12 + __ROL4__(v77 +(v10 ^ v12 &(v11 ^ v10))+ v9 -1473231341,17);

你认出它了吗?如果认出来了,恭喜你。如果没有,也不要担心,我也是一开始没认出来,直到借助 ChatGPT 才发现。

这是 MD5 核心函数。也就是说,TeamViewer 正在执行 MD5 哈希运算。现在,让我们来看看具体在哈希什么内容。

在这个漏洞利用执行过程中,我们收到的挑战是:

03f22fac bc141ee3428422e955cc e3 e3

但在分析传递给 MD5 哈希核心函数的参数时,我们看到如下内容:

TV 将挑战值与以下字节进行拼接:

40C289053BE8 C1697D74D836FC1D2F6E

我尚未测试过,但我认为可以通过我们在第 1 部分中提到的 IPCPassword 注册表项来更改它。

一个重要的细节是,这是 服务器 挑战所使用的密码。

对于 客户端 挑战,使用了不同的密码:

436E6762F25EA8 D704E522BF A55DA16A

因此,基本上为了进行认证,我们只需要计算 MD5(CHALLENGE+STATIC KEY)

完成此步骤后,我们需要发送 ControlIPC,并提供正确的进程 ID (PID)。我相信任何当前进程的 PID 都可能有效,但我尚未测试过。

在漏洞利用中,发送的是当前进程的 PID。

指定一个不存在的进程 PID 会导致失败。

第三部分 中,我们将编写漏洞利用程序,并最终使用它来进行特权提升。

系列即将完结,请保持关注公众号,第一时间获取更新。

Thanks

thanks for https://pgj11.com/posts/Finding-TeamViewer-0days-Part-2/

寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

原文始发于微信公众号(一个不正经的黑客):寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月7日03:23:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   寻找 TeamViewer 0day 漏洞(二):逆向身份验证协议https://cn-sec.com/archives/3236451.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息