这是Raphael对SMBGhost LPE的尝试。
我从Metasploit框架的源代码开始:
cve-2020-0796: SMBv3压缩缓冲区溢出 (SMBGhost) (CVE 2020-0796) https://github.com/rapid7/metasploit-framework/tree/master/external/source/exploits/CVE-2020-0796 [BSD许可]
然后,我做了以下工作:
这需要以Dynamic Function Resolution的MODULE$Function格式声明多个Win32 API。 好的一面是,由于DFR负责处理这些,部分代码中调用NTDLL的内容得以减少。:)
我从get_handle_addr中移除了未使用的1000项指针数组。之前这导致cl.exe因局部变量超过8KB限制而插入 __chkstk函数。BOF无法使用该函数。
随后我引入了一些Beacon专用API(例如BeaconPrintf、BeaconInjectProcess等),以便使用Beacon原生方式执行操作。
由于缺少libc相关内容(因为BOF的限制),我不得不编写了几个函数来弥补。
在Beacon中使用'smbghost'别名,不带参数,运行此漏洞利用仅影响Beacon进程令牌。如果利用成功, 当前进程令牌将获得之前不具备的超级权限。例如,你现在可以注入到其他进程(甚至其他桌面会话), 或者在winlogon.exe下生成子进程。由于漏洞并非每次运行都能成功,你可能需要多次运行smbghost。
或者,使用'elevate smbghost',通过Cobalt Strike的Aggressor Script中提供的权限提升API来获取新的 Beacon会话。这对于快速演示没问题,符合产品工作流程等……但它会注入到winlogon.exe中。注入到 winlogon.exe并非此特定提升的不变量。我怀疑所有公开的POC都这样做,因为CreateRemoteThread无法跨越 进程边界工作,并且谁愿意为父进程欺骗编写额外的样板代码呢?winlogon.exe是证明我们拥有提升权限的 简单低垂果实。
要使用Visual Studio编译:
从x64交叉工具命令提示符下运行make.bat。
这将输出expolit.x64.o到dist/目录。
我使用了Visual Studio 2013。其他编译器/版本未经测试。我没有尝试/测试x86。