Hack The Box-Archetype
Hack The Box-Archetype
xxshhIntroduction
通过这篇博客,你会了解到 SMB 协议、smbclient 命令、Microsoft SQL Server 、Impacket工具、xp_cmdshell命令、winPEAS工具、windows权限提升等知识,并对 nmap 和反弹 shell 的使用更加娴熟。
Write-up
User flag
nmap 扫描目标主机端口:
我们发现 SMB 端口是开放的,并且 Microsoft SQL Server 2017 正在端口 1433 上运行。
- SMB
- SMB(Server Message Block)是一种网络文件共享协议,常用于 Windows 操作系统中,用于允许应用程序读取和写入远程计算机上的文件以及请求计算机上的服务。SMB 协议不仅支持文件共享,还支持打印机共享、网络浏览等功能。
- SMB 主要通过端口 445 进行通信。
使用 smbclient 与运行 SMB 协议的远程服务器进行交互:
|
尝试访问 backups:
|
输入 dir 命令列出当前目录中的文件和文件夹:
prod.dtsConfig 看起来像是一个配置文件。使用 get 命令将其下载到本地计算机:
文件内容如下:
我们发现了主机 ARCHETYPE 上用户 sql_svc 的密码。接下来尝试连接 MSSQL 服务器。
Impacket工具中的 mssqlclient.py 可以提供此服务:
|
成功连接Microsoft SQL Server:
有关 MSSQL Server 的渗透技巧可以看这篇文章: https://book.hacktricks.xyz/pentesting/pentesting-mssql-microsoft-sql-server
默认情况下,xp_cmdshell
被禁用,因为它允许执行操作系统命令,这可能带来安全风险。所以首先需要启用 xp_cmdshell
:
|
尝试下 whoami 命令:
因为 windows 操作系统没有内置 netcat ,所以我们要想办法让它安装一个 nc 。
首先在本机下载 nc64.exe,并在8000端口开启一个 http. server。注意把 nc64.exe放在执行 http. server 命令的目录下。
接下来在 MSSQL Server 这边查看当前所处文件位置:
|
作为用户 sql_svc ,没有权限在系统目录中上传文件。根据对 windows 系统的了解,可以在 C:\Users\<username>\Downloads
存放下载的文件。接下来在这个文件夹下,执行下载 nc64.exe 的命令:
|
由于对命令行工具的不熟悉,这里一开始用的是 curl 命令。后面无法执行反弹 shell ,发现Downloads 文件夹内没有 nc64.exe。改为 wget 命令后成功下载。
- 区别:
- **
wget
**:会根据 URL 自动保存文件。可以使用-O
参数指定保存的文件名。 - **
curl
**:默认输出内容到终端,如果要将下载的文件保存到本地,需要使用-O
参数。 - 如果只是需要下载文件,**
wget
** 是更好的选择。 - 如果需要与服务器进行更复杂的交互,发送 HTTP 请求、处理表单数据、上传文件等,**
curl
** 更适合。
- **
在 http.server 处看到目标服务器已经执行了这个命令。
接下来就是常规的反弹 shell 了。
本机开放8888端口监听:
|
目标服务器执行以下命令,通过 nc 将 cmd.exe 绑定到我们的监听端口:
|
在用户的 Desktop 文件找到 flag:
Root flag
接下来需要找到管理员的 flag,涉及到 Windows 权限提升,可以利用工具winPEAS,搜索在 Windows 主机上提升权限的可能路径。
将 winPEASx64.exe 下载到目标服务器:
|
这里尝试了 wget ,curl 和PowerShell 自带的 Invoke-WebRequest
都失败了,错误提示:
|
这是因为在 PowerShell 中,默认使用 Internet Explorer(IE)作为内容解析引擎,但在某些环境中,IE 可能不可用或没有完全配置。这导致无法解析下载的内容。PowerShell 7 以上版本通常不再依赖于 IE 引擎。
解决办法是使用-UseBasicParsing
参数,让 PowerShell 使用基本的 HTML 解析方式,而不是依赖 IE 引擎。
执行 winPEASx64.exe:
|
从输出的报告可以看到:
当前用户拥有[ SeImpersonatePrivilege 权限](SeImpersonatePrivilege and SeCreateGlobalPrivilege - Windows Server | Microsoft Learn)。这个权限可能被 [Juicy Potato](多汁土豆 |黑客技巧 — JuicyPotato | HackTricks)利用。此处待日后展开讨论。
由于当前是一个普通用户账户,同时也是一个服务账户(为某些服务或应用程序运行而创建的账户),因此值得检查一下是否有经常访问的文件或执行的命令。
在 Windows 系统中,PowerShell 会记录用户执行的命令历史,类似于 Linux 中的 .bash_history
。历史记录文件 ConsoleHost_history.txt 存储在 C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\
目录下。
查看这个文件,我们以明文形式获得了管理员用户的密码,该密码为 MEGACORP_4dm1n!!
因为目标主机并没有开放ssh端口,此时我们可以再次使用 Impacket 工具中的 psexec.py 工具,以管理员身份获取 shell。
|
在管理员的 Desktop 文件找到 flag:
Conclusion
这个靶场是目前三个里面花的时间最长的,因为涉及到权限提升,不仅要找到用户 flag,还要找到管理员 flag 。实际上,这个过程中并没有涉及到 Windows 权限提升,而是通过记录 PoweShell 的文件找到了管理员的密码。关于权限提升,目前是一窍不通,以后遇到相关靶场再详细记录。通过三个靶场的练习,一些重复的知识我已经完全掌握了。这是一个良好的开端,日后会坚持刷题的。