FreeIPA Pentesting

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

基本信息

FreeIPA 是 Microsoft Windows Active Directory 的开源替代品,主要用于Unix环境。它将完整的LDAP 目录与类似 Active Directory 的 MIT Kerberos密钥分发中心相结合。使用 Dogtag 证书系统进行 CA 和 RA 证书管理,支持包括智能卡在内的多因素身份验证。SSSD 用于 Unix 认证流程的集成。

指纹

文件和环境变量

  • 位于 /etc/krb5.conf 的文件存储着 Kerberos 客户端信息,这对于加入域是必要的,其中包括 KDC 和管理员服务器的位置、默认设置和映射。

  • 位于 /etc/ipa/default.conf 的文件设置了 IPA 客户端和服务器的系统范围默认值。

  • 域内的主机必须在 /etc/krb5.keytab 处拥有一个 krb5.keytab 文件,用于认证流程。

  • 各种环境变量(KRB5CCNAMEKRB5_KTNAMEKRB5_CONFIGKRB5_KDC_PROFILEKRB5RCACHETYPEKRB5RCACHEDIRKRB5_TRACEKRB5_CLIENT_KTNAMEKPROP_PORT)用于指向与 Kerberos 认证相关的特定文件和设置。

二进制文件

诸如 ipakdestroykinitklistkpasswdksukswitchkvno 等工具是管理 FreeIPA 域、处理 Kerberos 票证、更改密码以及获取服务票证等功能的核心。

网络

提供了一个示意图,描述了典型的 FreeIPA 服务器设置。

认证

FreeIPA 中的认证利用Kerberos,与Active Directory中的认证类似。访问域资源需要有效的 Kerberos 票证,这些票证可以根据 FreeIPA 域配置的不同存储在不同位置。

CCACHE 票证文件

CCACHE 文件通常存储在 /tmp 中,权限为 600,是用于存储 Kerberos 凭据的二进制格式,由于其可移植性,对于无需用户明文密码进行认证很重要。使用 klist 命令可以解析 CCACHE 票证,重用有效的 CCACHE 票证涉及将 KRB5CCNAME 导出到票证文件的路径。

Unix 密钥环

另外,CCACHE 票证可以存储在 Linux 密钥环中,提供对票证管理的更多控制。票证存储的范围不同(KEYRING:nameKEYRING:process:nameKEYRING:thread:nameKEYRING:session:nameKEYRING:persistent:uidnumber),klist 能够解析用户的此信息。然而,从 Unix 密钥环中重用 CCACHE 票证可能会带来挑战,可使用类似 Tickey 的工具来提取 Kerberos 票证。

Keytab

包含 Kerberos 主体和加密密钥的 Keytab 文件对于获取有效的票证授予票证(TGT)而无需主体密码至关重要。使用像 klist 这样的实用程序和类似 KeytabParser 的脚本可以轻松地解析和重用来自 Keytab 文件的凭据。

备忘单

您可以在以下链接中找到有关如何在 Linux 中使用票证的更多信息:

Linux Active Directory

枚举

您可以通过 ldap 和其他 二进制工具执行枚举,或连接到 FreeIPA 服务器的端口 443 上的网页进行枚举。

主机、用户和组

可以创建主机用户。主机和用户被分类到分别称为“主机组”和“用户组”的容器中。这类似于组织单位(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

FreeIPA管理员用户相当于AD中的域管理员

Hashes

IPA服务器root用户可以访问密码哈希

  • 用户的密码哈希以base64形式存储在“userPassword属性中。该哈希可能是SSHA512(旧版本的FreeIPA)或PBKDF2_SHA256

  • 如果系统与AD集成,密码的Nthashbase64形式存储在“ipaNTHash”中。

要破解这些哈希:

• 如果FreeIPA与AD集成,ipaNTHash容易破解:您应该解码 base64 -> 重新编码为ASCII十六进制 -> John The Ripper或hashcat可以帮助您快速破解

• 如果使用旧版本的FreeIPA,那么使用SSHA512:您应该解码base64 -> 找到SSHA512 哈希 -> John The Ripper或hashcat可以帮助您破解

• 如果使用新版本的FreeIPA,那么使用PBKDF2_SHA256:您应该解码base64 -> 找到PBKDF2_SHA256 -> 其长度为256字节。John可以处理256位(32字节)-> SHA-265用作伪随机函数,块大小为32字节 -> 您只能使用PBKDF2_SHA256哈希的前256位 -> John The Ripper或hashcat可以帮助您破解

要提取哈希,您需要成为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规则

FreeIPA通过sudo规则实现对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中,您可以找到一个简单的示例,说明如何滥用某些权限来 compromise 该域。

Linikatz/LinikatzV2

提权

root 用户创建

如果您可以创建一个名为 root 的新用户,您可以冒充他,从而能够以 root 身份 SSH 进入任何机器

此问题已修复。

您可以在https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b中查看详细说明。

参考资料

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

最后更新于