hacktricks/linux-hardening/freeipa-pentesting.md

215 lines
11 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.

# FreeIPA Pentesting
{% 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)
<details>
<summary>支持 HackTricks</summary>
* 查看 [**订阅计划**](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 分享黑客技巧。
</details>
{% endhint %}
## 基本信息
FreeIPA 是一个开源的 **替代品**,用于 Microsoft Windows **Active Directory**,主要针对 **Unix** 环境。它结合了一个完整的 **LDAP 目录** 和一个 MIT **Kerberos** 密钥分发中心,管理方式类似于 Active Directory。利用 Dogtag **证书系统** 进行 CA 和 RA 证书管理,支持 **多因素** 身份验证,包括智能卡。集成了 SSSD 以支持 Unix 身份验证过程。
## 指纹
### 文件与环境变量
* `/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 身份验证相关的特定文件和设置。
### 二进制文件
工具如 `ipa`、`kdestroy`、`kinit`、`klist`、`kpasswd`、`ksu`、`kswitch` 和 `kvno` 是管理 FreeIPA 域、处理 Kerberos 票证、修改密码和获取服务票证等功能的核心。
### 网络
提供了一个插图来描绘典型的 FreeIPA 服务器设置。
## 身份验证
FreeIPA 中的身份验证利用 **Kerberos**,与 **Active Directory** 中的身份验证相似。访问域资源需要有效的 Kerberos 票证,具体存储位置取决于 FreeIPA 域配置。
### **CCACHE 票证文件**
CCACHE 文件通常存储在 **`/tmp`** 中,权限为 **600**,是用于存储 Kerberos 凭据的二进制格式,重要的是可以在没有用户明文密码的情况下进行身份验证。可以使用 `klist` 命令解析 CCACHE 票证,重新使用有效的 CCACHE 票证涉及将 `KRB5CCNAME` 导出到票证文件的路径。
### **Unix 密钥环**
另外CCACHE 票证可以存储在 Linux 密钥环中,提供对票证管理的更多控制。票证存储的范围各异(`KEYRING:name`、`KEYRING:process:name`、`KEYRING:thread:name`、`KEYRING:session:name`、`KEYRING:persistent:uidnumber``klist` 能够解析这些信息供用户使用。然而,从 Unix 密钥环重新使用 CCACHE 票证可能会面临挑战,像 **Tickey** 这样的工具可用于提取 Kerberos 票证。
### Keytab
Keytab 文件包含 Kerberos 主体和加密密钥对于在不需要主体密码的情况下获取有效的票证授予票TGT至关重要。使用 `klist` 等实用程序和 **KeytabParser** 等脚本可以轻松解析和重新使用 keytab 文件中的凭据。
### 备忘单
您可以在以下链接中找到有关如何在 Linux 中使用票证的更多信息:
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## 枚举
{% hint style="warning" %}
您可以通过 **ldap** 和其他 **二进制** 工具进行 **枚举**,或 **连接到 FreeIPA 服务器的 443 端口的网页**
{% endhint %}
### 主机、用户和组 <a href="#id-4b3b" id="id-4b3b"></a>
可以创建 **主机**、**用户** 和 **组**。主机和用户被分类到称为“**主机组**”和“**用户组**”的容器中。这些类似于 **组织单位**OU
在 FreeIPA 中LDAP 服务器默认允许 **匿名绑定**,大量数据可以 **未经身份验证** 进行枚举。这可以枚举所有可用的未经身份验证的数据:
```
ldapsearch -x
```
要获取**更多信息**,您需要使用**经过身份验证**的会话(请查看身份验证部分以了解如何准备经过身份验证的会话)。
```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
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
```
从一个已加入域的机器上,您将能够使用 **已安装的二进制文件** 来枚举域:
```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
```
{% hint style="info" %}
**FreeIPA****admin** 用户相当于 **AD** 中的 **domain admins**
{% endhint %}
### Hashes <a href="#id-482b" id="id-482b"></a>
**IPA 服务器**中的 **root** 用户可以访问密码 **hashes**
* 用户的密码 hash 存储为 **base64** 在“**userPassword**” **attribute** 中。这个 hash 可能是 **SSHA512**(旧版本的 FreeIPA**PBKDF2\_SHA256**
* 如果系统与 **AD****integration**,则密码的 **Nthash** 存储为 **base64** 在“**ipaNTHash**”中。
破解这些 hashes
• 如果 freeIPA 与 AD 集成,**ipaNTHash** 很容易破解:你应该 **decode** **base64** -> 重新编码为 **ASCII** hex -> John The Ripper 或 **hashcat** 可以帮助你快速破解
• 如果使用的是旧版本的 FreeIPA则使用 **SSHA512**:你应该解码 **base64** -> 找到 SSHA512 **hash** -> John The Ripper 或 **hashcat** 可以帮助你破解
• 如果使用的是新版本的 FreeIPA则使用 **PBKDF2\_SHA256**:你应该解码 **base64** -> 找到 PBKDF2\_SHA256 -> 它的 **length** 是 256 字节。John 可以处理 256 位32 字节)-> SHA-265 用作伪随机函数,块大小为 32 字节 -> 你只能使用我们的 PBKDF2\_SHA256 hash 的前 256 位 -> John The Ripper 或 hashcat 可以帮助你破解
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
要提取 hashes你需要在 **FreeIPA 服务器**中是 **root**,在那里你可以使用工具 **`dbscan`** 来提取它们:
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
这些规则授予用户或主机对资源(主机、服务、服务组等)的特定权限。
```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
```
#### Sudo-Rules
FreeIPA 通过 sudo-rules 实现对 **sudo 权限** 的集中控制。这些规则允许或限制在域内主机上使用 sudo 执行命令。攻击者可以通过检查这些规则集来识别适用的主机、用户和允许的命令。
```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
```
### 基于角色的访问控制
一个**角色**由各种**特权**组成,每个特权包含一组**权限**。这些角色可以分配给用户、用户**组**、**主机**、主机组和服务。例如考虑FreeIPA中的默认“用户管理员”角色来举例说明这个结构。
角色`用户管理员`具有以下特权:
* **用户管理员**
* **组管理员**
* **阶段用户管理员**
使用以下命令可以枚举角色、特权和权限:
```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
ipa privilege-find
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all
```
### 攻击场景示例
在 [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) 中,您可以找到一个简单的示例,说明如何滥用某些权限来妥协域。
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## 权限提升
### ~~root 用户创建~~
{% hint style="warning" %}
如果您可以 **创建一个名为 `root` 的新用户**,您可以冒充他并能够 **以 root 身份 SSH 登录任何机器。**
**这已经被修补。**
{% endhint %}
您可以在 [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-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)
{% 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)
<details>
<summary>支持 HackTricks</summary>
* 查看 [**订阅计划**](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 来分享黑客技巧。
</details>
{% endhint %}