查看原文
其他

本地帐户和活动目录帐户

谢公子 谢公子学安全 2023-06-22

本文部分节选于《域渗透攻防指南》,购买请长按如下图片扫码。

       在学习域的过程中,我们经常会听到各种各样的帐户,如:本地帐户、域帐户、服务帐户和机器帐户。那么这些帐户与我们之前在工作组中所知的帐户有什么区别和联系呢?
本章主要讲解这几种帐户的特点和联系等。

本地帐户Local Accounts


本地帐户Local Accounts存储在本地的服务器上。这些帐户可以在本地服务器上分配权限,但只能在该服务器上分配。默认的本地帐户是内置帐户(如administrator、guest等),在安装Windows时自动创建。Windows安装后,无法删除默认的本地帐户。此外,默认的本地帐户不提供对网络资源的访问。默认的本地帐户用于根据分配给该帐户的权限来管理对本地服务器资源的访问。默认的本地帐户和后期创建的本地帐户都位于“用户”文件夹中。

01

administrator

在Windows安装过程中创建的第一个帐户就是administrator帐户,其SID为:S-1-5-21-XX-500。该帐户也是默认的本地管理员帐户,在本地管理员组administrators中。该帐户可以完全控制服务器,并根据需要向用户分配用户权限和访问控制权限。每台机器都有该帐户,不能删除或锁定默认的administrator管理员帐户,但可以重命名或禁用它。如图所示:
注:即使重命名administrator帐户,其SID也是不变的。

为了安全考虑 ,在高版本的Windows系统中,Windows默认将禁用内置的管理员帐户administrator,并创建作为管理员组administrators成员的另一个本地帐户。管理员组的成员可以运行具有提升权限的应用程序,而不使用“运行为管理员”选项。如图所示,可以看到administrator帐户的激活属性为No。
如果想激活默认的administrator帐户的话,可以以管理员权限打开cmd窗口执行如下命令:
net user administrator /active:yes
如图所示,执行命令激活administrator帐户。
管理员帐户为用户提供了对本地服务器上的文件、目录、服务和其他资源的完全访问权限。管理员帐户可用于创建本地用户,并分配用户权限和访问控制权限。管理员还可以通过简单地更改用户权限和权限来随时控制本地资源。虽然文件和目录可以暂时不受管理员帐户的保护,但管理员帐户可以随时通过更改访问权限来控制这些资源。

域内计算机上的本地administrator

    机器在加入域后,本地administrator帐户属性不变。如果选择以本地administrator帐户登录的话,需要加上本机机器名作为前缀以本地身份登录。
    如图所示,机器主机名为win2012r2,以本地administrator身份登录该机器。
    以本地管理员身份登录后,无法通过SAMR协议查询LDAP相关信息。如图所示:
    如果想通过SAMR协议查询LDAP信息的话,必须先用工具提升到System权限,再执行查询操作。至于为什么需要提升到System权限后去查询,会在下面的机器帐户篇中讲解。
    如图所示,将权限提升为System后,再通过SAMR协议查询LDAP相关信息。

02

Guest

在Windows安装过程中会创建Guest帐户,其SID为:S-1-5-21-XX-501,但是该帐户默认是禁用的。Guest帐户允许在计算机上没有帐户的临时或一次性用户临时登录本地服务器或客户端计算机。默认情况下,Guest帐户的密码为空。因为Guest帐户可以提供匿名访问,因此这是一个安全风险。所以为了安全起见,最好是禁用来宾帐户。如图所示,可以看到Guest帐户默认是禁用的。
默认情况下,Guest帐户是默认本地Guest组(SID:S-1-5-32-546)的唯一成员,它允许用户登录到服务器。如图所示,可以看到Guest用户属于Guests组。

03

DefaultAccount

DefaultAccount也被称为默认系统管理帐户DSMA,该帐户是在Windows 10版本1607和Windows Server2016中引入的内置帐户。DSMA是一种著名的用户帐户类型,它是一个用户中立的帐户,可以用于运行多用户感知或与用户无关的进程。DSMA在桌面SKU和WS2016上默认被禁用。
如图所示,可以看到DefaultAccount帐户默认被禁用了。
DSMA有一个著名的RID为503,因此,DSMA的安全标识符SID具有如下格式的著名SID:S-1-5-21-xx-503。
如图所示,可以看到DefaultAccount帐户的SID。
DSMA是著名的System Managed Accounts Group组的成员,该组拥有著名的SID:S-1-5-32-581。如图所示,可以看到DefaultAccount帐户属于System Managed Accounts Group组。

04

WDAGUtilityAccount

WDAGUtilityAccount帐户是Windows系统为Windows Defender应用程序防护方案管理和使用的用户帐户,该帐户是在Windows 10版本1709和Windows Server2019中引入的内置帐户。除非在设备上启用了应用程序防护,否则它默认保持禁用状态。 WDAGUtilityAccount 用于以具有随机密码的标准用户登录应用程序防护容器。 如图所示,可以看到WDAGUtilityAccount其激活状态为No。
WDAGUtilityAccount有一个著名的RID为504,因此,DSMA的安全标识符SID具有以下格式的著名SID:S-1-5-21-xx-504。
如图所示,可以看到DefaultAccount帐户的SID。

活动目录帐户Active Directory Accounts

活动目录帐户是活动目录中的帐户,活动目录帐户可分为用户帐户、服务帐户和机器帐户。活动目录帐户存储在活动目录数据库中。
从图中我们可以看到用户帐户、服务帐户和机器帐户之间的包含关系。不管服务帐户还是机器帐户,其实都属于用户帐户。而区分服务帐户的一点就是看其是否注册了SPN。区分机器帐户的一点就是看其objectcategory属性是否为computer。
下面我们来看看这几种活动目录帐户的区别和联系。

01

用户帐户User Accounts

    活动目录用户帐户可以代表一个物理实体,如个人。用户帐户就是在域内的用户帐户,与本地用户帐户存储在本地机器不同的是,域用户帐户存储在活动目录数据库中。域内所有用户均在域全局组Domain Users内。
    如图所示,是Domain Users组的属性。

域控上的本地帐户

服务器在升级为域控后,其本地帐户会在活动目录中有对应的帐户,它们将存储在活动目录用户和计算机中的“Users”容器中。如本地的Guest帐户将提升为域的Guest帐户、本地administrator帐户将提升为域的administrator帐户。
如图所示,可以看到本地的administrator帐户和本地Guest帐户都在“Users”容器中,提升为了域内的帐户。
服务器在升级为域控后,其本地普通用户将变为域普通用户,其本地管理员组administrators内的用户将升级为域管理员组Domain Admins内的用户,默认本地管理员administrator将升级为域默认管理员administrator,并需要设置符合密码强度的密码。此后,这些帐户具有域范围的访问权限,访问时加上域前缀即可,并且与域内机器或独立服务器的默认本地用户帐户完全独立。

administrator帐户

服务器在升级为域控后,本地administrator帐户将升级为域administrator帐户,其是活动目录中的Administrators、Domain Admins、Enterprise Admins、组策略创建者所有者和Schema Admins groups的默认成员。
如图所示,是域管理员administrator的一些属性,其SID为S-1-5--500。

Guest帐户

如图所示,我们在域控上激活Guest用户。
服务器在升级为域控后,本地Guest帐户将升级为域Guest帐户。其是针对没有个人帐户的人的用户帐户。此用户帐户不需要密码。默认情况下,Guest帐户被禁用,建议保持禁用。
如图所示,是域Guest帐户的一些属性,其SID为S-1-5--501。
如图所示,激活完成后,该Guest用户将可以登录域内所有成员机器。

krbtgt帐户

krbtgt帐户是一个本地默认帐户,其作用为密钥发行中心服务帐户,它会在创建新域时自动创建。
如图所示,是krbtgt用户的信息。
如图所示,任何情况下无法删除此帐户,无法更改该帐户的名称,也无法在活动目录中启用krbtgt帐户。
krbtgt有一个著名的RID为502,因此,krbtgt的安全标识符SID具有以下格式的著名SID:S-1-5--502。如图所示,是域krbtgt帐户的一些属性。
krbtgt帐户是krbtgt安全主体的实体。在Kerberos身份验证的AS-REP步骤中,KDC返回的TGT认购权证是由krbtgt用户哈希加密的,而krbtgt帐户的哈希只有KDC知道。详情可以看1.2章中的Kerberos协议篇。

新建域用户

在域内,只有域管理员和企业管理员有权限新建域帐户。新建域帐户可以采用命令行方式创建也可以采用图形化方式创建。新建后的域帐户均在Domain Users组中。
命令行新建域用户
如下命令,创建域帐户hack,密码为P@ss1234。
net user hack P@ss1234 /add /domain
如图所示,成功新建域用户hack。

图形化界面新建域用户
域管理员可以打开Active Directory用户和计算机管理框来创建用户。
如图所示,直接在Users容器右键——>新建——>用户即可。
如图所示,弹出如下对话框,只需要填姓名和用户登录名那里即可,姓、名以及英文缩写可填可不填,然后点击下一步。
然后填该用户的密码以及一些属性,点击下一步即可。如图所示:
最后点击完成即可,如图所示:
即可在Users容器下看到张三用户,如图所示:
也可以新建一个OU组织单位,然后在该组织单位下新建用户,这样方便于管理不同部门的用户。
如图所示,在技术部组织单位下新建用户。
注:不管是在哪个容器、哪个组织单位下新建用户,该用户均是实现user类,在域组Domain Users下。

用户帐户的属性

每个域用户在活动目录数据库内对应的是一个条目对象,因此它有属性。我们在图形化新建域用户时,可以看到有很多需要填的地方。
如图所示,我们把所有需要填的信息都填上,新建一个用户张三。
然后我们通过LDAP查询张三用户的属性,如图所示:
可以看到,图形化界面创建用户时和通过ldap查询的一些对应关系,如下所示:
属性
含义
sn
giveName
initials
英文
displayName 、cn 和 name
姓名
而这里用户登录名就是用来 登录域时所用的登录名。有两种:
  • UPN(User Principal Name):如 zhangsan@xie.com 。UPN的格式与电子邮件账号相同,在整个林内,这个名称必须是唯一的。UPN并不会随着帐户被移动到其他域而改变。
  • 用户SamAccountName:如 xie\zhangsan 。这是旧格式的登录账号。Windows2000之前版本的旧客户端需要使用这种格式来登录域。在以后版本的客户端,也支持使用这种方式登录。在同一个域内,这个名称必须是唯一的。
我们在Active Directory用户和计算机中找到该用户,右键属性,查看该用户的更多属性。如图所示:
在地址栏选项卡中填入如图所示的值:
在电话选项卡中填入如图所示的值:
再次通过LDAP查询张三用户的属性,可以看到,地址和电话选项卡填的值和一些属性的对应关系,如下所示:
属性
含义
co
国家/地址
postalCode
邮政编码
st
省/自治区
l
市/县
streetAddress
街道
postOfficeBox
邮政信箱
homePhone
家庭电话
pager
寻呼机
mobile
移动电话
facsimileTelephoneNumber
传真
ipPhone
ip电话
我们再次通过LDAP查询张三用户的属性,如图所示:
用户还有一些其他属性和含义如下:
属性
含义
badPasswordTime
登录时密码错误的时间
badPwdCount
密码错误次数
codePage
代码也没
countryCode
国家代码
distinguishedName
dn名
lastLogoff
最后注销时间
lastLogon
最后登录时间
logonCount
登录次数
nTSecurityDescriptor
该账号的ACL
objectCategory
对象索引目录,值为单个
objectClass
继承的类,可以有多个
objectGUID
对象的GUID
objectSid
对象的SID
primaryGroupID
私密的组ID
pwdLastSet
密码最后设置的时间
samAccountType
域内机器账号类型
userAccountControl
用户帐户控制ACL
uSNChanged
USN改变的时间
uSNCreated
USN创建的时间
whenChanged
账号改变的时间
whenCreated
账号创建的时间

用户帐户的选项

每个活动目录用户帐户都有许多帐户选项。如下表描述了可用于配置用户帐户的密码设置和安全特定信息的选项。
选项
描述
User must change password at next logon
强制用户在下次登录到网络时更改其密码。
User cannot change password
防止用户更改其密码。
Password never expires
防止用户密码过期。建议服务帐户启用此选项并使用强密码。
Store passwords using reversible encryption
为使用协议以了解用户密码的明文形式的应用程序提供支持。当在因特网认证服务(IAS)中使用挑战-响应认证协议(CHAP),以及在因特网信息服务(IIS)中使用摘要身份验证时,都需要此选项。
Account is disabled
禁止用户使用所选帐户登录。
Smart card is required for interactive logon
要求用户拥有一张智能卡,以便以交互式的方式登录到网络。用户还必须在其计算机上安装一个智能卡读卡器和该智能卡的有效个人识别号(PIN)。
Account is trusted for delegation
该帐户配置了委派属性。
Account is sensitive and cannot be delegated
允许控制用户帐户,例如客户帐户或临时帐户。如果此帐户不能由其他帐户分配给委派,则可以使用此选项。
Use DES encryption types for this account
为数据加密标准(DES)提供支持。DES支持多级加密,包括微软点对点加密(MPPE)标准(40位和56位)、MPPEStrong(128位)、互联网协议安全(IPSec)DES(40位)、IPSec56位DES和IPSec三重DES(3DES)。
Do not require Kerberos preauthentication
不要Kerberos预认证。

查询域用户

在有些场景下,我们需要查询域内的所有域用户;有时候,需要精确查找域内的某个用户。当需求不同时,如何不同的查询域用户呢?
查询域内所有用户
当我们想查询域内的所有用户时,如何将域内所有用户查询出来呢?
我们可以利用系统自带的net命令查询域内所有用户。由于域内的用户都在“domain users”组内,因此可以使用如下命令进行查询。
#查询域内所有用户net group "domain users" /domain#这条命令查询的话,除了会查询出域内所有用户外,还会查询出域控的本地账号guestnet user /domain
如图所示,使用net命令查询域内所有用户。
也可以利用 PowerSploit 下的 PowerView.ps1脚本,该脚本的输出用户名比较直观。该脚本的使用如下:
Import-Module .\PowerView.ps1Get-NetUser | select name
如图所示,使用PowerView.ps1脚本查询域内所有用户。
在 impacket 里面有一个samrdump.py脚本,其通过调用SAMR协议去查询域内所有用户。使用命令如下:
python3 samrdump.py xie/hack:P@ss1234@10.211.55.4 -csv
如图所示,使用samrdump.py脚本查询域内所有用户。
adfind工具通过LDAP协议查询出域内所有用户,由于域用户的objectCategory属性为person而objectClass属性为user,因此adfind查询域内所有用户命令如下:
adfind.exe -f "(&(objectCategory=person)(objectClass=user))" -dn
如图所示,使用adfind工具查询域内所有用户。

精确查询指定用户
有时候,需要精确查询指定用户的详细信息,我们可以用如下方法:
我们可以利用系统自带的net命令查询域内指定用户信息,该命令是通过SAMR协议进行查询,如下:
net user hack /domain
如图所示,使用net命令查询hack用户信息。
也可以利用 PowerSploit 下的 PowerView.ps1脚本查询域内指定用户详细信息。该脚本的使用如下:
Import-Module .\PowerView.ps1Get-NetUser hack
如图所示,使用PowerView.ps1脚本查询指定hack用户信息。
也可以使用图形化操作。该查询需要在域控上进行。如图所示,打开“Active Directory用户和计算机”,找到域名,右键——>查找。
如图所示,名称这里点击要搜索的用户名,然后点击“开始查找”。
即可找到该用户。如图所示,右键——>属性,查询指定用户的属性。
即可看到该用户的详细信息,如图所示:
也可以利用adfind工具查询域内指定用户详细信息,查询命令如下:
#查询hack用户指定信息adfind.exe -sc u:hack
如图所示,使用adfind工具查询指定hack用户信息。

02

服务帐户Service Accounts

活动目录服务帐户其实就是一种特殊的用户帐户。服务帐户是显式创建的用户帐户,旨在为在Windows服务器操作系统上运行的服务提供安全上下文。安全上下文决定了服务访问本地资源和网络资源的能力。Windows操作系统依赖于服务来运行各种特性。这些服务可以通过应用程序、服务管理单元或任务管理器,或使用WindowsPowerShell进行配置。
在2.8章SPN服务主体名称中我们讲了Kerberos身份验证使用SPN来将服务实例和服务登录帐户相关联。因此,在域中所有的服务都有SPN,并且所有的服务都有服务帐户。Kerberoasting攻击就是针对域内服务帐户进行的攻击,详情可以看4.4章Kerberoasting攻击。
默认情况下,域中每个机器都提供服务,因此默认情况下域中每个机器都有SPN,并且其服务帐户就是其机器帐户。
如图所示,查询域内机器win10注册的SPN,可以看到默认情况下它注册了6个SPN。
再比如krbtgt是用户帐户,同时它也是密钥发行中心服务帐户,其在域内提供密钥分发相关的服务,其在域内注册的SPN是kadmin/changepw。
如图所示,可以看到krbtgt用户在域内注册的SPN。
因此,其实用户帐户可以是服务帐户,机器帐户也可以是服务帐户。它们是否属于服务帐户取决于该帐户是否在域内注册了SPN。

新建服务帐户

    从上面我们可以得知,只要在域内给用户帐户或机器帐户注册一个SPN,其帐户就可以成为服务帐户了。而在2.8章SPN服务主体名称中我们讲到了,如果要给用户帐户注册SPN的话需要管理员权限。而给机器帐户注册SPN的话,除了域管理员,机器帐户自身也可以,但是其SPN只能注册在当前主机下面。
    下面我们演示通过域管理员administrator将一个普通用户帐户注册成为服务帐户。
实验环境如下:
  • 域管理员:administrator
  • 普通用户:hack
通过如下命令给hack用户注册test/test SPN。
#查询hack用户注册的SPNsetspn -L hack
#给hack用户注册test/test SPNsetspn -S test/test hack
如图所示,给hack用户注册test/test SPN。
此时,hack用户就是一个服务帐户了,因为它在域内提供了SPN为test/test的服务。我们通过GetUserSPNs.py脚本执行如下命令就能请求服务帐户hack下注册的所有SPN的服务票据了!
python3 GetUserSPNs.py -request -dc-ip 10.211.55.4 xie.com/hack:P@ss1234
如图所示,可以看到打印出了SPN为test/test服务的ST服务票据。

查询服务帐户

查询域内的服务帐户可以转换为查询域内注册的SPN。有很多种手段进行查询,且使用普通域用户权限即可查询。
通过setspn查询执行如下命令查询域内注册的所有SPN,即可看到域内所有的服务帐户。
#查看当前域内注册的所有SPNsetspn -Q */*
如图所示,通过setspn查询域内注册的所有SPN。
还可以使用impacket中的GetUserSPNs.py脚本执行如下命令查询服务账号是用户类型的服务,也就是SPN是注册在用户帐户下的服务,该脚本的执行只需要提供一个有效的域用户即可。
python3 GetUserSPNs.py -dc-ip 10.211.55.4 xie.com/hack:P@ss1234
如图所示,查询服务帐户是用户类型的服务。

03

机器帐户Computer Accounts

活动目录机器帐户其实就是一种特殊的用户帐户,只不过其不能用于登录。机器帐户可以代表一个物理实体,如域内机器。在域内,机器用户跟域用户一样,也是域内的成员,它在域内的用户名是机器用户名+$,比如机器Win8的机器用户为:Win8$,它在本地的用户名是System。机器用户的密码是系统随机生成的,密码强度是120个字符,而且会定时更新。
如图所示,使用mimikatz抓取机器用户Win7$在内存中的凭据,可以看到它的密码是如此的复杂。
可以通过查询以下注册表的相关值来查看机器用户密码是否定时更新以及更新的时间。
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
DisablePasswordChange值决定机器用户密码是否定时更新,默认值为0,值为0的话,表示定时更新。MaximumPasswordAge值决定机器用户密码更新的时间,默认为30天。
如图所示,可以看到DisablePasswordChange值为0,MaximumPasswordAge值为30.
机器在加入域后,都会存储在CN=Computers容器中。如图所示:
我们以域内机器Win7为例,通过查看其objectClass属性可以得知,其继承于computer——>user——>organizationalPerson——>person——>top 类。如图所示:
其继承关系如图所示:
Win7机器是computer类的实例,而computer类又是user类的子类。而域用户是user类的实例。子类默认可以继承父类的所有属性,因此域用户该有的属性,机器用户都有。因此在域内,机器用户其实就是一种特殊的用户,只不过其不能正常登录系统。机器用户也叫计算机用户,域内有多少机器,就有多少机器用户,域内每台机器都对应一个机器用户。机器用户在域内的名字,就是 机器名+$,如机器名是win7的话,那么机器用户名就是 win7$ 。这个值可以在机器的samAccountName属性看到。
如图所示,可以看到win7机器的samAccountName属性。
机器在加入域后,会将机器帐户的密码同步到域控制器并保存在域控制器的 NTDS.dit 活动目录数据库文件中。机器帐户的密码默认每 30 天自动更新,密码长度为 120 个字符,所以即使我们获得了机器帐户密码的哈希值,也几乎无法还原出机器帐户的明文口令。
如图所示,导出win7机器的机器帐户哈希。
拿win7机器的机器帐户哈希去在线网站破解,如图所示,可以看到破解不出来。

新建机器用户

默认情况下,经过身份验证的域内用户可以创建最多十个机器帐户,这个数量是由域的ms-DS-MachineAccountQuota属性决定。
如图所示,查看域的ms-DS-MachineAccountQuota属性,默认为10。
官方参考:https://support.microsoft.com/en-us/help/243327/default-limit-to-number-of-workstations-a-user-can-join-to-the-domain
可以通过python脚本利用SAMR协议远程创建机器用户,使用addcomputer.py脚本执行如下命令利用SAMR协议远程新建一个域内机器用户machine,密码为root。
python3 addcomputer.py -computer-name 'machine' -computer-pass 'root' -dc-ip 10.211.55.4 'xie.com/hack:P@ss1234' -method SAMR -debug
如图所示,使用addcomputer.py脚本创建机器用户machine。
通过这种方式创建的机器用户没有SPN,如图所示,查询machine机器的SPN,可以看到其没有SPN。
使用powershell脚本执行如下命令在域内机器上创建一个机器用户machine2,密码为root。
Import-Module .\New-MachineAccount.ps1New-MachineAccount -MachineAccount machine2 -Password root
如图所示,通过powershell脚本创建机器用户machine2。
通过这种方式创建的机器用户会有SPN。
如图所示,查询machine2机器的SPN,可以看到有SPN。
不管通过什么方式创建机器用户,被创建的机器用户的 mS-DS-CreatorSID 属性的值是创建用户的SID。
如图所示,查询machine机器用户的mS-DS-CreatorSID 属性。
可以通过如下命令查询该SID对应的用户。
AdFind.exe -sc adsid:S-1-5-21-1313979556-3624129433-4055459191-1154 -dn
如图所示,可以看到该SID对应的用户为hack,为创建machine机器的用户!
如图所示,创建者对被创建机器拥有修改属性等高权限。

查询机器用户

查询域内的机器用户,就是查询域内的机器。在有些场景下,我们需要查询域内的所有机器用户;有时候,需要精确查找域内的某台机器。当需求不同时,如何不同的查询机器用户呢?
查询域内所有机器用户
当我们想查询域内的所有机器用户时,如何将域内所有机器用户查询出来呢?
我们可以利用系统自带的net命令查询域内所有机器用户。由于域内的机器都在“domain computers”组内,因此可以使用如下命令进行查询:
net group "domain computers" /domain
如图所示,使用net命令查询出了域内所有的机器,但是不包括域控。
也可以利用 PowerSploit 下的 PowerView.ps1脚本,该脚本会查询出域内的所有机器,包括域控。该脚本的使用如下:
Import-Module .\PowerView.ps1;#查询域内主机,包括域控Get-NetComputer
如图所示,使用PowerView.ps1脚本查询出了域内所有的机器,包括域控。
adfind工具通过LDAP协议查询出域内所有机器用户,由于域内机器用户的objectCategory属性和objectClass属性为均为Computer,因此adfind查询域内所有机器用户命令如下:
adfind.exe -f "(&(objectCategory=computer)(objectClass=computer))" -dn
如图所示,使用adfind工具查询域内所有的机器,包括域控。

精确查询指定机器用户

有时候,需要精确查询指定用户的详细信息,我们可以用如下方法:
图形化操作,该查询需要在域控上进行。如图所示,打开“Active Directory用户和计算机”,找到域名,右键——>查找。
查找这里选择计算机”,然后计算机名这里填入要搜索的机器名,然后点击“开始查找”,如图所示:
即可找到该机器用户,如图所示,右键——>属性,查询指定机器的属性。
即可看到该机器用户的详细信息,如图所示:
也可以利用adfind工具查询域内指定机器用户详细信息,查询命令如下:
#查询指定机器mail详细信息AdFind.exe -f "&(objectcategory=computer)(name=mail)"
如图所示,使用adfind工具查询指定机器MAIL的详细信息。

机器属性解读

通过ldap查询域内机器属性及含义如下:
属性
含义
accountExpires
账号过期时间
badPasswordTime
登录时密码错误的时间
badPwdCount
密码错误次数
cn
cn名
codePage
代码
countryCode
国家代码
distinguishedName
dn名
dNSHostName
dns主机名
lastLogon
最后登录时间
logonCount
登录次数
name
名字
nTSecurityDescriptor
该账号的ACL
objectCategory
对象索引目录,值为单个
objectClass
继承的类,可以有多个
objectGUID
对象的GUID
objectSid
对象的SID
operatingSystem
操作系统
operatingSystemServicePack
操作系统服务版本
operatingSystemVersion
操作系统版本
primaryGroupID
私密的组ID
pwdLastSet
密码最后设置的时间
samAccountName
域内机器账号名
samAccountType
域内机器账号类型
servicePrincipalName
SPN
userAccountControl
用户帐户控制ACL
whenChanged
账号改变的时间
whenCreated
账号创建的时间
我们通过LDAP查询win10机器用户的属性,如图所示:


机器用户和system用户的关联

本地system用户就是对应于域内的机器用户。所以当我们获得了域内主机的system权限后,就相当于我们拥有了一个域内机器用户的权限,就相当于拥有一个域内用户的权限了。我们现在拿到了一个域内主机(Win7,10.211.55.6)的管理员权限,但是通过抓取账号密码发现该机器上没有域用户登录的痕迹,只有本地administrator用户登录过。域控ip为10.211.55.4。
通过mimikatz抓取win7$ 机器账号的密码如下:
  • 哈希为:c62ad63ed2f04e78ca97efeea85e5878。
  • 明文密码为:ex1kgnQg;,hYrwu Nn0_59Bdz<tk<]t;nt:1wpa^n1 5fw2s="">.ji8bG_VHdp#;]wR7Z IH51G/soN2yahW<n1b,<3#@4ajjky8-9cdte*,?*\&k32 iohp。<="" span="">
如图所示,mimikatz抓取win7$机器帐户的凭据。
Win7机器本地administrator账号密码为root,如图所示:
于是我们可以使用如下几种方式进行域查询。
本地获取system权限进行域查询
如图所示,可以看到在本地administrator权限下进行域查询提示权限拒绝。
然后我们使用psexec.exe工具执行如下命令获取system权限之后再进行域查询。
psexec.exe -i -s cmd.exe
如图所示,当使用psexec获得system权限后即可成功进行域查询。

使用impacket工具远程连接进行域查询 
使用impacket工具执行如下命令使用administrator帐户密码远程连接win7获取system权限进行域查询。注意这里不能用win7$机器账号进行远程连接,因为机器账号没有权限连接。
python3 smbexec.py administrator:root@10.211.55.6 -codec gbk
如图所示,获得win7机器的system权限,并成功执行域查询。

使用adfind工具查询 
可以使用adfind工具执行如下命令用win7$机器账号密码连接域控进行查询。
AdFind.exe -h 10.211.55.4:389 -u xie\win7$ -up "ex1kgnQg;,hYrwu Nn0_59Bdz<tk<]t;nT:1WPA^N1/\]5fW2S>.ji8bG_VHdp#;]wR7Z IH51G/soN2yahW<N1B,<3#@4aJjky8-9CdTe*,?*\&k32 iOHP" -f "objectcategory=computer" dn
如图所示,使用win7$机器账号密码连接域控进行查询,查询出了域内所有机器。

END

非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。如果你想一起学习AD域安全攻防的话,可以加入下面的知识星球一起学习交流。

官方:
https://learn.microsoft.com/en-us/windows/security/identity-protection/access-control/local-accounts
https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-default-user-accounts
https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-service-accounts
https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2003/cc779144(v=ws.10)#active-directory-accounts-and-security-groups

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存