Sysnative 路径是Windows操作系统中一个非常有用的特性,它解决了32位应用程序在64位系统中访问系统目录时的路径重定向问题。通过利用这一特性,红队渗透时可以实现一些新的功能和绕过防御,如启动64位CMD等。
最近正在看日志目录下的 System.evtx 文件,该文件的绝对地址如下所示,使用Everything发现确实存在。
C:WindowsSystem32winevtLogsSystem.evtx
但是,当用 .NET 默认的 File.Exists 方法去判断时,却得到的结果是false,这个结果显然不符合预期,如下图所示。
接着,将该问题发到dot.Net安全矩阵专属成员群里和朋友们互动,大家大概从权限、被占用、路径等问题去讨论交流,如下图所示。
经过研究后,发现是由于 Windows 系统下的 Sysnative路径造成的。
Sysnative是一个特殊的虚拟路径,仅在64位Windows操作系统中存在,并且仅对32位应用程序可见。
当32位应用程序尝试访问C:WindowsSysnative时,系统会自动将其重定向到实际的64位系统目录C:WindowsSystem32。
这一特性使得32位应用程序能够无缝访问64位系统目录中的资源,解决了路径重定向带来的问题。另外,Sysnative 路径在Windows Vista 版本后已默认提供,详情如下图所示。
利用Sysnative路径,我们可以实现一种启动CMD的新方法。传统上,32位应用程序启动CMD通常是通过访问 C:WindowsSystem32cmd.exe
实际上会被重定向到C:WindowsSysWOW64cmd.exe,即32位CMD,然而,通过指定C:WindowsSysnativecmd.exe,32位应用程序可以成功启动64位CMD。
以下是一个简单的 .NET 代码示例,展示了如何使用 Sysnative 路径启动CMD进程。
using System.Diagnostics;
class Program
{
static void Main()
{
Process.Start("C:\Windows\Sysnative\cmd.exe");
}
}
这段代码将在64位Windows操作系统上成功启动一个64位的CMD。这对于需要执行64位命令或脚本的32位应用程序来说,是一个非常有用的技巧。
当32位应用程序尝试访问C:\Windows\System32时,实际上会被重定向到C:\Windows\SysWOW64,这是因为System32目录包含了64位系统文件,而SysWOW64包含了32位系统文件。
IIS 10可以配置为以32位或64位模式运行应用程序,因此,如果应用程序池配置为 [ 启用32位应用程序 ],则在该池下运行的所有应用程序都将作为32位进程运行,具体的配置如下所示。
如果IIS 10中通过 aspx 调用 C:\Windows\Sysnative\cmd.exe不成功的话,通常与应用程序池的位数配置有关,否则会正常启动,如下图所示。
Sysnative路径的这一特性引起了群友们广泛的讨论和关注。开发者们开始探索其在各种场景下的应用,包括但不限于计划任务、LOLBIN、兼容性。
1. 在计划任务中使用Sysnative路径可以确保即使任务是由32位程序触发的,也能执行64位的命令或脚本。
2. 在渗透测试中,攻击者可以利用Sysnative路径绕过某些安全限制,执行系统自带的64位工具。
3. 对于需要在32位和64位系统上同时运行的程序,Sysnative路径提供了一种统一的方式来访问系统目录中的文件。
然而,需要注意的是,Sysnative路径是一个非公开的特性,其未来可用性可能会受到Windows更新的影响。因此,在依赖这一特性时,开发者应谨慎考虑其潜在的风险和不确定性。
文章涉及的概念性验证工具已打包在星球,感兴趣的朋友可以加入自取。
从漏洞分析到安全攻防,我们涵盖了 .NET 安全各个关键方面,为您呈现最新、最全面的 .NET 安全知识,下面是公众号发布的精华文章集合,推荐大伙阅读!
7.1 20+专栏文章
7.2 海量资源和工具
7.3 专属成员交流群
7.4 已入驻的大咖们
7.5 欢迎加入我们
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...