传真路由扩展是一个为传真服务添加路由功能的 DLL。一台服务器上可以驻留多个传真路由扩展。当传真服务器接收到传真传输时,它会按优先级顺序将收到的文档依次传递给每个传真路由扩展。
用户使用传真服务管理应用程序(Microsoft 管理控制台 (MMC) 管理单元)设置路由优先级。当应用程序请求连接到 FAX 服务时(例如在 MMC 中加载 fxsadmin),FAX 服务会手动运行。在桌面系统上,该服务存在,但由于需要配置和角色,尝试设置扩展时会超时。
更多信息请参阅 MSDN。默认情况下,与该服务交互需要管理员权限;如果用户对 FAX 服务拥有 FAX Config 角色并且已提权,则他们可以扩展 FAX 服务。
此漏洞利用需要 FAX 服务器角色,该角色默认在工作站上不可用。该角色安装在启用了传真和打印服务的服务器上。
FAX 组中具有 FAX Config 角色的用户也可以添加/删除扩展,这些扩展可能由第三方 FAX 程序配置。默认情况下,FAX Config 角色提供给本地 Administrator 或 Domain Administrator 组中的用户;如果将其用作 Active Directory 中权限提升路径的一部分,则必须在 FAX 服务用户配置中显式定义其他用户。
了解更多: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/fax/-mfax-fax-routing-extension
我们还可以在 FAX 服务内部实现持久化——每次服务启动时都会调用我们的 DLL,而服务不会在重启时自动调用,因此只会为积极使用 FAX 功能的服务器提供持久化。同时,它也向攻击者提供了一条从 Administrator 权限获取 SYSTEM 的替代路径,因为你可以从 Network Service 提升到 SYSTEM。
扩展 FAX 服务以执行 c:\temp\run.bat 中的任何命令一次,并清理 FXSSVC。使用带有适当回调的 Fax Extension DLL 来可靠地启动/停止 FAX 服务,该扩展从 bat 文件启动命令。
出于"持久化"目的,你可以阻止 DLL 被移除,这样无论何时使用 FAX 服务(例如打开、发送或接收传真),都会运行批处理命令文件。
使用 Visual Studio 22 编译此项目,将生成 x86 和 x64 静态二进制文件,它们需要位于同一目录中。
C:\Windows\system32>whoami
nt authority\network service
C:\Windows\system32>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeAuditPrivilege Generate security audits Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
这些文件依据 3-clause BSD 许可证提供。