概述 (Overview)
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 服务,测试后发现匿名访问风险不存在。
随后对 SMB 服务进行枚举,smbclient -L 发现存在一些共享文件夹:
接着使用 smbmap 对共享文件夹内容和权限进行查看,通过 -R 参数可以进行递归显示:
立足点(Foothold)
观察结果,在 \Shares
目录下找到了一个压缩包,继续使用 smbclient 将文件下载到 kali 本地机器(使用文件挂载方式也可以)。
解压时发现存在密码,尝试使用 fcrackzip 软件对解压密码进行暴力枚举。
解压后得到一个 .pfx 后缀的文件,通过 Google 搜索进行进一步查询了解。
由 Public Key Cryptography Standards #12(公钥加密技术12号标准),PKCS#12标准定义,包含了公钥和私钥的二进制形式的证书,以pfx作为证书文件的后缀名。
尝试导出公钥和私钥时又提示需要密码,使用 John 进行密码枚举。
需要用到 pfx2john 组件生成 hash 值,它是 John 的一部分。
成功使用明文密码导出公钥和私钥:
注意到之前的 Windows Remote Management (WinRM) 服务端口,使用 evil-winrm 进行交互 shell 连接时发现存在 --pub-key
、--priv-key
参数。结合得到的公钥和私钥,直接运行 evil-winrm 就可以得到 Powershell。
但没有发现该用户下的 user flag,需要进行用户间的横移操作。
横向移动(Lateral Movement)
在 Kali 本地分别开启了 HTTP 服务、SMB 服务,通过 PowerShell 命令将 winPEAS 传递到目标服务器。执行命令后,将信息收集结果通过 SMB 回传到 Kali 本地。
查看结果,留意到 PowerShell 命令执行记录 log:
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 在本地和远程计算机上运行命令。
通过命令中的端口参数发现,svc_deploy
用户使用的是 WinRM 服务。使用 crackmapexec 进行枚举,发现这组密码是有效的。成功完成账号横移。
权限提升(Privilege Escalation)
继续使用 crackmapexec 软件,利用自带的模块进行收集,意外的发现 LAPS 中存在一组凭证。
也可以单独运行模块获得: -M laps
(laps.py)
成功已 Administrator 用户登录目标机器。
运行 Get-ChildItem
命令查找 root flag。
*Evil-WinRM* PS C:\Users> Get-ChildItem -Path C:\Users -Recurse -Include root.txt