攻击 FreeIPA 域:对象枚举
实验室环境
在我们深入讨论之前,让我们简要回顾一下实验室环境是如何创建的,以及它的总体结构。
详细设计 FreeIPA 实验室环境的图解
上面的图表是我为这个系列文章建立的 FreeIPA 实验室环境的总体布局,已经被用于安全研究。 FreeIPA 背后的团队为 FreeIPA 服务器和跨多个流行操作系统的客户机维护了 docker 镜像。你可以在 Dockerhub 或者 Github 上找到这些 docker 镜像,链接如下:
· https://hub.docker.com/r/freeipa/freeipa-server/
· https://github.com/freeipa/freeipa-container
所有的文档和安装说明都可以在 FreeIPA 网站上找到,链接如下:
· https://www.freeipa.org/page/Docker
我们在这个练习中的出发点将放弃对托管 FreeIPA 环境中的受损 web 服务器的访问。其目的是最终获得域的管理员凭证,并从 SQL 数据库中提取出敏感数据。在我们深入研究这些目标之前,让我们先了解一下 FreeIPA 环境中的一些基本对象和枚举技术。
主机、用户和组
与 windows 活动目录 (AD) 特别相似,FreeIPA 允许管理员创建主机和用户。这些主机和用户可以分别按照称为“主机组”和“用户组”的容器进行排序。与 AD 相比,这些群组的功能非常类似于组织单位(OU)。
基于主机的访问控制规则(HBAC-Rules)、特权、角色和 sudo-Rules 可以应用于上述任何对象。如果你不熟悉HBAC-Rules、 Privileges、 Roles 或 Sudo-Rules,不必担心。稍后我们将深入探讨这些问题。
有多种方法枚举来自 IPA 服务器中关于域的信息。在这篇文章中,我将尝试介绍以下两种方法:
· 在 LDAP 服务器上使用轻型目录访问协议(LDAP) 查询
· 利用内置的 IPA 管理工具
在这样的背景下,让我们深入实验室,开始枚举 FreeIPA 中的用户、主机、用户组和主机组。
通过 LDAP 查询枚举
在 FreeIPA 中默认情况下,LDAP 服务器允许匿名绑定,并且大量数据是在未经身份验证的情况下可枚举的。但是,在未经身份验证的情况下并非所有数据都是可枚举的。 ACL 显式保护了负责映射安全授权控件的数据。下面的命令将检索所有未经身份验证的可用数据:
ldapsearch -x
在本文的其余部分,所有 ldapsearch 命令都将经过身份验证。在本系列的第一篇文章中,我们将详细介绍如何在 FreeIPA 环境中识别和使用凭证。
有了有效的凭据,我们就可以更加具体,通过为每个搜索设置目标的基本专有名称(DN)来过滤查询。下面的查询标识了实验室环境中的所有用户:
ldapsearch -Y gssapi -b “cn=users,cn=compat,dc=westeros,dc=local”
LDAP 的响应数据详细说明了实验室环境中的用户
我们可以使用相同的查询和稍微修改的基本专有名称来检索环境中所有主机的数据:
ldapsearch -Y gssapi -b
“cn=computers,cn=accounts,dc=westeros,dc=local”
LDAP 的响应数据中包含了在实验室环境中的主机的详细信息
同样,我们可以修改基本专有名称来检索每个主机组和用户组:
ldapsearch -Y gssapi -b
“cn=hostgroups,cn=accounts,dc=westeros,dc=local”
ldapsearch -Y gssapi -b “cn=groups,cn=accounts,dc=westeros,dc=local”
通过 IPA 管理工具进行枚举
默认情况下,注册到 FreeIPA 域的主机将安装 IPA 管理工具作为注册过程的一部分。这个工具对于环境的枚举和配置非常有用。正如我们在上面讨论的那样,让我们回顾一下如何使用内置的 IPA 管理工具枚举关于用户、主机、用户组和主机组的信息。
遗憾的是,如果没有有效的域凭证,则无法使用 IPA 工具。如果你发现自己处于缺乏有效域凭据的情况,那么每个主机都会部署一个针对该主机的 keytab 凭证。此 keytab 可用于为主机本身获取有效的凭证缓存(CCACHE)票据授予票据(TGT)。
有了有效的凭证和对 ipa 实用程序的访问权限,你可以使用以下命令枚举相关信息:
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-findipa user-show --all
ipa usergroup-show --all
ipa host-find --all
ipa hostgroup-show --all
HBAC-Rule
Fedora 的 FreeIPA 文档将 HBAC-Rule 定义为:
访问控制,在一个高层次上,定义谁可以访问什么。谁可以是用户或主机(源主机) ,什么可以是主机(目标主机)、服务或服务组,或三者的组合。
HBAC-Rule 应该用于委托对特定资源的访问。如果配置正确,这种访问控制可以非常有效地减少横向移动。作为一个攻击者,我们可以使用 HBAC-Rule 来识别哪些帐户被委托访问环境中的特定资源。
让我们回顾一下如何列举这些策略。
通过 LDAP 查询进行枚举
下面的命令可以用来检索实验室环境中的所有 HBAC-Rule:
ldapsearch -Y gssapi -b “cn=hbac,dc=westeros,dc=local”
LDAP 的响应数据详细描述了实验室环境中的 HBAC-Rule
通过 IPA 管理工具进行枚举
下面的命令可用于检索实验室环境中的所有 HBAC-Rule。
ipa hbacrule-find
ipa hbacrule-show --all
Sudo-Rules
Fedora 的 FreeIPA 文档将 Sudo-Rules 定义为:
Sudo 规则在某种意义上类似于访问控制规则: 它们定义被授予访问权限的用户、规则范围内的命令,然后是规则应用的目标主机。在 FreeIPA 中,可以在规则中配置其他信息,比如 sudoers 选项和 run-as 设置,但是基本元素总是定义谁、什么(服务)和哪里(主机)。
FreeIPA 提供了通过 sudo-rules 从一个集中的源管理 sudo 权限的能力。这些规则集可用于限制或委托在域中注册的主机上作为 sudo 执行命令的能力。作为一个攻击者,我们可以枚举哪些主机和用户也应用了这些规则集,以及哪些命令是允许通过规则集的。
通过 LDAP 查询进行枚举
下面的命令可以用来检索实验室环境中的所有 sudo-rules:
ldapsearch -Y gssapi -b “cn=sudorules,cn=sudo,dc=westeros,dc=local”
LDAP 的响应数据详细描述了实验室环境中的 sudo-rule
通过IPA管理工具进行枚举
下面的命令可以用来检索实验室环境中的所有 sudo-rules。
ipa sudorule-find
ipa sudorule-show --all
基于角色的访问控制
Fedora 的 FreeIPA 文档将以角色为基础的访问控制定义为:
基于以角色为基础的访问控制(RBAC)是一种组织访问 FreeIPA 管理的数据的分层方式。在组织中执行相同任务的不同用户通常组合成一个组,并且该组成为 FreeIPA 角色的成员。此角色为成员组和用户提供执行分配任务所需的权限。
在 FreeIPA 中的角色由几个不同的元素组成。每个角色都包含一组特权,而这些相应的特权包含一组权限。角色可以应用于用户、用户组、主机、主机组和服务。为了说明这个概念,我们来讨论一下 FreeIPA 中默认的“用户管理员”角色。
枚举 FreeIPA 中用户管理员角色的权限
如上图所示,“用户管理员”角色包含以下特权:
· 用户管理员
· 组管理员
· 阶段用户管理员
我们可以进一步深入研究并枚举授予每个特权的权限。
枚举给定特权的权限
正如我们可以看到的,“用户管理员”角色在环境中包含相当多的权限。理解角色、特权和权限的一般概念和结构对于识别整个环境中的攻击路径至关重要。
通过 LDAP 查询进行枚举
下面的命令可以用来检索实验室环境中的所有角色:
ldapsearch -Y gssapi -b “cn=roles,cn=accounts,dc=westeros,dc=local”
LDAP 的响应数据详细说明了“用户管理员”角色的属性
通过 IPA 管理工具进行枚举
下面的命令可以用来检索实验室环境中的所有角色、特权和权限。
ipa role-find
ipa role-show --all
ipa privilege-find
ipa privilege-show --all
ipa permission-find
ipa permission-show --all
总结
希望到目前为止,我们对 FreeIPA 环境中的各种不同类型的对象有了稍微更好的理解,并对它们的意义有了更深的了解。作为攻击者,不仅要能够枚举,而且要能够理解这些对象的重要性,这一点至关重要。
在本系列的下列文章中,我将着眼于讨论以下内容:
· 利用本文中介绍的枚举技术来发现实验室环境中的攻击路径
· 最后,概述了 FreeIPA 环境中攻击者可能滥用的一些错误配置和独特场景
【不,你不想学习,你不需要】
攻击 FreeIPA 域:对象枚举相关推荐
- 重要 APT攻击事件的特征枚举
新型攻击方法分析 鉴于 APT 攻击的对象和目的可能存在差异,不同的 APT 攻击所采用的技术和方法也存 在较大的不同:而且随着 APT 攻防的升级,新的攻击技术和方法也会不断涌现.根据对大量 APT ...
- JavaWeb_域对象的属性操作
JavaWeb_域对象的属性操作 和属性相关的方法: 1)方法 Object getAttribute(String name):获取指定的属性 Enumeration getAttributeNam ...
- java域对象_javaWeb域对象
JavaWeb有ServletContext.ServletRequest.HttpSession.PageContext四大域对象,下面主要从域对象的生命周期.作用.作用范围进行介绍. Servle ...
- Java-Web JSP、Cookie和Session域对象
一.JSP入门 1.什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 2.JSP的组成 JSP = h ...
- request域对象和请求转发
request的其他功能 request是一个域对象 request对象也是一个存储数据的区域对象,所以也具有如下方法: setAttribute(String name, Object o) get ...
- 转发和重定向和request域对象
利用请求域传递对象(request域对象) 重定向和转发的区别(转发)(*****)* 域对象ServletContext:服务器一启动,为每个web应用创建一个ServletContext对象,所有 ...
- ServletContext_功能_域对象
域对象:共享数据 1. setAttribute(String name,Object value) 2. getAttribute(String name) 3. remov ...
- Request_共享数据(域对象)
3. 共享数据: * 域对象:一个有作用范围的对象,可以在范围内共享数据 * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据 * 方法: ...
- 【Servlet】总结 JSP的四大域对象、Servlet的四个作用域:pageContext、request、session、application
JSP的四大域对象:pageContext.request.session.application 这四个域对象,都提供了一对相同的方法: 设置一个属性: setAttribute("属性名 ...
最新文章
- cocos2d游戏jsc文件格式解密,SpideMonkey大冒险
- 变种 背包问题_动态规划入门——传说中的零一背包问题
- 谈谈java面向对象思想_对于Java面向对象思想的理解
- 1109: 胥哥的DOTA-水题(直接做,时间也不超限)
- 《程序员面试金典》合法括号判断
- 异常解析————Parameter metadata not available for the given statement
- 水滴石穿C语言之extern声明辨析
- sql server 查询本周、本月所有天数的数据
- Python基础知识汇总
- 【数据预测】基于matlab灰狼算法优化LSSVM数据预测【含Matlab源码 433期】
- 软件项目开发计划书(大纲)
- paypal如何支付欧元_Paypal怎么付欧元
- 读微博营销案例-杜蕾斯套鞋事件
- L3-001 凑零钱 (30 分)——01背包+路径记录
- python 查找二维数组长度_Python二维数组中的查找
- avr c语言编译器,[VR虚拟现实]AVR单片机C语言编译器.doc
- 禁止 mysql nobody_Warning: mysql_real_escape_string(): Access denied for user 'nobody'@'localhost'
- 面向卫星互联网的层级化智能部署架构
- Android各国语言Values文件夹命名规则
- ios3怎么取消长按弹出菜单_iPhone一直跳出通知好烦?教你如何关闭/管理iOS通知...
热门文章
- 成功解决AttributeError: module 'torch.utils' has no attribute 'data'
- Py之scikit-learn:机器学习Sklearn库的简介、安装、使用方法(ML算法如何选择)、代码实现之详细攻略
- 段式存储、页式存储。
- PyCharm去掉满屏的波浪线
- buildroot--ubootkernelrootfs全编译工具
- UVALive 3026 Period (KMP算法简介)
- c#基类 常用数据验证的封装,数字,字符,邮箱的验证
- 深度剖析云计算背后采用的技术(转载)
- 告诉大家一个------无敌命令
- BLE-NRF51822教程-RSSI获取