由安全客直播视频整理,视频链接 https://www.anquanke.com/post/id/196238
0X00 内容
- Active Directory
- 用户,计算机,组,OU
0X01 Active Directory
1、目录服务
- 目录服务:是由目录服务数据库(是树状结构的数据库,和MySQL等表状结构数据库有差别)和一套访问协议组成
- 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树
- 条目:树中的每个节点是一个条目
- DN:每个条目有自己的唯一可区别的名称(DN)。比如 uid=bob,ou=people,dc=acme,dc=org
目录服务是一套标准,不同的厂商有不同的实现
厂商 | 产品 | 介绍 |
SUN | SUNONE Directory Server | 基于文本数据库的存储,速度快 |
IBM | IBM Directory Server | 基于DB2的数据库,速度一般 |
Novell | Novell Directory Server | 基于文本数据库的存储,速度快,不常用到 |
Microsoft | Microsoft Active Directory | 基于Windows系统用户,对大数据量处理速度一般,但维护容易,生态圈大,管理相对简单 |
Opensource | Opensource | OpenLDAP开源的项目,速度很快,但是非主流应用 |
2、Active Directory
- 是微软对目录服务的实现
- LDAP:Lightweight Directory Access Protocol,是设计用来对目录服务数据库的访问的协议
- Active Directory存储着整个域内所有的计算机,用户等的所有信息
3、访问Active Directory
- 本域:域内的每一台域控都有一份完整的本域的Active Directory,可以通过连接域控的389、636端口(636端口是LDAPS)来进行连接、查看、修改
- 同林下的其他域:如果用户知道某个对象处于哪个域,也知道对象的标识名,那么通过上面第一种方式搜索对象就非常容易。但是考虑到这种情况,不知道对象所处的域,我们不得不去域林中的每个域搜索。为了解决这个问题,微软提出全局编录服务器(GC,Global Catalog),全局编录服务器中除了保存本域中所有对象的所有属性外,还保存林中其他域所有对象的部分属性,这样就允许用户通过全局编录信息搜索林中所有域中对象的信息。也就是说如果需要在整个林中进行搜索,而不单单是在具体的某个域进行搜索的时候,可以连接域控的3268、3269端口
- 工具:ADSI编辑器、ADExplorer、The LDAP Explorer、Ldapsearch、adfind与admod
ADSI编辑器
ADExplorer
4、过滤
- BaseDN:整个活动目录是一个树状数据库,BaseDN指定从这棵树的哪个节点开始搜索,以这个节点为根节点,向下开始搜索
- 过滤规则:
- &:表示AND运算符
- |:表示OR运算符
- !:表示NOT运算符
- =:表示相等
- *:用名称和值表达式中值的开头或结尾处的星号(*)表示通配符
0X02 用户,计算机,组,OU
1、用户
- 域用户
- 本地用户:登录的话,需在用户名前加主机名,如"hostName\userName",如果主机名记不住,可以用“.”来代替,即“.\userName”
2、用户常见属性介绍
- displayName
- objectSid
- userPrincipalName
- sAMAccountName
- whenCreateds
- pwdLastSet
- Lastlogon:这个属性值在不同的域控制器上是不会同步的。所以要查询一个用户的最后登录时间,得指定不同的域控制器来查询。
3、如果有一台机子,这台机子在域内,但是当前用户不是域用户,而是本地用户,接下来这么办?
- 可以提权至system
- 每个加入域的计算机,本地的SYSTEM用户对应域内的计算机账户,用户名是主机名$。域控不存储本地用户的凭据。
- ...
4、为什么刚搭建完的域,域用户默认可以登录域内任何一台普通成员机器?
一起来看一下。我们自己搭建一个域环境,以域用户登录
查看本地安全策略,需要管理员权限,命令是“secpol.msc”
在允许本地登录属性中,有Users组
“计算机右键-管理”查看Users组的成员,包含域用户,所以这也就解释了,为什么刚搭建完的域,域用户可以默认登录到域内的任意一台机器。
这种情况的缓解方法
- 在允许本地登录的属性中,将Users组删掉。可以通过下发组策略来实现
- 如下图,在域控中,可以指定用户登录到哪台机器
5、查找用户正在登录的主机
- 方法1:利用NetSessionEnum来寻找网络连接Sessions。此函数不需要高权限
- 方法2:利用NetWkstaUserEnum来枚举登录的用户。此函数需要管理员权限
- 方法3:利用枚举注册表来查看,获取正在登录用户的SID,再通过SID转成用户来查看。不需要高权限。Server才会开远程注册表,PC默认不开
通过SID获取登录用户可以采用如下脚本
//SID需要更改
//保存为.vbs脚本
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objAccount = objWMIService.Get("Win32_SID.SID='S-1-5-21-3XXXXX462-XXXXXX-9XXXXX0-1XXX'")
Wscript.Echo objAccount.AccountName
Wscript.Echo objAccount.ReferencedDomainName
直接执行会弹框,解决办法,以下面方法执行脚本即可
CScript vbsFileName.vbs
6、查看域用户登录过的主机
- 方法1:查看邮件。邮件头部有一个字段,“X-Originating-IP”
- 方法2:DCLog。已经拿下域控,精准打击。
在域控上,执行下面命令,导出日志
wevtutil epl Security C:\Users\Administrator\Desktop\1.evtx /q:"*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='3']]"
提取日志
LogParser.exe -i:EVT -o:CSV "SELECT TO_UPPERCASE(EXTRACT_TOKEN(Strings,5,'|')) as USERNAME,TO_UPPERCASE(EXTRACT_TOKEN(Strings,18,'|')) as SOURCE_IP FROM C:\Users\John\Desktop\1.evtx" >C:\Users\John\Desktop\log.csv
要注意的是:登录日志信息在域控之间不会同步。所以在某一台域控上,查找信息再提取出来可能会不全。
7、组
- 通信组:用于用户之间通信的组,使用通信组可以向一组用户发送电子邮件,通信组典型应用是Microsoft Exchange Server中的用户组。
- 安全组:用来设置有安全权限相关任务的用户或者计算机账户集合。同时,安全组具有通信组的全部功能,也可用作电子邮件实体。当向安全组发送电子邮件时,会将邮件发给安全组的所有成员。
8、查询组
可以使用adfind.exe来查询指定组的成员。
9、OU
- Organization Unit(组织单位,简称OU)是一个容器对象,可以把域中的对象组织成逻辑组,帮助网络管理员简化管理工作。
- OU组织单位可以包含下列类型的对象:用户、计算机、工作组、打印机、应用程序、安全策略、文件共享、其他组织单位等。
- 可以在组织单位基础上部署组策略,统一管理组织单位中的域对象。
- 域架构可以通过以下比喻进一步理解:域可以形容为一座大楼;每个楼层好比组织单位;每个房间好比域对象,例如用户、计算机账户等;每个楼层中包含多个房间,可以理解为每个组织单位中包含多个域对象。
10、组织单位(OU)和组的区别
- 相同点:组织单位和组都是容器,都是域服务的一种对象。
- 不同点:
- 组织单位就像屋子,当同一个人在屋子里面时,这个人就不可能在商场、或者公园中。也就是说,一个人在一个组织单位中时,就不可能在另外的一个组织单位中。
- 组标识用户具备的权利和权限,用户可以在不同组中,将具备不同的权限,用户所具备的权限就是所有不同的组的权限的交集。
- 组织单位是体现管理模型,而组是权利和权限的集合。