01阅读须知
此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。
02基本介绍
本文内容部分节选自小报童《.NET 通过指定的COM接口执行命令绕过UAC》,完整的文章内容请加入小报童后订阅查看。
03原理分析
在Windows操作系统中,UAC(用户帐户控制)机制用于防止未经授权的程序以管理员权限执行操作,从而增加系统安全性。渗透测试人员利用 ICMLuaUtil 接口的 ShellExec 方法,结合 COM 接口创建具有提升权限的 COM 对象,可以在不触发 UAC 弹窗的情况下启动具有管理员权限的进程
3.1 Waitfor
Waitfor.exe 主要用于在 Windows 环境中实现信号或者事件的等待和同步功能,控制程序的执行顺序或在特定条件下暂停执行,使得 Waitfor.exe 成为系统管理、自动化任务和定时任务中的一个重要工具。Waitfor.exe有一个参数 <name>:表示需要等待的信号名称,可以是任意字符串。
比如,在我们接收到名为 dotNetMatrix 的信号后,使用启动本地计算器进程,具体命令如下所示。
waitfor dotNetMatrix && calc.exe
接着,在本地计算机上发送一个名为 dotNetMatrix 的信号, 有个参数/si 表示等待一个指定的信号。这个参数的意思是 等待信号并在成功接收到信号时返回,运行后如下图所示。
3.2 .NET创建WMI后门
我们的思路是通过创建了一个 WMI 管理类对象,指向 root\cimv2 命名空间。这是 Windows 中用于管理系统资源的核心命名空间,接着,设置类名为 Win32_Backdoor,并通过 Put() 方法保存,再使用 Properties.Add 方法为管理类添加名为 Code 的属性,值为执行计算器的命令。
managementClass.Name = "Win32_Backdoor";
managementClass.Put();
managementClass.Properties.Add("Code", "cmd /c start calc.exe");
实战中,需要将Code 属性中的命令替换成输入的参数命令。
3.3 内网实战利用
首先,通过.NET控制台生成一个自动化利用程序Waitfor.exe,在信号接收端主机运行自定义的waitfor控制台程序,这里启动命令calc,当然也可以替换成别的系统命令,当接收到信号指定后成功启动calc进程
随后,在信号发送端机器上执行以下命令,表示向信号接收端 192.168.101.77 发送名为dotNetMatrix 的信号。
综上,Waitfor 可用于维持目标主机的权限。通过此工具,攻击者可以在内网中被攻击的系统上保持持久的控制权,并在接收到特定信号后执行指定的操作。
04.NET 电子报刊
电子报刊《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。
1) .NET 安全防御绕过
2) .NET 本地权限提升
3) .NET 内网信息收集
4) .NET 内网代理通道
5) .NET 内网横向移动
6) .NET 目标权限维持
7) .NET 数据传输外发
8) .NET 目标痕迹清理