2024-07-18 22:08:20 +00:00
# FreeIPA Pentesting
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
{% hint style="success" %}
学习与实践 AWS 黑客技术:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
学习与实践 GCP 黑客技术:< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks 培训 GCP 红队专家 (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
< details >
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
< summary > 支持 HackTricks< / summary >
2023-12-30 22:37:12 +00:00
2024-07-18 22:08:20 +00:00
* 查看 [**订阅计划** ](https://github.com/sponsors/carlospolop )!
* **加入** 💬 [**Discord 群组** ](https://discord.gg/hRep4RUj7f ) 或 [**Telegram 群组** ](https://t.me/peass ) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **通过向** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) GitHub 仓库提交 PR 分享黑客技巧。
2022-10-22 14:44:59 +00:00
< / details >
2024-07-18 22:08:20 +00:00
{% endhint %}
2022-10-22 14:44:59 +00:00
2023-08-03 19:12:22 +00:00
## 基本信息
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
FreeIPA 是一个开源的 **替代品** ,用于 Microsoft Windows **Active Directory** ,主要针对 **Unix** 环境。它结合了一个完整的 **LDAP 目录** 和一个 MIT **Kerberos** 密钥分发中心,管理方式类似于 Active Directory。利用 Dogtag **证书系统** 进行 CA 和 RA 证书管理,支持 **多因素** 身份验证,包括智能卡。集成了 SSSD 以支持 Unix 身份验证过程。
2022-10-22 14:44:59 +00:00
2023-08-03 19:12:22 +00:00
## 指纹
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
### 文件与环境变量
2024-02-05 02:56:36 +00:00
2024-07-18 22:08:20 +00:00
* `/etc/krb5.conf` 文件存储 Kerberos 客户端信息,这是加入域所必需的,包括 KDC 和管理员服务器的位置、默认设置和映射。
* IPA 客户端和服务器的系统范围默认设置在 `/etc/ipa/default.conf` 文件中设置。
* 域内的主机必须在 `/etc/krb5.keytab` 处拥有 `krb5.keytab` 文件以进行身份验证过程。
* 各种环境变量(`KRB5CCNAME`、`KRB5_KTNAME`、`KRB5_CONFIG`、`KRB5_KDC_PROFILE`、`KRB5RCACHETYPE`、`KRB5RCACHEDIR`、`KRB5_TRACE`、`KRB5_CLIENT_KTNAME`、`KPROP_PORT`)用于指向与 Kerberos 身份验证相关的特定文件和设置。
2022-10-22 14:44:59 +00:00
2023-08-03 19:12:22 +00:00
### 二进制文件
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
工具如 `ipa` 、`kdestroy`、`kinit`、`klist`、`kpasswd`、`ksu`、`kswitch` 和 `kvno` 是管理 FreeIPA 域、处理 Kerberos 票证、修改密码和获取服务票证等功能的核心。
2023-12-26 17:51:30 +00:00
2023-08-03 19:12:22 +00:00
### 网络
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
提供了一个插图来描绘典型的 FreeIPA 服务器设置。
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
## 身份验证
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
FreeIPA 中的身份验证利用 **Kerberos** ,与 **Active Directory** 中的身份验证相似。访问域资源需要有效的 Kerberos 票证,具体存储位置取决于 FreeIPA 域配置。
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
### **CCACHE 票证文件**
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
CCACHE 文件通常存储在 ** `/tmp` ** 中,权限为 **600** ,是用于存储 Kerberos 凭据的二进制格式,重要的是可以在没有用户明文密码的情况下进行身份验证。可以使用 `klist` 命令解析 CCACHE 票证,重新使用有效的 CCACHE 票证涉及将 `KRB5CCNAME` 导出到票证文件的路径。
2022-10-22 14:44:59 +00:00
2024-02-05 02:56:36 +00:00
### **Unix 密钥环**
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
另外, CCACHE 票证可以存储在 Linux 密钥环中,提供对票证管理的更多控制。票证存储的范围各异(`KEYRING:name`、`KEYRING:process:name`、`KEYRING:thread:name`、`KEYRING:session:name`、`KEYRING:persistent:uidnumber`) , `klist` 能够解析这些信息供用户使用。然而,从 Unix 密钥环重新使用 CCACHE 票证可能会面临挑战,像 **Tickey** 这样的工具可用于提取 Kerberos 票证。
2022-10-22 14:44:59 +00:00
2024-02-05 02:56:36 +00:00
### Keytab
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
Keytab 文件包含 Kerberos 主体和加密密钥, 对于在不需要主体密码的情况下获取有效的票证授予票( TGT) 至关重要。使用 `klist` 等实用程序和 **KeytabParser** 等脚本可以轻松解析和重新使用 keytab 文件中的凭据。
2022-10-22 14:44:59 +00:00
2024-02-06 14:25:48 +00:00
### 备忘单
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
您可以在以下链接中找到有关如何在 Linux 中使用票证的更多信息:
2022-10-22 14:44:59 +00:00
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md ](privilege-escalation/linux-active-directory.md )
{% endcontent-ref %}
2023-08-03 19:12:22 +00:00
## 枚举
2022-10-22 14:44:59 +00:00
2022-10-22 15:26:54 +00:00
{% hint style="warning" %}
2024-07-18 22:08:20 +00:00
您可以通过 **ldap** 和其他 **二进制** 工具进行 **枚举** ,或 **连接到 FreeIPA 服务器的 443 端口的网页** 。
2022-10-22 15:26:54 +00:00
{% endhint %}
2024-05-05 22:03:00 +00:00
### 主机、用户和组 <a href="#id-4b3b" id="id-4b3b"></a>
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
可以创建 **主机** 、**用户** 和 **组** 。主机和用户被分类到称为“**主机组**”和“**用户组**”的容器中。这些类似于 **组织单位** ( OU) 。
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
在 FreeIPA 中, LDAP 服务器默认允许 **匿名绑定** ,大量数据可以 **未经身份验证** 进行枚举。这可以枚举所有可用的未经身份验证的数据:
2022-10-22 14:44:59 +00:00
```
2023-08-03 19:12:22 +00:00
ldapsearch -x
2022-10-22 14:44:59 +00:00
```
2024-07-18 22:08:20 +00:00
要获取**更多信息**,您需要使用**经过身份验证**的会话(请查看身份验证部分以了解如何准备经过身份验证的会话)。
2022-10-22 14:44:59 +00:00
```bash
# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"
# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups
2023-08-03 19:12:22 +00:00
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
2022-10-22 14:44:59 +00:00
```
2024-07-18 22:08:20 +00:00
从一个已加入域的机器上,您将能够使用 **已安装的二进制文件** 来枚举域:
2022-10-22 14:44:59 +00:00
```bash
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find
-------------------
ipa user-show < username > --all
ipa usergroup-show < user group > --all
ipa host-find < host > --all
ipa hostgroup-show < host group > --all
```
2022-10-22 15:26:54 +00:00
{% hint style="info" %}
2024-05-05 22:03:00 +00:00
**FreeIPA** 的 **admin** 用户相当于 **AD** 中的 **domain admins** 。
2022-10-22 15:26:54 +00:00
{% endhint %}
2024-05-05 22:03:00 +00:00
### Hashes <a href="#id-482b" id="id-482b"></a>
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
**IPA 服务器**中的 **root** 用户可以访问密码 **hashes** 。
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
* 用户的密码 hash 存储为 **base64** 在“**userPassword**” **attribute** 中。这个 hash 可能是 **SSHA512** (旧版本的 FreeIPA) 或 **PBKDF2\_SHA256** 。
* 如果系统与 **AD** 有 **integration** ,则密码的 **Nthash** 存储为 **base64** 在“**ipaNTHash**”中。
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
破解这些 hashes:
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
• 如果 freeIPA 与 AD 集成,**ipaNTHash** 很容易破解:你应该 **decode** **base64** -> 重新编码为 **ASCII** hex -> John The Ripper 或 **hashcat** 可以帮助你快速破解
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
• 如果使用的是旧版本的 FreeIPA, 则使用 **SSHA512** :你应该解码 **base64** -> 找到 SSHA512 **hash** -> John The Ripper 或 **hashcat** 可以帮助你破解
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
• 如果使用的是新版本的 FreeIPA, 则使用 **PBKDF2\_SHA256** :你应该解码 **base64** -> 找到 PBKDF2\_SHA256 -> 它的 **length** 是 256 字节。John 可以处理 256 位( 32 字节)-> SHA-265 用作伪随机函数,块大小为 32 字节 -> 你只能使用我们的 PBKDF2\_SHA256 hash 的前 256 位 -> John The Ripper 或 hashcat 可以帮助你破解
2022-10-22 15:26:54 +00:00
2024-05-05 22:03:00 +00:00
< figure > < img src = "../.gitbook/assets/image (655).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-10-22 15:26:54 +00:00
2024-07-18 22:08:20 +00:00
要提取 hashes, 你需要在 **FreeIPA 服务器**中是 **root** ,在那里你可以使用工具 ** `dbscan` ** 来提取它们:
2022-10-22 15:26:54 +00:00
2024-05-05 22:03:00 +00:00
< figure > < img src = "../.gitbook/assets/image (293).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-10-22 15:26:54 +00:00
2024-05-05 22:03:00 +00:00
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
2022-10-22 14:44:59 +00:00
2023-12-30 22:37:12 +00:00
这些规则授予用户或主机对资源(主机、服务、服务组等)的特定权限。
2022-10-22 14:44:59 +00:00
```bash
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show < hbacrule > --all
```
2024-07-18 22:08:20 +00:00
#### Sudo-Rules
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
FreeIPA 通过 sudo-rules 实现对 **sudo 权限** 的集中控制。这些规则允许或限制在域内主机上使用 sudo 执行命令。攻击者可以通过检查这些规则集来识别适用的主机、用户和允许的命令。
2022-10-22 14:44:59 +00:00
```bash
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show < sudorule > --all
```
2023-08-03 19:12:22 +00:00
### 基于角色的访问控制
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
一个**角色**由各种**特权**组成,每个特权包含一组**权限**。这些角色可以分配给用户、用户**组**、**主机**、主机组和服务。例如, 考虑FreeIPA中的默认“用户管理员”角色来举例说明这个结构。
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
角色`用户管理员`具有以下特权:
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
* **用户管理员**
* **组管理员**
* **阶段用户管理员**
2022-10-22 14:44:59 +00:00
2024-05-05 22:03:00 +00:00
使用以下命令可以枚举角色、特权和权限:
2022-10-22 14:44:59 +00:00
```bash
# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show < role > --all
2023-08-03 19:12:22 +00:00
ipa privilege-find
2022-10-22 14:44:59 +00:00
ipa privilege-show < privilege > --all
ipa permission-find
ipa permission-show < permission > --all
```
2023-08-03 19:12:22 +00:00
### 攻击场景示例
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
在 [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e ](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e ) 中,您可以找到一个简单的示例,说明如何滥用某些权限来妥协域。
2022-10-22 14:44:59 +00:00
2023-12-26 17:51:30 +00:00
### Linikatz/LinikatzV2
2023-05-12 09:08:05 +00:00
2023-12-26 17:51:30 +00:00
* [https://github.com/Orange-Cyberdefense/LinikatzV2 ](https://github.com/Orange-Cyberdefense/LinikatzV2 )
* [https://github.com/CiscoCXSecurity/linikatz ](https://github.com/CiscoCXSecurity/linikatz )
2023-05-12 09:08:05 +00:00
2024-07-18 22:08:20 +00:00
## 权限提升
2022-10-22 14:44:59 +00:00
2024-02-05 02:56:36 +00:00
### ~~root 用户创建~~
2022-10-22 14:44:59 +00:00
{% hint style="warning" %}
2024-07-18 22:08:20 +00:00
如果您可以 **创建一个名为 `root` 的新用户** ,您可以冒充他并能够 **以 root 身份 SSH 登录任何机器。**
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
**这已经被修补。**
2022-10-22 14:44:59 +00:00
{% endhint %}
2024-07-18 22:08:20 +00:00
您可以在 [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b ](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b ) 中查看详细说明。
2022-10-22 14:44:59 +00:00
2024-02-08 03:56:12 +00:00
## 参考资料
2024-05-05 22:03:00 +00:00
2024-02-05 02:56:36 +00:00
* [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b ](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b )
* [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a ](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a )
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1 ](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1 )
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ ](https://www.youtube.com/watch?v=9dOu-7BTwPQ )
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
{% hint style="success" %}
学习和实践 AWS 黑客技术:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
学习和实践 GCP 黑客技术:< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks 培训 GCP 红队专家 (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
< details >
2023-12-30 22:37:12 +00:00
2024-07-18 22:08:20 +00:00
< summary > 支持 HackTricks< / summary >
2022-10-22 14:44:59 +00:00
2024-07-18 22:08:20 +00:00
* 查看 [**订阅计划** ](https://github.com/sponsors/carlospolop )!
* **加入** 💬 [**Discord 群组** ](https://discord.gg/hRep4RUj7f ) 或 [**电报群组** ](https://t.me/peass ) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **通过向** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github 仓库提交 PR 来分享黑客技巧。
2022-10-22 14:44:59 +00:00
< / details >
2024-07-18 22:08:20 +00:00
{% endhint %}