Timelapse Writeup

概述 (Overview)

550

HOST: 10.10.11.125

OS: Windows

发布时间: 2022-03-27

完成时间: 2022-06-15

机器作者: ctrlzero

困难程度: EASY

机器状态: 退休

MACHINE TAGS: #ActiveDirectory #PowerShell #LAPS

攻击链 (Kiillchain)

使用 Nmap 对目标服务器开放端口进行识别,发现存在 smb 服务、laps 服务。通过 SMB 文件共享获得一个压缩包,对压缩包进行密码爆破得到 .pfx 证书文件。随后通过密码爆破成功从 pfx 文件中导出公钥、私钥,使用 evil-winrm 配合公钥、私钥成功拿到 legacyy 用户的交互shell。

随后在 PowerShell 执行命令 Log 中找到 svc_deploy 用户的凭证,完成横向移动。最后在 LAPS 信息中成功找到 Administrator 用户凭证,成功完成权限提升。

枚举(Enumeration)

老样子开始还是使用 Nmap 软件对目标服务器 TCP 开放端口进行枚举:

PORT STATE SERVICE VERSION 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2022-06-15 12:13:49Z) 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open ldapssl? 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: timelapse.htb0., Site: Default-First-Site-Name) 3269/tcp open globalcatLDAPssl? 5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found | ssl-cert: Subject: commonName=dc01.timelapse.htb | Issuer: commonName=dc01.timelapse.htb | Public Key type: rsa | Public Key bits: 2048 | Signature Algorithm: sha256WithRSAEncryption | Not valid before: 2021-10-25T14:05:29 | Not valid after: 2022-10-25T14:25:29 | MD5: e233 a199 4504 0859 013f b9c5 e4f6 91c3 |_SHA-1: 5861 acf7 76b8 703f d01e e25d fc7c 9952 a447 7652 | tls-alpn: |_ http/1.1 |_ssl-date: 2022-06-15T12:14:53+00:00; +8h00m00s from scanner time. |_http-server-header: Microsoft-HTTPAPI/2.0 49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49674/tcp open msrpc Microsoft Windows RPC Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

从上述扫描结果中能够看出这是台 Active Directory 服务器,其组织域叫 dc01.timelapse.htb。存在 5986/tcp (HTTPS) 端口,意味着Windows Remote Management (WinRM) 服务存在。考察的是攻击域服务器的技巧了。

Port 636 - LDAP

首先使用 ldapsearch 匿名访问 LDAP 服务,测试后发现匿名访问风险不存在。

550

随后对 SMB 服务进行枚举,smbclient -L 发现存在一些共享文件夹:

550

接着使用 smbmap 对共享文件夹内容和权限进行查看,通过 -R 参数可以进行递归显示:

550

立足点(Foothold)

观察结果,在 \Shares 目录下找到了一个压缩包,继续使用 smbclient 将文件下载到 kali 本地机器(使用文件挂载方式也可以)。

580

解压时发现存在密码,尝试使用 fcrackzip 软件对解压密码进行暴力枚举。

550

解压后得到一个 .pfx 后缀的文件,通过 Google 搜索进行进一步查询了解。

由 Public Key Cryptography Standards #12(公钥加密技术12号标准),PKCS#12标准定义,包含了公钥和私钥的二进制形式的证书,以pfx作为证书文件的后缀名。

尝试导出公钥和私钥时又提示需要密码,使用 John 进行密码枚举。

image

需要用到 pfx2john 组件生成 hash 值,它是 John 的一部分。

550

550

成功使用明文密码导出公钥和私钥:

image

注意到之前的 Windows Remote Management (WinRM) 服务端口,使用 evil-winrm 进行交互 shell 连接时发现存在 --pub-key--priv-key 参数。结合得到的公钥和私钥,直接运行 evil-winrm 就可以得到 Powershell。

550

但没有发现该用户下的 user flag,需要进行用户间的横移操作。

横向移动(Lateral Movement)

在 Kali 本地分别开启了 HTTP 服务、SMB 服务,通过 PowerShell 命令将 winPEAS 传递到目标服务器。执行命令后,将信息收集结果通过 SMB 回传到 Kali 本地。

900

查看结果,留意到 PowerShell 命令执行记录 log:

900

cmd> type C:\Users\legacyy\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt whoami ipconfig /all netstat -ano |select-string LIST $so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck $p = ConvertTo-SecureString 'E3R$Q62^12p7PLlC%KWaxuaV' -AsPlainText -Force $c = New-Object System.Management.Automation.PSCredential ('svc_deploy', $p) invoke-command -computername localhost -credential $c -port 5986 -usessl - SessionOption $so -scriptblock {whoami} get-aduser -filter * -properties * exit
  • New-PSSessionOption cmdlet 创建一个 对象,该对象包含用户管理的会话 (PSSession) 的高级选项。 可以使用该对象作为创建 PSSession 的 cmdlet 的 SessionOption 参数的值,例如 New-PSSession、 Enter-PSSession和 Invoke-Command。
  • PSCredential 对象表示一组安全凭据,例如用户名和密码。 此对象可以作为参数传递给函数,以便该函数以此凭据对象中的用户帐户身份运行。
  • Invoke-Command 在本地和远程计算机上运行命令。

向 PowerShell 函数添加凭据支持 - https://learn.microsoft.com/zh-cn/powershell/scripting/learn/deep-dives/add-credentials-to-powershell-functions?source=recommendations&view=powershell-7.3

通过命令中的端口参数发现,svc_deploy 用户使用的是 WinRM 服务。使用 crackmapexec 进行枚举,发现这组密码是有效的。成功完成账号横移。

image

权限提升(Privilege Escalation)

继续使用 crackmapexec 软件,利用自带的模块进行收集,意外的发现 LAPS 中存在一组凭证。

700

也可以单独运行模块获得: -M lapslaps.py

700

成功已 Administrator 用户登录目标机器。

700

运行 Get-ChildItem 命令查找 root flag。

*Evil-WinRM* PS C:\Users> Get-ChildItem -Path C:\Users -Recurse -Include root.txt

550

参考