11 KiB
FreeIPA Pentesting
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 分享黑客技巧。
基本信息
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 {% endcontent-ref %}
枚举
{% hint style="warning" %} 您可以通过 ldap 和其他 二进制 工具进行 枚举,或 连接到 FreeIPA 服务器的 443 端口的网页。 {% endhint %}
主机、用户和组
可以创建 主机、用户 和 组。主机和用户被分类到称为“主机组”和“用户组”的容器中。这些类似于 组织单位(OU)。
在 FreeIPA 中,LDAP 服务器默认允许 匿名绑定,大量数据可以 未经身份验证 进行枚举。这可以枚举所有可用的未经身份验证的数据:
ldapsearch -x
要获取更多信息,您需要使用经过身份验证的会话(请查看身份验证部分以了解如何准备经过身份验证的会话)。
# 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"
从一个已加入域的机器上,您将能够使用 已安装的二进制文件 来枚举域:
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
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 可以帮助你破解
要提取 hashes,你需要在 FreeIPA 服务器中是 root,在那里你可以使用工具 dbscan
来提取它们:
HBAC-Rules
这些规则授予用户或主机对资源(主机、服务、服务组等)的特定权限。
# 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 执行命令。攻击者可以通过检查这些规则集来识别适用的主机、用户和允许的命令。
# 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中的默认“用户管理员”角色来举例说明这个结构。
角色用户管理员
具有以下特权:
- 用户管理员
- 组管理员
- 阶段用户管理员
使用以下命令可以枚举角色、特权和权限:
# 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 中,您可以找到一个简单的示例,说明如何滥用某些权限来妥协域。
Linikatz/LinikatzV2
权限提升
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-i-authentication-77e73d837d6a
- https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1
- https://www.youtube.com/watch?v=9dOu-7BTwPQ
{% hint style="success" %}
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 在 Twitter 上关注 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。