在内网中自动化寻找管理员的技术

本文讲的是在内网中自动化寻找管理员的技术,Active Directory域权限升级是大多数渗透测试和红队攻击活动的重要组成部分。虽然获得域/企业管理员权限并不是安全评估的最终目标,但它通常能够更容易的实现渗透测试目标。

典型的域权限提升过程围绕着收集明文凭据或登录到你已经拿到权限的系统并收集该系统中的用户的令牌,或者可以通过Mimikatz最有名的功能来获得提升的权限。找到一个登录到你拥有管理员权限的系统的域管理员,登录该系统,并收集管理员的凭据。

但是,如果你处于一个非常复杂的环境中,你不能立即在域管理员所在的系统上获得管理员权限,这时怎么办?你可能需要一次,两次,三次或更多次的在跳板机之间进行跳转,之后拿到域管理员,并需要做一些分析(或只是在试错)来找到你的渗透测试路径。

我们来看看一种假设的情况:我们在某个环境中获得了Domain User级别的权限,其中有数十万个工作站和服务器加入到了具有不同信任级别的多个域的Active Directory林中。如果可能的话,我们的目标就是将权限提升至企业管理员权限。幸运的是,网络拓扑结构比较简单; 然而,客户端执行了非常严格的最低特权措施。在争取找到提升权限的手段之后,我们终于可以拿到一个叫做“Steve-Admin”的服务器管理员帐户。

“Steve-Admin”是当前这台服务器上的本地管理员,我们需要将这个账户在其他地方也成为管理员。我们会拿这个服务器列表,找出哪些用户登录到了这些服务器上。然而,在这一点上,我们需要决定我们要选择哪个用户。我们可以拿到权限的登录用户都不是域管理员账户,也没有域管理员组的用户登录到这台服务器。我们必须选择一个帐户,找到这个账户具有管理权限的系统,枚举这些机器上的登录用户,并继续渗透,直到我们最终找到一个有效的路径。在具有成千上万台计算机和用户的环境中,该过程可能需要几天甚至几周的时间。

在这篇文章中,我会解释并展示如何自动化这个渗透过程。

先前的一些工作

这种思路的实现在很大程度上依赖于一些非常聪明且非常勤奋的人所公开分享的一些现有的工具和想法:

  • Will Schroeder 开发的PowerView(@harmj0y) – https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
  • 由Justin Warner发表的衍生的本地管理员的博文(@sixdub) – http://www.sixdub.net/?p=591
  • Jim Truher(@jwtruher)开发的Dijkstra算法的PowerShell实现 – https://jtruher3.wordpress.com/2006/10/16/dijkstra/
  • Emmanuel Gras和Lucas Bouillot发布的Active Directory控制路径 – https://github.com/ANSSI-FR/AD-control-paths
  • Justin Warner(@sixdub)的域信任的节点分析- http://www.sixdub.net/?p=285

图论

可以想像一下,如果我们试图找到一条从“Steve-Admin”提权到企业管理的路径,而不是从华盛顿西雅图到俄勒冈州的波特兰找到一条路。作为一个人,你可以看一看地图,很容易确定5号州际公路可以让你到那里去。计算机可以找到西雅图和波特兰之间(以及“Steve-Admin”和企业管理员之间的路径,如果存在的话)。

PowerView可以为我们提供我们所需要的大部分数据,以便自动完成执行从“Steve-Admin”到Enterprise Admin的路径查找。而其余部分则是莱昂纳德·尤勒在18 个世纪建立的数学的一个分支,现在被称为图论。欧拉能够使用图形理论的现在标准的基础知识来证明没有解决柯尼斯堡问题的七桥。这些基本原则包括:

  • 顶点 – 顶点(或节点)是用于表示所表示的系统的单个元素的点。你可以将地图上的城市视为顶点。
  • 边缘 – 边缘用于连接顶点。可以引导边缘(即:单向)或无向(即:双向)。边缘一般代表一种关系。如果西雅图和波特兰被认为是顶点,I-5可以被认为是连接这些城市的双向边缘。
  • 路径 – 路径是将一个节点连接到另一个节点的一组边和节点,无论这些节点是否相邻。
  • 邻接 -共享边缘的顶点被认为是相邻的。

图形设计

我提出的这个问题的概念证明是设计了一个目标 – 自动化找到能拿到域管理员权限的最短路径的过程,而无需写入磁盘或需要离线分析。因此,该图的设计可能不适用于其他问题。

在设计这个图时,我主要关注简单性。经过无数次的失败,我终于得出了一个有用的设计:

  • 每个用户和计算机都是顶点。
  • 所有边缘均被定向和未加权。
  • 从用户到计算机的有向边界指示本地管理员权限。
  • 从计算机到用户的有向边缘指示登录的用户。

想象一下,一个非常基本的网络由两台电脑和两个用户组成。“管理员”帐户对这两个系统都有管理员权限。其中一个系统有一个用户“mnelson”登录。使用上述设计的该系统的视觉表示将如下图所示:

每个用户和计算机都是顶点。橙色边缘告诉我们,管理员帐户在两个系统上具有管理员权限。蓝色的边缘告诉我们,“mnelson”被登录到HR-WS-002上。在这种设计中,边缘总是意味着源顶点可能会损害目标顶点 – 管理员可以危及HR-WS-002和HR-WS-002(即:本机上的SYSTEM帐户)同时可能会使mnelson用户被入侵。

构建图

找到我们图的顶点不容易。因为我们将每个用户和计算机视为一个节点,它与使用两个PowerView cmdlet – Get-NetUser和Get-NetComputer一样简单:

此时图形的视觉表示可能如下所示:

为了准备运行Dijkstra的算法,我们给每个顶点以下属性:

  • 名称 – 顶点的名称。示例:'mnelson'或'HR-WS-002'
  • 边缘 – 这个顶点有一个边缘的顶点数组。最初设置为$Null。
  • 距离 – 从源顶点到该顶点所需的跳数。最初设置为无限远。注意这是一个未加权的图。
  • 被访问 – 是否确定了到该节点的最短距离。最初设置为$False。
  • 前身 – 从源顶点到该顶点的路径中前一个顶点的名称。最初设置为$Null。

识别每个顶点的边缘稍微有点复杂。我们可以再次利用PowerView 的cmdlet – Get-NetSession。此cmdlet会返回我们运行的每台计算机的会话信息,让我们看到用户在该计算机上的会话以及该会话来自哪里,有效地允许我们确定哪些用户登录在哪里 – 所有的这些用户都没有提升过权限。使用这些信息,我们可以将边缘的计算机顶点填充到登录的用户。接下来,对于每台计算机,我们都有用户登录信息,我们递归地枚举该机器上的本地管理员用户。此信息允许我们使用边缘(指示本地管理员权限)填充相应的用户顶点到该计算机。

在我的测试实验室中,所有边缘的完成图可以像这样直观地表示:

回想一下,用户 – >计算机边缘表示管理员权限,计算机 – >用户边表示已登录的用户。

显然,“管理员”帐户是三台电脑中每一台计算机的管理员。“mnelson”用户是OPS-WS-002上的管理员。“jwarner”用户是IT-SRV-002的管理员。

HR-WS-002有一个用户登录:mnelson。OPS-WS-002有一个用户:jwarner。最后,具有三个登录用户的IT-SRV-002:rwinchester,jfrank和Administrator。jdimmock用户既不是管理员,也没有在任何地方登录(他可能在PTO上)。

我们现在有了我们需要找到从任何顶点到任何其他的最短路径的一切信息。

回想一下我之前概述的情况。从“Steve-Admin”,我们有几十台计算机和用户定位,没有一个可以让我们立即访问域管理员帐户。我们可以使用算法在几分钟内为我们找到该路径,而不是花费几个小时,几天甚至几周时间分析每个选项(或更糟糕的是,通过我们的选项进行试错)。

Dijkstra算法

我花更多的时间学习Dijkstra的算法,我越来越欣赏创造这种优雅,高效的方法的天才。Dijkstra的算法允许我们指定一个源顶点并找到图中每个其他顶点的最短路径,而且只需要n个循环,其中n是图中的顶点数。以下是Dijkstra算法的工作原理:

  1. 识别源顶点。将其距离设置为0.将每个其他顶点的距离设置为无穷大。
  2. 识别具有最小距离值的未访问的顶点,并将其标记为当前顶点。
  3. 考虑当前顶点的边。对于与当前顶点相邻的每个顶点,将其距离与当前顶点的距离加上一个值进行比较 – 如果此计算距离低于当前值,则更新相邻顶点的距离,并将相邻顶点的前导值更新为当前顶点。
  4. 转到步骤2,直到所有顶点都被访问。

一旦算法完成,每个顶点的距离值将告诉我们该顶点是否可以由源顶点到达,以及多少跳。另外,由于每个顶点的上一个属性,我们还可以回溯到我们的来源:

  1. 获取目标顶点的名称,并将其添加到我们的路径数组中。
  2. 将最近添加的顶点放在路径数组中,找到它的前身。将前导添加到路径数组。
  3. 重复,直到没有前身。在这一点上,我们已经达到了我们的源顶点。

结论和PoC

我们几乎没有入侵到这里的可能性。将图形理论(和其他数学领域)应用于Active Directory进攻和防御有一些非常令人兴奋的可能性(参见Brandon Helms aka cr0n1c:https ://cr0n1c.wordpress.com/2016/01/27 / using-sccm-to-violate-best-practices /)。例如,通过反转此图中每个边的方向,并使用管理员权限获取更多的登录用户数据,我们可以指定“管理员”用户作为源,并通过Dijkstra算法的一次迭代确定所有帐户AD可能会损害“管理员”帐户的路径。

原文发布时间为:2017年8月22日

本文作者:丝绸之路 

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-12-30 23:34:13

在内网中自动化寻找管理员的技术的相关文章

Tunnel:论如何在内网中自由渗透

背景 能够成功地通过web漏洞获取到webshell,对于一次完整的渗透测试来说,仅仅相当于万里长征的第一步.这么说,可能比较夸张吧,并不是所有渗透测试都会遇到几百台机器的大内网. 在PTES(渗透测试执行标准)中,把渗透测试分成了七个主要的过程,也就是说现在通常说的前期交互.目标识别.信息收集.漏洞分析.漏洞利用.后渗透测试.报告编制这七大步骤.如果你看过PTES标准,你应该会跟我有一样的感觉,后渗透测试部分的内容,几乎等于其他六个部分的总和.当然,也只是在系统规模达到一定程度的时候,才会明显

从活动目录中获取域管理员权限的6种方法

本文讲的是从活动目录中获取域管理员权限的6种方法,通常,在大多数企业当中,攻击者根本不需要太长的时间,就可以将域中普通用户的权限提升到域管理员的权限.公司运维人员会困惑,"这一切都是怎么发生的?" 一次攻击,往往开始于公司中的一个或多个用户打开了恶意邮件,使得攻击者可以在目标网络中的计算机上执行恶意代码.一旦恶意代码被运行,攻击者就会利用恶意代码对企业内网进行侦查,以便于发现有用的资源进行提权,进行持久控制,当然,他们还有可能进行信息掠夺. 虽然整体的细节以及流程大多不同,但是他们的目

阿里巴巴直播防控中的实人认证技术

阿里巴巴直播防控中的实人认证技术         直播作为近来新兴的互动形态,已经成为近几年最风生水起的行业之一.在2016年仿佛进入了"千团大战"的繁华.欢聚时代10亿砸向虎牙和ME直播,斥资1亿签下主播MISS:腾讯4亿投资斗鱼,后者估值10亿美元:新成立的映客获得昆仑万维.复赛等机构的8000万人民币投资:易直播获得6000万人民币A轮融资:360推出花椒.秒拍推出一直播....网络直播正享受其最好的时光,直播"风口"成投资方必争之地. 然而网络直播也因为走的

网游大佬“恶补”3D技术

3D电影.3D地图.3D报刊--3D已然成为多个行业新的掘金点.然而在3D技术需求最为强盛的网游领域,因硬件等条件限制,总体发展与影视等领域相比略显滞后.进入2010年以来,国内网游巨头也纷纷在3D领域发力,从"挖人买人"逐渐转向"自身培养". 网游大佬"恶补"3D技术 记者近日获悉,继邀请水晶石公司为其大型玄幻武侠网游<天下贰>打造国内首款3D广告之后,网易再度与水晶石携手,双方在人才培训方面达成合作意向. 对此,业内人士分析认为,

如何查看网中IP是否被占用

  查看网中IP是否占用方法一:原始ping法 第一个方法比较简单,而且受环境限制比较大.众所周知在没有安装防火墙和设置过滤规则的计算机上都容许ICMP协议数据包的通过,那么可以通过"ping ip地址"这个命令来查看该IP地址是否有计算机使用.通过任务栏的"开始-运行",输入CMD后回车进入命令行模式.假设公司网络是192.168.1.0/255.255.255.0,那么可以通过ping 192.168.1.1,ping 192.168.1.2......ping

盘点新零售中使用的各种物联网技术

最新市场研究,前期是由医疗健康和汽车行业的增长直接带动了全球物联网芯片市场的发展,随着物联网技术在各行各业应用的不断深入,零售行业预计将后发制人.超越其它领域,成为IoT应用的主导行业之一. 新零售的"新"体现在新业态.新人群和新品牌.但同时,无论怎样形容新零售,其实真正的核心就是人.货.场这三要素.当其他人在为"新零售"创造的新鲜业态欢呼时,我们来看看"新零售"中使用的各种物联网技术. 目前无人商店在技术上大致可分为三个流派: Amazon G

JSP中使用Java的JDBC技术实现对数据库的各种操作

在JSP 中可以使用Java 的JDBC 技术,实现对数据库中表记录的查询.修改和删除等操作.JDBC 技术在JSP 开发中占有很重要的地位. JDBC(Java DataBase Connectivity)是Java 数据库连接API.简单地说, JDBC 能完成三件事: (1) 与一个数据库建立连接, (2) 向数据库发送SQL 语句, (3) 处理数据库返回的结果. JDBC 和数据库建立连接的一种常见方式是建立起一个JDBC─ODBC 桥接器.由于ODBC 驱动程序被广泛的使用,建立这种

Windows 7中的无规律内存通道技术

Windows 7不仅可以更好地利用运算更快的CPU,同时对单芯片多核心的支持也非常好.64位的Windows 7在单台机器上甚至可以支持超过64个逻辑处理器. 随着处理器芯片和操作系统的升级,微软也对程序员们提出了更高的要求,强调他们开发出的产品必须适应这样的升级.基本来说,开发者们可以利用多核处理器带来的双线运行技术提高性能.这就是Windows 7中的无规律内存通道技术. Phil Pennington,Windows Server开发主管透露:"64位版的Windows 7和Window

在AIX Version 5.3中使用Java和PHP技术进行开发: 第6部分

第 6 部分 为 Java 业务应用程序构建 PHP Web 接口 简介:使用在本系列文章(请参见参考资料)前面的教程中所创建的数据库,为 Java 业务应 用程序构建 PHP Web 接口.这个 PHP Web 接口可以收集来自用户的信息,并将会话数据发送到 Java 业 务应用程序,以进行相应的处理和响应. 开始之前 本教程面向那些希望在 Web 应用程序开发中快速集成 PHP 和 Java 的 AIX 5.3 开发人 员.在本教程中,您将完成一个解决方案的构建过程,其中使用 PHP 作为前