# 恶意双子星 EAP-TLS
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家 **网络安全公司** 工作吗?你想在 HackTricks 中看到你的 **公司广告**吗?或者你想获得 **PEASS 的最新版本或下载 HackTricks 的 PDF** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我的 **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
\
**赏金漏洞提示**:**注册** Intigriti,一个由黑客创建的高级 **赏金漏洞平台**!立即加入我们:[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
在某个时候,我需要使用下面的帖子中提出的解决方案,但是 [https://github.com/OpenSecurityResearch/hostapd-wpe](https://github.com/OpenSecurityResearch/hostapd-wpe) 中的步骤在现代的 kali(2019v3)中不再起作用。\
无论如何,很容易让它们起作用。\
你只需要从这里下载 hostapd-2.6:[https://w1.fi/releases/](https://w1.fi/releases/),然后在重新编译 hostapd-wpe 之前安装:`apt-get install libssl1.0-dev`
## EAP-TLS 的恶意双子星
**本文摘自** [**https://versprite.com/blog/application-security/eap-tls-wireless-infrastructure/**](https://versprite.com/blog/application-security/eap-tls-wireless-infrastructure/)
### 不常见的情况:攻击 EAP-TLS
之前我提到了一个在这个项目中我们不得不处理的不常见的无线网络配置。这个方案基于 EAP-TLS,其中 supplicant 必须在被授权访问网络之前向认证服务器呈现有效的客户端证书。
在这种情况下,只有在相互认证过程顺利进行时才会创建安全的 TLS 通道。换句话说,如果 supplicant 首先接受认证服务器的证书,然后认证服务器接受 supplicant 的证书。
在评估过程中,当我们在攻击机器上使用 hostapd-wpe 时,我们对获得的错误消息感到惊讶:
![hostapd-wpe 错误](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.20.32-PM.png)
正如你在错误消息中看到的,我们的工具触发了一个错误消息,指示它没有接受无线客户端的证书,因为它是由一个未知的 CA 签名的。很滑稽,对吧?我们的攻击工具因为用户没有提供有效的凭据而拒绝了受害者的访问。🙂
因此,根据工具的输出,我们可以看到协商已经达到了客户端证书确实被呈现给了伪造的 Radius 服务器的点,这意味着攻击者伪造的证书被受害者接受了。
这意味着 supplicant 的配置过于宽松,它接受了来自 radius 服务器的任何证书。
在看到这个错误并搜索网络后,我们意识到利用这种情况并不常见 - 从与此相关的博客上缺乏信息来判断 - 我们必须以某种方式处理它。
### MiTM 攻击 - 定义目标
你可能已经猜到了,这里的想法是调整我们的工具,使其接受偶尔 supplicant 提供的任何证书,以让受害者与我们的恶意无线基础设施建立完整的连接,然后在受害者和互联网之间执行中间人攻击,显示一个捕获明文凭据的强制性门户作为第一步。
注意:当 MiTM 攻击完全可用时,你可以将受害者的所有流量重定向到你的主机,以捕获 NetNTLM 哈希,例如。我们还在以下帖子中介绍了类似的攻击:[目标 Windows 机器和 DNS 服务器之间的 MiTM 攻击](https://versprite.com/blog/mitm-dns-spoofing/)。
在这两种情况下,我们首先需要了解 hostapd-wpe 是在哪里执行证书控制,然后相应地修改它,以防止它拒绝无效或未知的客户端证书。
在对源代码进行快速分析后,我们找到了以下内容:
**原始源代码文件:hostapd-2.6/src/eap\_server/eap\_server\_tls.c**
![eap\_server\_tls\_ssl\_init](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.20.41-PM.png)
如你在上面的代码中看到的(第 80 行),hostapd 上的 EAP TLS 服务器实现调用了一个名为 eap\_server\_tls\_ssl\_init 的自定义函数来初始化服务器,第三个参数设置为 1。
**原始源代码文件:hostapd-2.6/src/eap\_server/eap\_server\_tls\_common.c**
![tls\_connection\_set\_verify-1](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.27.49-PM.png)
![tls\_connection\_set\_verify-2](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.28.02-PM.png)
在上面的代码中(从第 78 行到第 80 行),我们可以观察到使用参数 `verify_peer` 设置为 1 调用了函数 `tls_connection_set_verify`(这是从 `eap_tls_init` 函数中接收到的)。
**原始源代码文件:hostapd-2.6/src/crypto/tls\_openssl.c**
![verify\_peer](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.32.53-PM.png)
在上面的代码中(从第2307行到2309行),我们可以观察到参数`verify_peer`(原本设置为1)最终将被用作OpenSSL函数SSL\_set\_verify的参数,用于在库作为服务器时验证客户端证书是否有效。通过将原始行修改为0,我们可以改变工具的行为,使其忽略客户端证书是否有效。
**修改后的源代码文件:hostapd-2.6/src/eap\_server/eap\_server\_tls.c**
![eap\_tls\_init](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.34.01-PM.png)
在修补了hostapd-wpe的源代码并重新编译之后,我们再次尝试进行攻击,并得到以下输出:
![patching hostapd-wpe](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.34.54-PM.png)
通过观察我们修改后的hostapd-wpe版本的输出,我们可以看到错误消息不再存在,客户端似乎已连接到我们的伪造AP。现在,我们应该建立适当的基础设施,向受害者呈现一个强制性门户,并尝试进行钓鱼攻击。
为了快速利用它,我们决定从Wifiphisher中提取代码的部分,并根据我们的特定需求进行调整,在Python中创建一个简单的强制性门户。可以在参考资料中找到这个概念验证的代码链接。
现在我们拥有了所有的元素,让我们从攻击者的角度执行对受害者的攻击,并看看整个过程是如何进行的:
#### 1. 使用airodump-ng检查环境
![airodump-ng](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.35.48-PM.png)
从输出中,我们可以识别出受害者(00:0F:60:07:95:D7)连接到WPA2企业网络“enterprise”(ESSID)的访问点BSSID(F4:EC:38:FA:E7:57)。
#### 2. 运行修改后的hostapd-wpe工具,为目标网络创建一个伪造的AP
![modified modified hostapd-wpe](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.36.29-PM.png)
#### 3. 自定义强制性门户模板(例如HTML登录),使其对目标受众(受害者)熟悉,并运行它
![Customize the captive portal](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.37.02-PM.png)
#### 4. 执行断开连接攻击并承担风险(如果你不耐烦的话)
![de-auth attack](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.37.36-PM.png)
结果,我们将在修改后的hostapd-wpe工具的输出中看到以下消息:
![victim connected](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.38.09-PM.png)
这表明一个受害者(00:0f:60:07:95:d7)已连接到我们的伪造AP。
在受害者的Windows主机上,我们观察到它自动连接到了伪造的AP,并且一旦尝试进行网页浏览,用户就会看到强制性门户:
![captive portal credentials](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.38.54-PM.png)
受害者输入凭据后,我们可以在强制性门户的控制台上看到输出:
![captive portal console](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.39.01-PM.png)
以下截图显示了对连接到WPA2网络的iPhone设备执行攻击时向受害者显示的消息,要求受害者接受证书:
![accept certificate](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.39.11-PM.png)
以下截图显示了呈现给iPhone设备的强制性门户:
![iphone credentials](https://versprite.com/wp-content/uploads/2017/05/Screen-Shot-2019-05-31-at-2.39.19-PM.png)
注意:此演示的强制性门户HTML模板只是一个概念验证样本,我鼓励您开发自己的模板,包括在网络上搜索文件的HTML标签,以便捕获NetNTLM哈希(如果受害者使用Internet Explorer),以及其他更复杂的模板,要求用户在允许访问网络之前下载计算机上的二进制文件以进行扫描。
尽管我们可以阅读不同的在线文章,声称EAP-TLS是无线基础设施最安全的实现,但由于其可扩展性问题,大多数公司并未使用它:创建、交付、配置和撤销每个用户的唯一证书的复杂性。
这个方案的整个安全性再次依赖于链条中最薄弱的环节,可能是一个配置为接受认证服务器提供的任何证书的设备或主机,或者是一个不考虑此操作风险的无意识用户使用的移动设备。
\
**Bug赏金提示**:**注册**Intigriti,一个由黑客创建的高级**Bug赏金平台**!立即加入我们:[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在**网络安全公司**工作吗?你想看到你的**公司在HackTricks中被宣传**吗?或者你想获得**最新版本的PEASS或下载PDF格式的HackTricks**吗?查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品:[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或在 **Twitter** 上 **关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**