Ps/At/WmiExec平替SCShell的基础利用



本文是i春秋线下就业班结业学员「YongYe」分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。

YongYe

i春秋渗透测试工程师成都基地线下就业班10期结业学员。通过推荐就业,已成功拿到Offer并顺利入职,目前担任红队渗透测试工程师,擅长黑盒测试。

他的往期精选>>

为什么白帽大佬热衷挖逻辑漏洞?(附案例解析)

XP_CmdShell平替CLR的基础利用

红队渗透测试工程师分享JSON-RPC测试方法

一、传统内网横向方式

PsExec

PsExec经过身份验证后会将PSEXESVC.exe上传到目标计算机的admin$共享文件夹中,再将PSEXESVC.exe文件复制到远程计算机临时目录内

(C:WindowsTemp或C:Users%user%AppDataLocalTemp等)

并安装启动服务。PsExec会使用当前用户权限执行命令或程序,并将执行结果返回给本机。整个流程会导致在目标机器上留下一些痕迹容易被排查,通常不建议使用,杀软拦截时可尝试。

AtExec

通过远程计算机上的计划任务功能创建并执行指定的任务,因为计划任务无法直接回显命令结果所以是将命令写入文件再读取文件,AtExec工具简化了步骤,全程自动创建任务-运行任务-445端口读取结果。

WmiExec

WMI服务提供对本地和远程计算机上的系统信息和资源的访问。wmiexec就是通过WMI接口与目标机器进行通信并发送需执行的操作并接收响应结果(135端口执行命令,445端口读取回显)。WMI本身提供的类和方法可以在不需要访问目标计算机桌面的情况下实现机器之间的系统管理等操作。

可以明显看出上面三种方式的部分缺点:

1.PsExec会释放PSEXESVC.exe文件,退出失败目标不会删除该文件。

2. AtExec计划任务容易被杀软检测。

3.WmiExec需要开启RPC服务,否则无法建立连接。

这些缺点导致我在一些内网项目中无法横向移动一些机器,于是在寻找替代方式的时候我发现了SCShell。

二、SCShell介绍

作者解释:

SCShell是一种无文件横向移动工具,依赖ChangeServiceConfigA来运行命令。这个工具的优点在于它不会对SMB执行身份验证。所有操作都是通过DCERPC进行的。该程序可以远程执行,无需注册服务或创建服务。它还不必在远程系统上放置任何文件。

三、DCERPC介绍

DCERPC(Distributed Computing Environment Remote Procedure Call):分布式计算环境远程过程调用。是一种远程过程调用协议(RPC),主要解决在不同系统之间进行分布式计算和通信的问题。DCERPC协议定义了一种标准方法,使不同计算机上的程序能够通过网络相互通信。通过DCERPC,应用程序可以在网络上的不同节点之间调用远程服务或过程,就像调用本地函数一样简单。这种机制使得分布式计算和跨平台通信变得更加容易和透明。

DCERPC广泛应用于各种领域和系统中,包括Windows操作系统中的远程过程调用(RPC)服务、LDAP(轻量级目录访问协议)等。提供了安全认证、序列化、数据传输等功能,使得远程通信更加稳定和可靠。

四、选择SCShell理由:

1、SCShell所有操作全流程均通过DCERPC完成,所以只需要目标开启RPC服务。相比AtExec、WmiExec就不需要目标开启smb来读取命令结果,相对情况下也就不会留下命令痕迹。

2、SCShell整个流程是通过修改目标现有服务实现命令执行,相比AtExec和PsExec不会创建新的服务和释放二进制文件。并且写入Payload和运行服务分开,同时执行完毕还会自动恢复服务。所以更加隐蔽也规避了一些杀软。

3、通过SCShell你可以直接在目标上编译程序,如果环境没问题的话。比如远程下载/分块写入源码,再通过msbuild编译程序。

五、利用示例:

●基础命令:SCShell.exe 192.168.0.110 XblAuthManager●"C:windowssystem32cmd.exe /c ping DnsLog.com " . Administrastor PassWord● XblAuthManager为服务、命令执行建议添加C:windowssystem32cmd.exe,如果能正常执行也不用添加。
Ps/At/WmiExec平替SCShell的基础利用

踩过的坑/排错指南

1060

指定服务在目标上不存在

1722

无法连接目标,多种原因导致。如:目标关闭、网路无法到达目标、RPC不可用等等

Ps/At/WmiExec平替SCShell的基础利用

六、代码分析:

打开SCShell.c代码进行分析,这部分接收参数我们跳过。

Ps/At/WmiExec平替SCShell的基础利用

这部分代码主要用于身份验证。第34行使用了LogonUserA内置函数进行身份验证,获取该用户的访问令牌。第48行通过ImpersonateLoggedOnUser内置函数模拟刚才经过验证过的用户,让当前线程可以代表该用户执行操作类似runas命令的作用。

Ps/At/WmiExec平替SCShell的基础利用

第54行通过OpenSCManagerA内置函数打开服务控制管理器并获取和打印句柄。

第62行通过OpenServiceA内置函数打开我们指定的服务并打印句柄。

再通过71行QueryServiceConfigA内置函数读取服务的配置信息,并将其保存在由 GlobalAlloc 分配的内存块中。最后读取/打印服务的可执行文件路径。

Ps/At/WmiExec平替SCShell的基础利用
Ps/At/WmiExec平替SCShell的基础利用

然后重点来了,第84行通过ChangeServiceConfigA函数修改服务写入Payload并打印。这个函数可以更改指定服务的配置信息/属性,如:启动类型、错误控制等。

ChangeServiceConfigA函数使用/排错参考官方文档:

https://learn.microsoft.com/zh-cn/windows/win32/api/winsvc/nf-winsvc-changeserviceconfiga


再通过92行代码启动服务执行Payload。完事再通过102行代码去还原配置清理痕迹。

Ps/At/WmiExec平替SCShell的基础利用

总结整个流程就是:验证身份=>打开服务管理器=>读取指定服务配置=>修改服务配置=>启动服务=>清理痕迹。

注意运行服务是没有回显的,如果需要回显提供几个基础思路可以尝试二开:

1、写入结果到文件。

2、通过smb读取文件。

3、简单命令尝试通过DNS外带结果。

结    语

师傅领进门,修行靠个人。还有一些利用方式可以自己挖掘一下,操作空间还是有的。SCShell实测在一些Wmi或Dcom、smb无法使用的情况下,如杀软拦截、环境问题等。还能够正常的使用/执行命令,建议是做备用。在多次频繁使用的情况下目标可能会出问题无法连接,虽然原理上看是没有问题,注意修改的服务不要影响目标正常运行避免被用户感知。

以上是今天的分享内容,对安全技术感兴趣的小伙伴及时关注后续公众号推文,学习过程中难免会遇到疑问,可以联系i春秋官方客服为您答疑解惑。
Ps/At/WmiExec平替SCShell的基础利用
Ps/At/WmiExec平替SCShell的基础利用
(联系管理员,申请入群)
也欢迎加入i春秋学习交流群,您将获得双重收获:一是接触前沿技术知识;二是与热爱技术、乐于分享的同行建立联系。群管理员会不定期组织福利活动,并邀请行业领袖和知识专家来分享他们的经验。此外,您还能获取丰富的人脉资源和学习资料。期待您的加入,共同成长!
Ps/At/WmiExec平替SCShell的基础利用

原文始发于微信公众号(i春秋):Ps/At/WmiExec平替SCShell的基础利用

版权声明:admin 发表于 2024年8月13日 下午5:02。
转载请注明:Ps/At/WmiExec平替SCShell的基础利用 | CTF导航

相关文章