域知识
在攻击内网时,百分九十会遇到域,所以大家一定要熟悉域中的一些基础的概念,这样才不至于心里没底,手忙脚乱
域的介绍
域是组织与存储资源的核心管理单元 域(Domain)是Windows网络中独立运行的一个个单位,将网络中多台计算机逻辑上组织到一起进行集中管理,这种区别于工作组的逻辑环境叫做域,各个域之间有着是否互相信任的联系。 工作组与域 既然提到了工作组,那么在内网环境中,工作组和域有什么不同呢?
工作组:默认模式,组中用户与用户之间平等,不方便管理
域:用户与用户不平等,可以实现集中管理(统一管理)
域控与活动目录
域控指的就是域控制器(Domain Controller,DC),在一个域中,至少会有一个域控,是域的核心部分。安装了域控制器之后,就生成了域环境,但是若想生成域控制器,还需要一个东西,就是活动目录(Active Directory,AD)。 活动目录主要提供管理功能,包括管理服务器、客户端计算机账户、域账户以及域账户信息、打印机、文件共享服务资源等,还可以支持财务、人事、办公自动化等应用系统。用户可以通过活动目录快速访问域内的资源,AD相当于一本字典的目录,其数据库(ntds.dit)中存储了域中所有用户信息。(特点也是便于集中管理)
- 域控与安全
在域环境中,域控制器(DC)的数据库(ntds.dit)包含了整个域用户的账号密码等信息,攻击者如若获取到域控的高级权限,便可以控制该域,由于域和域之间有着一定的信任关系,攻击者此时可以进行跨域攻击,实现整个内网的沦陷,从而引发严重的后果。 整个执行过程如下图所示:
组织单位
什么是OU? 组织单位(Organizational Unit,OU)是可以将用户、组、计算机和其它组织单位放入其中的AD(Active Directory,活动目录)容器,是可以指派组策略设置或委派管理权限的最小作用域或单元。 理解:AD如果是一个公司,那么OU就是一个相对独立的部门,OU的创建需要在域控制器(DC)中进行。
ADDS
Active Directory提供目录服务的组件被称作Active Directory域服务 (Active Directory Domain Services, ADDS) ,负责目录数据库的存储、增删改查等工作,可以用在多种局域网、广域网的场景中。 从逻辑上看,ADDS的组件可以分为Partition、Schema、Domain、Domain tree、Forest、OU、Container。 Partition也被称为naming context,是AD DS数据库的一部分。Schema是存储在 ADDS 中数据的定义。Container是为ADDS提供组织框架的对象。 从实现上区分,ADDS可以分为Domain controller、Data store、Global catalog server、RODC (Read-only domain controller) 、Site、Subnet。 每个域控制器都有完整的ADDS数据,每个域控都可以处理数据的修改并同步至其他的域控。 域控会有一份数据拷贝 (Data store) ,默认存储在C:\Windows\NTDS目录下。 Global catalog server是存储全局catalog的域控,catlog以只读的方式存储了一个multiple-domain forest的所有对象,用于加速搜索。
信任
两个域之间需要创建信任关系,才可以访问对应域内的资源。
域信任类型
Active Directory的信任方式可以分为以下几种:
- Tree-Root Trust
双向具有转移性
- Parent-Child Trust
具有转移性,双向行人
- Forest Trust
如果两个林创建了信任关系,则林中所有的域都相互信任 两个林之间的信任关系无法自动扩展到其他林上
- Realm Trust
ADDS域可以和非Windows系统的Kerberos域之间创建信任
- External Trust
位于两个林内的域之间可以通过外部信任来创建信任关系
- Shortcut Trust
可以缩短验证用户身份的时间
创建一个域环境
搭建域控服务器






安装完成后点击关闭按钮



添加新林







安装结束后系统会自动重启,等待重启完毕。
加入域
此电脑 > 属性 > 高级系统设置 > 更改计算机名

输入用户名和密码
完成后重启系统
域内信息收集
搜集思路
我是谁?——对机器角色的判断。 这是哪?——对目前机器所处网络环境的拓扑结构进行分析和判断。 我在哪?——对目前机器所处位置区域的判断。 不管是在外网中还是在内网中,信息收集都是重要的第一步。 对于内网中的一台机器,其所处内网的结构是什么样的、其角色是什么、使用这台机器的人的角色是什么,以及这台机器上安装了什么杀软、这台机器是通过什么方式上网的、这台机器是笔记本还是台式机还是虚拟机等问题,都需要通过信息收集来解答,渗透测试的本质就是信息收集!
常用命令
- 查看当前网卡和IP信息
ipconfig /all 当前机器有一张内网的网卡,一般来说只有域机器才会有域名显示,在工作组下显示的是空,不为空就主 DNS后缀是⼀个域名。 可以看到通过查看网卡信息可以判断出当前机器是否在域内,以及是否是⼀台域机器。
- 查看操作系统详细信息
systeminfo

通过查看系统的详细信息我们可以判断出当前主机是一台属于域内的机器,因为在工作组环境的机器只会显示WORKGROUP。
- 查看当前登录域及域用户
net config workstation 可以发现域机器在工作站域会显示出当前的域的名称,而在工作组环境的机器只会显示WORKGROUP:
- 查看域内时间
net time /domain 通过执行以上命令后有三种情况: 存在域,当前用户不是域用户 存在域、当前用户是域用户 当前是工作组环境
- 获取域SID
whoami /all 域SID主要是用来区分不同域,域用户SID是用来区分域内不同的用户的,在后续票据传递中会使用到
- 查询域内用户
net user /domain 通过查询域内用户就可以知道当前这个域内所有的用户名
- 查看域用户的详细信息
net user tom /domain 通过查看域用户的详细信息可以得到域用户密码的到期时间,所属组以及上次登录的时间等信息
- 查询域列表
net view /domain (假如存在多个域),通过查询域列表可以看到,当前存在两个域分别是:C1AY,SUB
- 查看域内主机信息
net view 通过查询域内主机信息可以看到,当前域内存在着3台计算机。
- 获取所在指定域下的主机名
net view /domain:C1ay 通过查询指定域下的主机名也可以看到,当前域内存在着3台主机。
- 查看域内计算机
net group "domain computers" /domain 通过查看域内计算机可以看到,一共有2台计算机加入了当前域。
- 查看域信任关系
nltest /domain_trusts 通过查看域信任关系可以判断出当前域是否存在着林信任或是父子域信任,后续在跨域攻击或者是跨林攻击中会使用到。
- 查询域密码信息
net accounts /domain 通过查询域密码信息我们就可以知道当前域用户多久修改⼀次密码,密码策略的是什么,就可以针对性的制定⼀份密码字典,提高效率。
- 查看域内用户组列表
net group /domain Domain Admins:域管理员。 Domain Computers: 域内机器。 Domain Controllers:域控制器。 Domain Guest: 域访客,权限较低。 Domain Users: 域用户。 Enterprise Admins: 企业系统管理员用户。 在默认情况下,Domain Admins和Enterprise Admins对域内所有域控制器有完全控制权限。 通过查看域的用户组我们可以知道每个组具体是做什么的,比如说⼀些大型企业或者集团会有专门设有财务组、信息组、营销组...等等,那么假设我们要针对于某个部门、某个组、在具体到某个人来进行渗透,那么搜集组信息就尤为关键了。
- 查看存在的用户
dsquery user
- 域内控制器的查找
通过nltest命令查找域控制器 nltest /dclist:hacker 可以看到当前域内存在着两台域控制器,一台为主控制器,一台为辅域控制器。
- 查看域控制器组
net group "Domain Controllers" /domain
- 查询主域控制器
netdom query pdc
- nslookup查询
nslookup DC1.c1ay.lab
- 查看域管理员组
net localgroup administrators /domain
工具使用
PsLoggedon
该工具可以查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。 如果指定的是用户名而不是计算机名,该工具会搜索网上邻居中的计算机,并显示该用户当前是否已经登录。 其原理是通过检查注册表HKEY_USERS项的key值和通过NetSessionEnum API来枚举网络会话,但是该工具的某些功能需要管理员权限才能使用。
https://download.sysinternals.com/files/PSTools.zip
https://learn.microsoft.com/zh-cn/sysinternals/downloads/psloggedon
- 获取本地及远程登录的计算机名称
PsLoggedon.exe -l
- 获取指定计算机名的用户
PsLoggedon.exe \DC1
- 获取指定用户登录的计算机
PsLoggedon.exe administrator
PVEFindADUser
该工具可用于查找活动目录用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户,通过RDP登录的用户、用于运行服务和计划任务的用户。 该工具的运行不需要管理员权限, 只需要普通域用户即可。
https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
- 查询所有主机当前的登录用户
pveadfinduser.exe -current 查询结果将 被输出到 report.csv文件中。
- 查询指定用户当前登录的主机
PVEFindADUser.exe -current c1ay\administrator
查找域管理进程
当计算机加入到域后,默认将"Domain Admin"组赋予了本地系统管理员的权限。也就是说,在计算机添加到域,成为域的成员主机的过程中,系统将会自动把"Domain Admin"域组添加到本地的Administrators组中。 因此,只要是Domain Admin组的成员均可访问本地计算机,而且具备"完全控制"的权限。 因此对于渗透测试人员来说,把"Domain Admin"域组添加到本地的Administrators组中是他们模拟域管理员帐户操作的常用方式。 不过前提是,我们需要知道这些进程正在运行的系统。 这里介绍五种寻找 "Domain Admin" 运行的进程的方法,其中涉及的技术包括:
- 本地检查
- 查询活动域用户会话的域控制器
- 扫描运行任务的远程系统
- 扫描NETBIOS协议信息的远程系统
- 用于令牌验证的PSExec Shell喷洒远程系统
本地检查
- 获取域管理员列表
net group "Domain Admins" /domain
- 列出本机的所有进程及进程用户
tasklist /v 列入箭头所指如果为管理员那就可做令牌劫持拿到管理员权限
查询域控制器的域用户会话
查询域控制器的域用户会话,其原理是:在域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理会话的系统列表。
- 查询域控制器列表
net group "Domain Controllers" /domain
- 收集域管理员列表
net group "Domain Admins" /domain
- 收集所有活动域的会话列表
使用Netsess.exe查询每个域控制器,收集所有活动域会话的列表。 Netsess工具是Joe Richards提供的一个很棒的工具,它里面包含了本地Windows函数“netsession enum”。该函数可以返回活动会话的IP地址、域帐户、会话启动时间和空闲时间。
https://www.joeware.net/freetools/tools/netsess/index.htmNetsess.exe
有会话才有信息,否则就没有
NetSess.exe -h DC1
- 域内存活主机探测
利用netbios快速探测内网
https://github.com/lifenjoiner/nbtscan
使用方法 nbtscan.exe 10.10.10.0/24