前话
最近开始简简单单的捣鼓下内网渗透了,从基础开始磨
域(Domain)
用来描述一种系统架构,和”工作组”相对应,由工作组升级而来的高级架构,在域架构中,可以实现统一化管理。用户名和密码是放在域控制器去验证的
最大好处:通过组策略来统一化管理
工作组架构:每台计算机都是平等的。
特性
- 安全边界
- 父域的域控并不能管理子域
- 复制单元
- 一个域中的所有DC的活动目录数据库都相互同步(备份域控BDC)
- 多主复制和单主复制
- 三个逻辑分区:Domain、Configration、Schema。在同一个域的DC,三个分区数据都同步;如果不是一个域中的DC,只同步后两个分区(父域和子域的关系)
物理结构
- 域控制器
- 站点
安全域
定义
安全域划分的目的是将一组安全等级相同的计算机划入同一个网段内,这一网段内的计算机拥有的网络边界,在网络边界上采用防火墙部署来实现对其他安全域的NACL(网络访问控制策略),允许哪些IP访问此域、不允许哪些访问此域;允许此域访问哪些IP/网段、不允许访问哪些IP/网段。使其风险最小化,当发生攻击时可以将威胁最大化的隔离,减少对域内计算机的影响
划分
- 外部网络(DMZ区域)
- 内部网络(企业网络)
DMZ
- 两个防火墙之间的空间被称为DMZ。
- DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”。
- 为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区。
- 该缓冲区位于企业内部网络和外部网络之间的小网络区域内。在这个小网络区域内可以放置一些必须公开的服务器设施,如企业Web服务器、FTP服务器和论坛等。
- 另一方面,通过这样一个DMZ区域,更加有效地保护了内部网络。因为这种网络部署,比起一般的防火墙方案,对来自外网的攻击者来说又多了一道关卡。
DMZ的屏障功能
- 内网可以访问外网
- 内网可以访问DMZ
- 外网不能访问内网
- 外网可以访问DMZ
- DMZ不能访问内网
- DMZ不能访问外网
域的分类
单域、子域、父域、域树、域森林、DNS域名服务器
域中计算机分类
域控制器、成员服务器、客户机、独立服务器
- 域控制器是存放活动目录数据库的,是域中必须要有的,而其他三种则不是必须的,也就是说最简单的域可以只包含一台计算机,这台计算机就是该域的域控制器。
- 域中各个服务器的角色也是可以改变的,例如域服务器在删除活动目录时,如果是域中最后一个域控制器,则该域服务器会成为独立服务器,如果不是域中唯一的域控制器,则将使该服务器成为成员服务器。同时独立服务器既可以转换为域控制器,也可以加入到某个域成为成员服务器。
域内权限
- 域本地组
域本地组,多域用户访问单域资源(访问同一个域)。可以从任何域添加用户账户、通用组和全局组,只能在其所在域内指派权限。域本地组不能嵌套于其他组中。它主要是用于授予位于本域资源的访问权限。
- 全局组
全局组,单域用户访问多域资源(必须是同一个域里面的用户)。只能在创建该全局组的域上进行添加用户和全局组,可以在域林中的任何域中指派权限,全局组可以嵌套在其他组中。
- 通用组
通用组,通用组成员来自域林中任何域中的用户账户、全局组和其他的通用组,可以在该域林中的任何域中指派权限,可以嵌套于其他域组中。非常适于域林中的跨域访问。
AGDLP
A:用户账户
G:全局组
DL:域本地组
P:许可,资源权限
按照AGDLP的原则对用户进行组织和管理起来更容易 在AGDLP形成以后当给一个用户某一个权限的时候,只要把这个用户加入到某一个本地域组就可以了。
A-G-DL-P策略是将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限。
==Example==
有两个域,A和B,A中的5个财务人员和B中的3个财务人员都需要访问B中的“FINA”文件夹。这时,可以在B中建一个DL(域本地组),因为DL的成员可以来自所有的域,然后把这8个人都加入这个DL,并把FINA的访问权赋给DL。这样做的坏处是什么呢?因为DL是在B域中,所以管理权也在B域,如果A域中的5 个人变成6个人,那只能A域管理员通知B域管理员,将DL的成员做一下修改,B域的管理员太累了。这时候,我们改变一下,在A和B域中都各建立一个全局组(G),然后在B域中建立一个DL,把这两个G都加入B域中的DL中,然后把FINA的访问权赋给 DL。哈哈,这下两个G组都有权访问FINA文件夹了,是吗?组嵌套造成权限继承嘛!这时候,两个G分布在A和B域中,也就是A和B的管理员都可以自己管理自己的G啦,只要把那5个人和3个人加入G中,就可以了!以后有任何修改,都可以自己做了,不用麻烦B域的管理员!这就是A-G-DL-P。
==简记==
域本地组:来自全林作用于本域
全局组:来自本域作用于全林
通用组:来自全林作用于全林
本地域组的权限
1 | Administrators(管理员组) ————最重要的权限 |
全局组、通用组的权限
1 | Domain Admins(域管理员组)————最最最重要的权限,一般来说域渗透是看重这个 |
Tips
- 通常DNS服务器与域控制器会在同一台机器上
- 一个域内至少需要两台DC,需要一台用作备份
活动目录(AD)
俗称AD域,是域环境中提供目录服务的组件,目录服务是帮助用户快速准确的从目录中查找到他所需要的信息的服务,活动目录存储的是网络中所有资源的快捷方式,用户通过寻找快捷方式而定位资源。
如果将企业的内网看成一本字典,那么内网的资源就是字典的内容,活动目录就相当于字典的索引
逻辑结构
- 组织单元(OU)
- 域(Domain)
- 域树(Tree)
- 域森林(Forest)
在域树内的所有域共享一个活动目录,这个活动目录内的数据分散地存储在各个域内,并且每一个域只存储该域内的数据。
主要功能
- 账号集中管理
- 软件集中管理
- 环境集中管理
- 增强安全性
- 更可靠,更少的宕机时间
- 活动目录为Microsoft统一管理的基础平台
与DC的区别
- DC的本质是一台计算机,AD的本质是提供目录服务的组件
- 把存放有活动目录数据库的计算机就称为DC。所以说要实现域环境,其实就是要安装AD,当内网中的一台计算机安装了AD后,它就变成了DC
- 如果网络规模较大,我们就会考虑把网络中的众多对象:计算机、用户、用户组、打印机、共享文件等,分门别类、井然有序地放在一个大仓库中,并做好检索信息,以利于查找、管理和使用这些对象(资源)。这个有层次结构的数据库,就是活动目录数据库,简称AD库
Window 认证机制
本地认证
windows的hash是不加盐的
流程
默认SAM文件在C:\Windows\System32\config\SAM
。当我们登录系统时,winlogon.exe -> 接收用户输入 -> lsass.exe
,然后与SAM中的NTLM Hash进行比对
NTLM Hash
NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。
加密流程
1 | admin -> hex(16进制编码) = 61646d696e |
LM Hash
LM与NTLM协议的认证机制相同,但是加密算法不同
脆弱点在于DES的Key(KGS!@#$%
)是固定的,所以有了密文就能解出原文,而且也能判断是否大于7位
冒号前半段为LM Hash,冒号后半段为NTLM Hash
1 | Administrator:500:d747b7b8037e8669c771f6a9d803419b:86c01dc8633fc387a503b05615f8afb1::: |
Windows网络认证
SMB服务 445端口
NTLM协议
流程
- 协商 确定双方协议版本
- 质询 挑战/响应认证机制
- 验证 验证结果
质询
- 客户端向服务器端发送用户信息(用户名)请求
- 服务器接收请求,生成一个16位的随机数,被称之为
"Challenge"
,使用登录用户名对应的NTLM Hash加密Challenge,生成Challenge1(Net-NTLM Hash
)放在内存中,然后将Challenge发送给客户端 - 客户端接受到Challenge后,将提用户供的账户密码转换成NTLM Hash,然后使用NTLM Hash加密Challenge生成
Response
(也是Net-NTLM Hash表现形式),然后将Response发送至服务器端 - 服务器收到客户端发送的Response,将其与Challenge1进行比较,如果相同,则认证通过。
【注】:每次生成的16进制随机数都不同,且V2 和 V1 的区别在于生成Challenge的算法不同。
协议分析
wireshark抓包捕获数据包,前四个数据包对应NTLM认证的四个步骤
查看第二个数据包,获得Challenge为d4f1ffb182c83c63
然后查看第三个数据包,获得LM Response为2ad5f1f70d8bf29000000000000000000000000000000000
;NTLM Response为8a5f5f8f23d3e892d1bd1cbc3d84b37b298e5d31e4ffd2e5
;User name为Administrator
;Host name为YOGA
【注】如果是Net-NTMLv2的话,会多一项NTLMv2 Respose
Kerberos协议
- Client发送请求给AS,AS会根据AD白名单判断,然后将TGT加密返回给Client,client解密得到TGT
- Client拿着TGT、Client info、Server name去请求TGS,TGS会随机生成一个Session Key,然后用Server master Key加密Client info+Session Key 生成一个Ticket,然后和Session Key加密发送至Client
- Client解密得到Session Key,然后将Client info用其加密,与Ticket一同发往Server端
- Server首先解密Ticket得到Session Key+Client info,然后利用Session Key解密得到Client info,两者进行对比
Ticket = Server Hash(Server Session Key + Client info + End Time)
IPC$空连接
IPC$是共享“命名管道”的资源,为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问,从NT/2000开始使用。
IPC$在同一时间内,两个IP之间只允许建立一个连接。
NT/2000在提供了 ipc$ 功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(c$,d$,e$……)和系统目录winnt或管理员目录(admin$)共享。
常用命令
1 | 建立IPC$空连接:net use \\192.168.1.101\ipc$ “” /user:”domain\username” |
【注】:
- 现在绝大多数的Windows操作系统默认策略不允许来自远程网络验证的空密码,所以IPC空连接已经被废弃。
- 如果远程服务端未开启139、445端口,无法使用IPC$进行连接。
Windows Access Token
简介
Windows Token其实叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。
当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除
组成
- 用户帐户的安全标识符(SID)
- 用户所属的组的SID
- 用于标识当前登录会话的登录SID
- 用户或用户组所拥有的权限列表
- 所有者SID
- 主要组的SID
- 访问控制列表
- 访问令牌的来源
- 令牌是主要令牌还是模拟令牌
- 限制SID的可选列表
- 目前的模拟等级
- 其他统计数据
SID 安全标识符
表现形式:
- 域SID-用户ID
- 计算机SID-用户ID
- SID列表都会存储在域控的AD或者计算机本地账户数据库中
产生过程
每个进程创建时都会根据登陆会话权限由LSA分配一个Token(如果CreateProcess时自己指定了Token,LSA会用该Token,否则就用父进程Token的一份拷贝)
未完待续…..